Read the docs

Container escape in insights-runtime-extractor via privileged exec

Priority LOW 39CWE-250Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00183 7th percentileScored 2026-11-07
Fix Partial Red Hat: 4 advisoriesRed Hat: 4 fixed, 1 without a fix

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

VendorProductAffected versionsFixed inStatusSource
Red HatRed Hat OpenShift Container Platform 4.19—1792771524Patch availableCNA
Red HatRed Hat OpenShift Container Platform 4.20—1792849665Patch availableCNA
Red HatRed Hat OpenShift Container Platform 4.21—1792008935Patch availableCNA
Red HatRed Hat OpenShift Container Platform 4.22—1792844435Patch availableCNA
Red HatRed Hat OpenShift Container Platform 5——No fix listedCNA
  • 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

CPE names CNA · 5

CPEVersionsRoleVendor
cpe:/a:redhat:openshift:4.19::el94.19—Red Hat
cpe:/a:redhat:openshift:4.20::el94.20—Red Hat
cpe:/a:redhat:openshift:4.21::el94.21—Red Hat
cpe:/a:redhat:openshift:4.22::el94.22—Red Hat
cpe:/a:redhat:openshift:55—Red Hat
  • cpe:/a:redhat:openshift:4.19::el9 Versions 4.19 — ·Red Hat
  • cpe:/a:redhat:openshift:4.20::el9 Versions 4.20 — ·Red Hat
  • cpe:/a:redhat:openshift:4.21::el9 Versions 4.21 — ·Red Hat
  • cpe:/a:redhat:openshift:4.22::el9 Versions 4.22 — ·Red Hat
  • cpe:/a:redhat:openshift:5 Versions 5 — ·Red Hat

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 Important
    OpenShift 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 Important
    OpenShift 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 Important
    OpenShift 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 Important
    OpenShift 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 →

ProductStatusPlan or fix
Red Hat OpenShift Container Platform 5AffectedNo fix yet
Red Hat OpenShift Container Platform 4.19Fixed RHSA-2026:89655
Red Hat OpenShift Container Platform 4.20Fixed RHSA-2026:89341
Red Hat OpenShift Container Platform 4.21Fixed RHSA-2026:83702
Red Hat OpenShift Container Platform 4.22Fixed 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

  1. 2026-10-14 Threatist record created from CVE-2026-104795
  2. 2026-10-14 Alias added: GHSA-98f3-7g2j-289q
  3. 2026-10-14 CISA SSVC decision points changed
  4. 2026-10-14 Priority changed: MEDIUM → LOW
  5. 2026-10-16 Affected versions changed · Red Hat
  6. 2026-10-16 CVSS score added · Red Hat
  7. 2026-10-20 Fix available: RHSA-2026:83702 · Red Hat
  8. 2026-10-20 Fix available: Red Hat OpenShift Container Platform 4.21 · Red Hat
  9. 2026-10-20 Fix available: openshift4/insights-runtime-extractor-rhel9@1792008935 · CNA
  10. 2026-10-20 1 new reference · CNA
  11. 2026-10-29 Fix available: openshift4/insights-runtime-extractor-rhel9@1792771524, openshift4/insights-runtime-extractor-rhel9@1792844435, openshift4/insights-runtime-extractor-rhel9@1792849665 · CNA
  12. 2026-10-29 3 new references · CNA
  13. 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
  14. 2026-10-30 Fix available: RHSA-2026:89341 · Red Hat
  15. 2026-10-30 Fix available: RHSA-2026:89198 · Red Hat
  16. 2026-10-30 Fix available: RHSA-2026:89655 · Red Hat
  17. 2026-10-30 Affected versions changed · CNA
  18. 2026-10-30 Affected versions changed · Red Hat

References

  • 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
See all 7413 →

Sources