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
