OpenShift oauth-proxy lets you impersonate any user with one header trick
CVE-2026-49332 (CVSS 8.5) abuses underscore/dash header normalization in WSGI and PHP backends. Also: CRIU checkpoint credential tampering, a binutils out-of-bounds write, PhpSpreadsheet SSRF via redirect, and a sg3_utils udev injection requiring physical access.
Nothing on fire, but one worth your attention. CVE-2026-49332 lets a low-privilege user smuggle identity headers past OpenShift's oauth-proxy to impersonate other accounts on WSGI or PHP backends. CVSS 8.5, not exploited in the wild yet. The rest of today's batch covers container checkpoint abuse, a binutils write bug, PhpSpreadsheet SSRF, and a sg3_utils udev injection, all gated by specific configs or physical access.
Today's CVEs
Sorted by urgencyCVE-2026-18107
NVDA malicious process inside a container can abuse CRIU's checkpoint/restore flow to tamper with saved credentials in the checkpoint image. When the container is restored, the process comes back with elevated capabilities and root-level UIDs/GIDs. That said, the actual risk on Red Hat platforms is heavily gated: checkpoint/restore requires root or cluster-admin privileges to trigger from outside the container, OpenShift enforces user namespaces and SELinux (container_t) by default, and seccomp filters survive the restore, so real-world privilege escalation is unlikely without a non-default configuration.
- Affected estate
- Teams running Podman or OpenShift workloads that use CRIU-based checkpoint/restore, especially those with explicit opt-in or custom RBAC granting checkpoint API access
- How to check
- Run `criu --version` to confirm CRIU is installed. In OpenShift, check if the kubelet checkpoint feature gate is enabled and whether RBAC grants checkpoint access beyond cluster-admin.
- Included because
- CVSS 7.8; container escape potential; mitigated by multiple default controls but still worth tracking
- Action
- Apply the patched CRIU package when released. Verify that checkpoint/restore is gated behind root or cluster-admin RBAC and that user namespaces and SELinux are enforced.
- Why it matters
- If exploited under a non-default, permissive configuration, a container process could restore with host-level capabilities and escape containment.
- Source
- Red Hat advisory
Evidence trail
- NVD: View source
CVE-2026-49332
NVDThe OpenShift oauth-proxy strips dash-style forwarded headers (X-Forwarded-User) but ignores the underscore variant (X_Forwarded_User). WSGI and PHP backends treat both as the same variable. An authenticated, low-privilege user can smuggle a forged identity header that the upstream app trusts as the real authenticated user, letting them impersonate any account the app knows about.
- Affected estate
- Anyone running openshift/oauth-proxy in front of WSGI (Python/Django/Flask) or PHP applications
- How to check
- Check the oauth-proxy container image version in your deployments: `oc get pods -o jsonpath='{..image}' | tr ' ' '\n' | grep oauth-proxy`. Test by sending a request with an X_Forwarded_User header and confirming whether the upstream app honors it.
- Included because
- CVSS 8.5; authenticated but low-complexity; identity spoofing in a common proxy pattern
- Action
- Upgrade the oauth-proxy image to the patched release. Add header-stripping rules in your ingress or app config to reject underscore-variant forwarded headers.
- Why it matters
- An authenticated attacker can impersonate other users, potentially gaining admin access to the upstream application without any special privileges.
- Source
- Red Hat advisory
Evidence trail
- NVD: View source
CVE-2026-18220
NVDAn out-of-bounds write in GNU binutils' DLX ELF backend lets a crafted ELF file achieve arbitrary code execution when you run objdump, readelf, strip, nm, objcopy, or ld against it. Researchers have demonstrated full code execution via a glibc FILE structure overwrite. The catch: your binutils build needs the DLX backend enabled, which typically happens when built with --enable-targets=all.
- Affected estate
- Anyone running GNU binutils built with --enable-targets=all, especially CI/CD pipelines, malware analysis sandboxes, and package build systems that process untrusted binaries
- How to check
- Run `objdump --info | grep -i dlx` to see if the DLX backend is present. Check `objdump --version` or your package manager for the installed version.
- Included because
- CVSS 7.8; code execution demonstrated; affects common developer and build tooling
- Action
- Upgrade binutils to the patched release from your distro or upstream. If you compile from source, consider building without --enable-targets=all to exclude DLX.
- Why it matters
- Arbitrary code execution from processing a malicious file is a serious risk in CI/CD and analysis environments where untrusted binaries are routine.
Evidence trail
- NVD: View source
CVE-2026-59931
NVDPhpSpreadsheet's WEBSERVICE() function checks URLs against a domain whitelist before fetching, but PHP's HTTP stream wrapper follows redirects automatically without re-checking the target. An attacker who uploads a crafted XLSX file can bounce through a whitelisted domain to reach internal services, cloud metadata endpoints (169.254.169.254), or arbitrary internal IPs. The response body (up to 32,767 bytes) comes back as a cell value, giving the attacker full read SSRF.
- Affected estate
- PHP developers and ops teams running applications that accept XLSX uploads and use PhpSpreadsheet's getCalculatedValue() with a domain whitelist configured
- How to check
- Run `composer show phpoffice/phpspreadsheet` in your project directory to check the installed version. Search code for calls to getCalculatedValue() and setDomainWhiteList().
- Included because
- CVSS 7.7; SSRF via file upload; cloud credential theft risk; common library in PHP apps
- Action
- Run `composer update phpoffice/phpspreadsheet` to pull the fixed version for your branch (5.8.1, 3.10.7, 2.4.7, 2.1.18, or 1.30.6).
- Why it matters
- Full-read SSRF can exfiltrate cloud credentials from metadata services or expose internal APIs, turning a spreadsheet upload into a network-level attack.
- Source
- GitHub advisory
Evidence trail
- NVD: View source
CVE-2026-16313
NVDThe sg_inq tool from sg3_utils doesn't sanitize control characters in SCSI name strings when run with --export. A newline embedded in a device-supplied name can inject arbitrary key-value pairs into the udev device database. An attacker who can present a crafted SCSI device (USB, iSCSI, or similar) can trigger arbitrary command execution as root when the device is disconnected. This requires the attacker to physically connect or otherwise present a malicious SCSI device to the target system.
- Affected estate
- Linux sysadmins running sg3_utils where udev rules invoke sg_inq --export, particularly systems that accept external SCSI devices (USB storage, iSCSI targets, or shared SAN environments)
- How to check
- Run `sg_inq --version` to check if sg3_utils is installed. Search udev rules for sg_inq references: `grep -r sg_inq /etc/udev/rules.d/ /lib/udev/rules.d/`.
- Included because
- CVSS 7.6; root code execution; requires physical or network device access, which limits but does not eliminate the threat
- Action
- Apply the patched sg3_utils package from your distro. Review and harden udev rules to limit which device events trigger sg_inq --export.
- Why it matters
- A crafted SCSI device can achieve root-level command execution via udev property injection, which is especially concerning for systems that accept removable or network-attached storage.
Evidence trail
- NVD: View source
One email, every Wednesday morning.
SubscribeFrom the field notes
From this beat
Read the rest of the field notes โ