lacework-global-654
Minimize the execution of container workloads with the NET_RAW capability (Automated)
Profile Applicability
• Level 1
Description
Do not generally permit the running of containers with the potentially dangerous NET_RAW Linux capability.
Rationale
Containers run with a default set of capabilities as assigned by the Container Runtime. By default, this can include potentially dangerous capabilities. With Docker as the container runtime, the NET_RAW
capability is enabled which may be misused by malicious containers.
All containers should drop this capability.
Impact
Pods with containers which run with the NET_RAW
capability will not be permitted.
Audit
Get the configuration of all pods using the following command:
kubectl get pods -o json
Inspect the JSON output and ensure that, for each pod in .items[]
, all containers drop the NET_RAW
capability either explicitly or by using the ALL
alias in .spec.containers[].securityContext.capabilities.drop[]
.
If jq
is available in the shell then pods which violate this principle can be found more easily. Run the following command and ensure that the output is an empty array:
kubectl get pods -o json | jq -r '.items[] | select(.spec.containers[].securityContext.capabilities.drop | index("NET_RAW", "ALL") | not) | {name: .metadata.name}' | jq -s '.'
Remediation
By default, the Linux capabilities available to a container as defined by the container runtime can be fairly generous and may include the NET_RAW capability.
To ensure the NET_RAW capability is not available to a container it is necessary to ensure pod configurations explicitly drop it.
The following example configures a container within a pod to explicitly drop the NET_RAW capability:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: hello-world
image: hello-world
securityContext:
capabilities:
drop: ["NET_RAW"]
For added security, it is possible to explicitly drop all of the default capabilities offered by the container runtime by using the ALL alias. The following example demonstrates this:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: hello-world
image: hello-world
securityContext:
capabilities:
drop: ["ALL"]
References
https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#securitycontext-v1-core
https://man7.org/linux/man-pages/man7/capabilities.7.html