Pod containers do not have the NET_RAW capability
Kubernetes pods where any container's security context adds the NET_RAW Linux capability are identified.
The inspection evaluates container securityContext.capabilities.add entries to detect explicit requests for NET_RAW.
Risk
Granting NET_RAW enables raw sockets for packet crafting and sniffing, undermining confidentiality and integrity. Attackers can run ARP/DNS spoofing, pivot or scan inside the cluster, bypass service isolation, exfiltrate data, and impact availability through network abuse.
Run this check with Prowler
Run in Prowler Cloudprowler kubernetes --checks core_minimize_net_raw_capability_admissionRecommendation
Apply least privilege: avoid adding NET_RAW and drop unnecessary Linux capabilities by default. Use cluster-wide admission policies to block requests for NET_RAW. When strictly required, isolate the workload, restrict egress with network controls, and audit capability use as part of defense in depth.
Remediation
Terraform
resource "kubernetes_pod" "<example_resource_name>" {
metadata { name = "<example_resource_name>" }
spec {
container {
name = "<example_resource_name>"
image = "nginx"
security_context {
capabilities {
drop = ["NET_RAW"] # Critical: ensures the container is not granted NET_RAW
}
}
}
}
}Other
Check Code
from prowler.lib.check.models import Check, Check_Report_Kubernetes
from prowler.providers.kubernetes.services.core.core_client import core_client
class core_minimize_net_raw_capability_admission(Check):
def execute(self) -> Check_Report_Kubernetes:
findings = []
for pod in core_client.pods.values():
report = Check_Report_Kubernetes(metadata=self.metadata(), resource=pod)
report.status = "PASS"
report.status_extended = f"Pod {pod.name} does not have NET_RAW capability."
for container in pod.containers.values():
security_context = getattr(container, "security_context", None)
if security_context:
capabilities = getattr(security_context, "capabilities", None)
if capabilities:
add_capabilities = getattr(capabilities, "add", [])
if add_capabilities and "NET_RAW" in add_capabilities:
report.status = "FAIL"
report.status_extended = f"Pod {pod.name} has NET_RAW capability in container {container.name}."
break
findings.append(report)
return findingsReferences
- https://support.icompaas.com/support/solutions/articles/62000234711-minimize-the-admission-of-containers-with-the-net-raw-capability
- https://dev.to/castai/kubernetes-security-10-best-practices-from-the-industry-and-community-1bp6?comments_sort=latest
- https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container
- https://istio.io/latest/docs/setup/additional-setup/pod-security-admission/
- https://github.com/aws-samples/k8s-psa-pss-testing
- https://kubernetes.io/docs/tasks/configure-pod-container/security-context
- https://kubernetes.io/docs/concepts/security/pod-security-admission/