OpenKruise PodProbeMarker is Vulnerable to SSRF via Unrestricted Host Field
Date: 2026-02
Affected: go/github.com/openkruise/kruise, go/github.com/openkruise/kruise
Attack vector: ssrf
Category: vulnerability-disclosure
Severity: Low
CVE: CVE-2026-24005
CWE: CWE-918
CVSS:  (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:N)

## Summary PodProbeMarker allows defining custom probes with TCPSocket or HTTPGet handlers. The webhook validation does not restrict the Host field in these probe configurations. Since kruise-daemon runs with hostNetwork=true, it executes probes from the node network namespace. An attacker with PodProbeMarker creation permission can specify arbitrary Host values (127.0.0.1, 169.254.169.254, internal IPs) to trigger SSRF from the node, perform port scanning, and receive response feedback through NodePodProbe status messages. ## Kubernetes Version - Kubernetes: v1.30.0 (kind cluster) - Distribution: kind ## Component Version - OpenKruise: v1.8.0 - kruise-daemon: DaemonSet with hostNetwork=true - Affected CRDs: PodProbeMarker, NodePodProbe ## Steps To Reproduce ### Environment Setup 1. Install OpenKruise v1.8.0 in kind cluster: ```bash helm repo add openkruise https://openkruise.github.io/charts/ helm install kruise openkruise/kruise --version 1.8.0 \ --namespace kruise-system --create-namespace ``` 2. Verify kruise-daemon runs with hostNetwork: ```bash kubectl -n kruise-system get ds kruise-daemon -o yaml | grep hostNetwork ``` Output: ``` hostNetwork: true ``` 3. Create test namespace and RBAC: ```bash kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: tenant-a --- apiVersion: v1 kind: ServiceAccount metadata: name: attacker namespace: tenant-a --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: ppm-creator namespa


Mitigations:

Architectural layers (MAESTRO):