NET_RAW capability must be dropped
apiVersion: rules.spotter.dev/v1alpha1
kind: SpotterRule
metadata:
name: spotter-workload-007
labels:
severity: "critical"
category: "workload"
annotations:
rules.spotter.dev/title: "NET_RAW Capabilities Not Being Dropped"
rules.spotter.dev/version: "1.0.0"
rules.spotter.dev/cwe: "CWE-306"
rules.spotter.dev/description: "NET_RAW capability must be dropped"
spec:
match:
resources:
kubernetes:
apiGroups:
- ''
- apps
versions:
- v1
kinds:
- Pod
- Deployment
- StatefulSet
namespaces:
include:
- '*'
exclude:
- kube-system
- kube-public
labels:
exclude:
rules.spotter.dev/ignore: ["true"]
cel: |
(object.kind == 'Pod' && (
(has(object.spec.containers) && object.spec.containers.exists(c,
!has(c.securityContext) || !has(c.securityContext.capabilities) || !has(c.securityContext.capabilities.drop) || !c.securityContext.capabilities.drop.exists(cap, cap == "NET_RAW")
)) ||
(has(object.spec.initContainers) && object.spec.initContainers.exists(c,
!has(c.securityContext) || !has(c.securityContext.capabilities) || !has(c.securityContext.capabilities.drop) || !c.securityContext.capabilities.drop.exists(cap, cap == "NET_RAW")
))
)) ||
(object.kind != 'Pod' && (
(has(object.spec.template.spec.containers) && object.spec.template.spec.containers.exists(c,
!has(c.securityContext) || !has(c.securityContext.capabilities) || !has(c.securityContext.capabilities.drop) || !c.securityContext.capabilities.drop.exists(cap, cap == "NET_RAW")
)) ||
(has(object.spec.template.spec.initContainers) && object.spec.template.spec.initContainers.exists(c,
!has(c.securityContext) || !has(c.securityContext.capabilities) || !has(c.securityContext.capabilities.drop) || !c.securityContext.capabilities.drop.exists(cap, cap == "NET_RAW")
))
))
remediation:
manual: "Drop NET_RAW capability in securityContext by adding it to the capabilities.drop list"
references:
- title: "CIS Kubernetes Benchmark v1.8.0"
url: "https://www.cisecurity.org/benchmark/kubernetes"