Container escape in insights-runtime-extractor via privileged exec
Key facts
- Attack vector
- Local
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- Privilege escalation
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- Partial Red Hat: 4 fixed, 1 without a fix
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and Red Hat. Impact type from CWE-250.
Summary
The insights-runtime-extractor in Red Hat OpenShift Container Platform runs as a privileged DaemonSet with host PID access. After switching to the workload's user with seteuid, it keeps the real and saved root UID and the permitted capabilities (CWE-250). The extractor then runs the workload's own argv[0] binary as root in the host user namespace, so a local user who can schedule a pod with low privileges can run code that restores full root and reaches the host CRI-O socket.
Written with Claude Haiku 5.5 from the sources below · 2026-10-30
Description from the CNA
The insights-runtime-extractor runs as a privileged DaemonSet (`hostPID: true`) that scans container processes for runtime fingerprinting. When scanning a container, the coordinator: 1. **fork()s** a child process 2. **setns()** into the target container's PID and mount namespaces 3. **fchdir()** back to an orphaned FD pointing at the extractor's own root filesystem (where `/crio.sock` is hostPath-mounted) 4. Calls **only `seteuid(target_uid)`** — changing the effective UID but leaving the **real UID and saved-set-UID at 0** and **retaining the permitted capability set** 5. The `check_no_privileged_perms()` guard inspects only the Effective capability set (so it passes), and is **skipped entirely when the target runs as uid 0** 6. The `VersionExecutable` fingerprint invokes `fpr_kind_executable` with `process.command_line[0]` — the target's argv[0], read from `/proc/<pid>/cmdline` and **fully controlled by the workload** 7. `fpr_kind_executable` calls `exec.Command(executable, "--version").Output()` — executing the **workload's own binary** inside the workload's mount namespace while **ruid=0 in the host user namespace** The executed process can call `setuid(0)` to restore full root with `CAP_SYS_ADMIN`, and inherits the orphaned cwd which resolves into the extractor container's filesystem containing the host CRI-O socket. ## Affected Code ### 1. Insufficient privilege drop (Rust — extractor coordinator) **File:** `extractor/src/insights_runtime_extractor.rs` ```rust // Lines 139-146 — seteuid-only drop, guard skipped for root containers join_process_namespaces(process.pid)?; change_dir(current_dir); switch_user(*process.uid)?; if *process.uid != 0 { perms::check_no_privileged_perms() .expect("Must not have privileged permissions to run fingerprints"); } fingerprint::run_fingerprints(&config, out_dir, &process); ``` ```rust // Lines 182-185 — only effective UID changed; ruid/suid stay 0 fn switch_user(uid: u32) -> Result<(), ScannerError> { debug!("... Becoming user: {uid}"); seteuid(uid.into()).map_err(|e| ScannerError::Errno(e)) } ``` ### 2. Execution of untrusted binary (Go — fingerprint) **File:** `fingerprints/pkg/utils/file.go` ```go // Lines 75-80 — executes a path taken verbatim from workload's argv[0] func GetExecutableVersionOutput(executable string) (string, error) { out, err := exec.Command(executable, "--version").Output() if err != nil { return "", err } return string(out), nil } ``` ### 3. Workload-controlled path forwarded (Rust — version_executable) **File:** `version_executable.rs` ```rust // Lines 29-34 — workload-controlled command_line[0] forwarded to fingerprint return Some(vec![ fpr_kind_executable, out_dir.to_string(), String::from(&process.command_line[0]), String::from(&version_executable.runtime_kind_name), ]); ``` ## Attack Pattern **Attacker:** Any tenant able to schedule a pod (unprivileged, any namespace) **Victim:** The node running the insights-runtime-extractor DaemonSet **Trigger:** Automatic — the DaemonSet scans all container processes on the node **Attack sequence:** 1. Attacker creates a pod whose process name matches a configured versioned-executable pattern (`node`, `python`, `python3`, `MainThread`, or contains `java`) 2. The pod's main binary (at the path matching argv[0]) is a malicious executable that calls `setuid(0)` to restore root 3. When the insights operator triggers a scan, the DaemonSet forks, enters the attacker's mount namespace, and executes the attacker's binary with ruid=0 4. The attacker's code regains full root with `CAP_SYS_ADMIN` in the host user namespace 5. The inherited cwd contains the host CRI-O socket → full node compromise
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Red Hat | Red Hat OpenShift Container Platform 4.19 | — | 1792771524 | Patch available | CNA |
| Red Hat | Red Hat OpenShift Container Platform 4.20 | — | 1792849665 | Patch available | CNA |
| Red Hat | Red Hat OpenShift Container Platform 4.21 | — | 1792008935 | Patch available | CNA |
| Red Hat | Red Hat OpenShift Container Platform 4.22 | — | 1792844435 | Patch available | CNA |
| Red Hat | Red Hat OpenShift Container Platform 5 | — | — | No fix listed | CNA |
- Red Hat OpenShift Container Platform 4.19 VendorRed Hat Affected — Fixed in 1792771524 Patch available CNA
- Red Hat OpenShift Container Platform 4.20 VendorRed Hat Affected — Fixed in 1792849665 Patch available CNA
- Red Hat OpenShift Container Platform 4.21 VendorRed Hat Affected — Fixed in 1792008935 Patch available CNA
- Red Hat OpenShift Container Platform 4.22 VendorRed Hat Affected — Fixed in 1792844435 Patch available CNA
- Red Hat OpenShift Container Platform 5 VendorRed Hat Affected — Fixed in — No fix listed CNA
Remediation
Update Red Hat OpenShift Container Platform 4.19 to 4.19.53 (RHSA-2026:89655), 4.20 to 4.20.44 (RHSA-2026:89341), 4.21 to 4.21.39 (RHSA-2026:83702) and 4.22 to 4.22.20 (RHSA-2026:89198). The sources list no fixed version for Red Hat OpenShift Container Platform 5.
Written with Claude Haiku 5.5 from the sources below · 2026-10-30
Red Hat 4 advisories
- RHSA-2026:89198 Released 2026-10-27 · Red Hat rating ImportantOpenShift Container Platform 4.22.20 bug fix and security update
- Red Hat OpenShift Container Platform 4.22 registry.redhat.io/openshift4/aws-karpenter-provider-aws-rhel9, registry.redhat.io/openshift4/aws-kms-encryption-provider-rhel9, registry.redhat.io/openshift4/aws-node-termination-handler-rhel9 +47
- RHSA-2026:89341 Released 2026-10-26 · Red Hat rating ImportantOpenShift Container Platform 4.20.44 bug fix and security update
- Red Hat OpenShift Container Platform 4.20 registry.redhat.io/openshift4/aws-karpenter-provider-aws-rhel9, registry.redhat.io/openshift4/aws-kms-encryption-provider-rhel9, registry.redhat.io/openshift4/azure-kms-encryption-provider-rhel9 +47
- RHSA-2026:89655 Released 2026-10-26 · Red Hat rating ImportantOpenShift Container Platform 4.19.53 bug fix and security update
- Red Hat OpenShift Container Platform 4.19 registry.redhat.io/openshift4/aws-karpenter-provider-aws-rhel9, registry.redhat.io/openshift4/aws-kms-encryption-provider-rhel9, registry.redhat.io/openshift4/azure-kms-encryption-provider-rhel9 +47
Show 1 more Red Hat advisories
- RHSA-2026:83702 Released 2026-10-20 · Red Hat rating ImportantOpenShift Container Platform 4.21.39 bug fix and security update
- Red Hat OpenShift Container Platform 4.21 registry.redhat.io/openshift4/insights-runtime-extractor-rhel9, registry.redhat.io/openshift4/openshift-route-controller-manager-rhel9, registry.redhat.io/openshift4/ose-aws-cluster-api-controllers-rhel9 +25
Fixed in the same release
Records fixed by the same vendor advisory or release, as the CNA lists them.
- Advisory ·
Red Hat OpenShift Container Platform 4.19, Red Hat OpenShift Container Platform 4.20 and 3 more products — RHSA-2026:83702
3 records Highest priority Priority LOW 3 LOW
Other records, highest priority first
- TI-2026-71187 Server-side request forgery in OpenShift console via Helm chart URLPriority LOW 34
- TI-2026-69469 Insights operator gather service account can read all cluster secretsPriority LOW 34
Vendor assessments
Red Hat
Red Hat rating: Important. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Red Hat OpenShift Container Platform 5 | Affected | No fix yet |
| Red Hat OpenShift Container Platform 4.19 | Fixed | RHSA-2026:89655 |
| Red Hat OpenShift Container Platform 4.20 | Fixed | RHSA-2026:89341 |
| Red Hat OpenShift Container Platform 4.21 | Fixed | RHSA-2026:83702 |
| Red Hat OpenShift Container Platform 4.22 | Fixed | RHSA-2026:89198 |
Not affected: 4 products
- Red Hat OpenShift Container Platform 4.19
- Red Hat OpenShift Container Platform 4.20
- Red Hat OpenShift Container Platform 4.21
- Red Hat OpenShift Container Platform 4.22
Timeline
- 2026-10-14 Threatist record created from CVE-2026-104795
- 2026-10-14 Alias added: GHSA-98f3-7g2j-289q
- 2026-10-14 CISA SSVC decision points changed
- 2026-10-14 Priority changed: MEDIUM → LOW
- 2026-10-16 Affected versions changed · Red Hat
- 2026-10-16 CVSS score added · Red Hat
- 2026-10-20 Fix available: RHSA-2026:83702 · Red Hat
- 2026-10-20 Fix available: Red Hat OpenShift Container Platform 4.21 · Red Hat
- 2026-10-20 Fix available: openshift4/insights-runtime-extractor-rhel9@1792008935 · CNA
- 2026-10-20 1 new reference · CNA
- 2026-10-29 Fix available: openshift4/insights-runtime-extractor-rhel9@1792771524, openshift4/insights-runtime-extractor-rhel9@1792844435, openshift4/insights-runtime-extractor-rhel9@1792849665 · CNA
- 2026-10-29 3 new references · CNA
- 2026-10-29 Fix available: Red Hat OpenShift Container Platform 4.19, Red Hat OpenShift Container Platform 4.20, Red Hat OpenShift Container Platform 4.22 · Red Hat
- 2026-10-30 Fix available: RHSA-2026:89341 · Red Hat
- 2026-10-30 Fix available: RHSA-2026:89198 · Red Hat
- 2026-10-30 Fix available: RHSA-2026:89655 · Red Hat
- 2026-10-30 Affected versions changed · CNA
- 2026-10-30 Affected versions changed · Red Hat
References
More Red Hat vulnerabilities
- TI-2019-15875 Protection mechanism failure in Jenkins Pipeline: Groovy Plugin KEVCVSS 3.1CRITICAL 9.9
- TI-2019-15874 Protection mechanism failure in Jenkins Script Security Plugin KEVCVSS 3.1CRITICAL 9.9
- TI-2019-08259 Underflow in PHP-FPM can lead to RCE KEVCVSS 3.1CRITICAL 9.8
- TI-2019-05363 Code injection in Elastic Kibana KEVCVSS 3.1CRITICAL 10.0
- TI-2019-03949 Out-of-bounds write in ESXi and Horizon DaaS KEVCVSS 3.1CRITICAL 9.8
- TI-2018-16080 A code execution vulnerability exists in the Stapler web framework used by Jenkins 2.153… KEVCVSS 3.1CRITICAL 9.8
Sources
- CVE-2026-104795 · CVE Program
- CVE-2026-104795 · NVD
- FIRST EPSS
- GHSA-98f3-7g2j-289q · GitHub Advisory Database · CC BY 4.0
- CVE-2026-104795 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences