To deploy Todolist on Kubernetes along with the needed ldap backend for exploiting the Log4shell vulnerability:
- A kubernetes cluster where you have permissions to create namespaces, deployments and services
- The
kubectl
client and credenials configuration - Docker Desktop or docker-ce (for building and pushing images)
- A DockerHub account that you are logged in with at the command prompt (via
docker login
)
Assuming you have your kubernetes cluster up and ready, from the top level of this repo you can run ./k8s-quickstart.sh
which will do the following:
- Builds todolist-goof image and pushes it to Docker Hub. (see below for account/tagging info)
- Deploys the todolist to the
default
namespace in your kubernetes cluster along with a LoadBalancer type service - Builds the log4shell-server image and pushes to Docker Hub. (see below for account/tagging info)
- Deploys the log4shell-server and a pair of ClusterIP type services into a new namespace named
darkweb
in your Kubernetes cluster.
NOTE: You will be prompted for your DockerHub account in order for the scripts to tag, push and pull the images.
If you set and environmental variable named DOCKER_ACCOUNT
to that account name, the script will pre-populate that prompt with it.
export DOCKER_ACCOUNT="yourdockeraccount"
Once complete, run kubectl get svc
and note the IP Address or hostname of the goof
service.
You should be able to open a browser to http://{svc-ip-addr}/todolist and see the app
- In order to perform NetworkPolicy egress examples, you will need to deploy the Calico CNI plugin as EKS does not implement NetworkPolicy by default.
The
eks-calico.sh
script intodolist-goof/k8s
will deploy this for you. (that script is sym-linked to the top level here too) - You should log into the AWS console and change inbound access for the good service's ELB to only allow your home IP, otherwise you will have audience members trying to mess with it.
- Docker Desktop automatically serves the goof service loadblancer external IP to your workstation's localhost so the app will be available at http://localhost/todolist
- Docker Desktop Kubernetes CNI does not implement Network Policy so you will not be able to demonstrate any mitigation techniques that use that.
- Kind's default CNI does not currently support Network Policy so you should deploy your own using the instructions on their website.
- If running Kind on top of Docker Desktop, you will need to run a port-forward to access the app. For example, use something like this:
kubectl port-forward service/goof 8000:80
and then access it via browser at http://localhost:8000/todolist
Run the /.k8s-quickstop.sh
script at the top level of this repo which will do the following:
- Deletes the todolist deployment and associated service in the
default
namespace - Deletes the log4shell deployment and associated services in the
darkweb
namespace and deltes the namespace as well Note: This will not delete any additional objects you may have deployed such as NetworkPolicies.
It is up to you to shut down your Kubernetes cluster as appropriate.