Privilege Escalation in insights-runtime-extractor via Improper Capability Dropping
The insights-runtime-extractor DaemonSet fails to correctly drop privileges when scanning containers, allowing malicious workloads to execute code as root in the host user namespace.
CVE search metadata
CVE search record: CVE-2026-104795. Severity: high. CVSS: 8.8. KEV: no. Product: insights-runtime-extractor. Brief: Privilege Escalation in insights-runtime-extractor via Improper Capability Dropping. Brief link: https://feed.craftedsignal.io/briefs/2026-10-cve-2026-104795/
CVE-2026-104795 describes a critical privilege escalation vulnerability within the insights-runtime-extractor DaemonSet. The extractor, which runs with hostPID: true and elevated privileges to perform runtime fingerprinting of container processes, fails to perform a complete privilege drop when interacting with untrusted container namespaces. Specifically, the Rust-based coordinator uses seteuid() to change the effective user ID while retaining the real UID and saved-set-UID as 0, and fails to drop permitted capabilities.
When the extractor identifies a process binary matching a fingerprinting pattern (e.g., node, python, or java), it invokes a Go-based utility that executes the binary from the container's namespace to retrieve version information. Because the extractor is still effectively root in the host user namespace and retains elevated capabilities, the malicious binary can restore full root access, inherit an orphaned directory file descriptor pointing to the extractor's root filesystem, and access the host CRI-O socket. This results in full node compromise for any tenant capable of scheduling a pod on the affected cluster.
Attack Chain
- An attacker schedules a malicious pod with an unprivileged service account on a node running the
insights-runtime-extractorDaemonSet. - The attacker defines the pod's main binary to match common runtime names targeted by the extractor (e.g.,
node,python). - The
insights-runtime-extractorcoordinator detects the pod process and forks a child process to perform fingerprinting. - The extractor joins the target pod's PID and mount namespaces but fails to drop root privileges (ruid=0) or permitted capabilities.
- The extractor calls
exec.Commandon the malicious binary located within the pod's mount namespace. - The malicious binary executes with root privileges in the host user namespace.
- The binary calls
setuid(0)to escalate privileges and uses the inherited file descriptor to access/crio.sock. - The attacker interacts with the CRI-O socket to achieve full node compromise and container breakout.
Impact
Successful exploitation leads to full compromise of the Kubernetes node hosting the vulnerable insights-runtime-extractor DaemonSet. An attacker can transition from an unprivileged pod to host-level root, enabling credential theft, lateral movement within the cluster, and potential access to persistent volumes or sensitive secrets stored on the node.
Recommendation
- Audit existing
insights-runtime-extractordeployments for thehostPID: truesecurity context and restrict access to clusters where untrusted tenants are present. - Implement Kubernetes Admission Controllers to prevent the deployment of pods containing binaries that match the vulnerable fingerprinting patterns until a vendor patch is applied.
- Monitor for unusual
execcalls originating from theinsights-runtime-extractorcontainer process targeting binary paths within/proc/<pid>/root. - Apply patches provided by the vendor for the
insights-runtime-extractoronce available to ensuresetresuid()and proper capability dropping are implemented.
Immediate actions
Review DaemonSet configuration for hostPID=true and limit pod scheduling on nodes running the extractor.
Mitigations
Patch or upgrade the insights-runtime-extractor package once the vendor release containing privilege dropping fixes becomes available.
CVE-2026-104795