Profile applicability: Level 1
By default, containers are permitted mostly unrestricted execution within their own
context. A cyber actor who has gained execution in a container can create files, download
scripts, and modify the application within the container. Kubernetes can lock down
a container’s file system, thereby preventing many post-exploitation activities. However,
these limitations also affect legitimate container applications and can potentially
result in crashes or anomalous behavior. To prevent damaging legitimate applications,
Kubernetes administrators can mount secondary read/write file systems for specific
directories where applications require write access.
Audit
Run the following command and check the securityContext of each pod’s containers:
kubectl get pods --all-namespaces
Ensure each container has
securityContext.readOnlyRootFilesystem
set to true
.Remediation
Change
containers[].securityContext.readOnlyRootFilesystem
to true
.The following example is a Kubernetes deployment template that uses a read-only root
file system.
securityContext: readOnlyRootFilesystem: true
The lines setting
volumeMounts
and volumes
show how to create a writeable volume for applications requiring this capability.apiVersion: apps/v1 kind: Deployment metadata: labels: app: web name: web spec: selector: matchLabels: app: web template: metadata: labels: app: web name: web spec: containers: - command: ["sleep"] args: ["999"] image: ubuntu:latest name: web securityContext: readOnlyRootFilesystem: true volumeMounts: - mountPath: /writeable/location/here name: volName volumes: - emptyDir: {} name: volName