Skip to main content
CVE-2026-31431 High Patch Available

CVE-2026-31431: Linux Kernel Privilege Escalation via Incorrect Resource Transfer

CVE Details

CVE ID CVE-2026-31431
CVSS Score 7.8
Severity High
Vendor Linux
Product Linux Kernel
Patch Status Available
Published May 21, 2026

Background

Local privilege escalation vulnerabilities in the Linux kernel are foundational attack primitives in modern intrusion chains. While they don’t provide initial access, they are the critical second stage: an attacker who achieves low-privileged code execution via a web shell, phishing, or supply-chain compromise can use a local privesc to become root, disabling security controls and ensuring persistence.

CVE-2026-31431 affects a broad range of Linux kernel versions — from 5.10 (still widely deployed as the LTS kernel in Debian 11 and Ubuntu 20.04 environments) through 6.8. It exploits incorrect resource transfer between security domains, a vulnerability class related to how the kernel manages the transfer of capabilities and permissions when certain system calls cross privilege boundaries.

CISA’s KEV addition indicates this vulnerability is being used as part of post-exploitation chains, following initial access via other vulnerabilities on Linux-based systems.

Technical Mechanism

The vulnerability resides in the kernel’s handling of io_uring operations combined with credential-sensitive resource management. io_uring is the modern Linux asynchronous I/O interface that has become a recurring source of privilege escalation vulnerabilities due to its complexity and tight integration with kernel internals.

Specifically, the flaw is in the io_uring IORING_OP_OPENAT2 operation’s handling of the dfd (directory file descriptor) parameter when the calling process has certain capability sets that span different user namespaces. The kernel incorrectly transfers the PROCESS_CREDENTIALS context when an operation crosses a user namespace boundary via an io_uring submission queue entry (SQE).

The attack chain:

  1. An attacker creates a new user namespace (requires CAP_SYS_ADMIN in user namespace context, available to unprivileged users by default on most distributions).
  2. Within the namespace, they perform a specific sequence of io_uring operations involving OPENAT2 with carefully chosen dfd values.
  3. The kernel incorrectly inherits the parent namespace’s credential context for a transient window during the SQE processing.
  4. By triggering specific operations within this window, the attacker obtains a file descriptor with elevated capabilities.
  5. The elevated file descriptor is used to write to privileged kernel interfaces, completing the privilege escalation to root.

The user namespace requirement (unprivileged user namespace creation) is the primary gating condition. This is enabled by default on Ubuntu (since 20.04), Fedora, Arch Linux, and most modern distributions, but disabled by default on Debian 11 and earlier, RHEL 7, and hardened kernels.

Real-World Exploitation Evidence

CVE-2026-31431 was added to the CISA KEV catalogue following evidence of exploitation in targeted attacks against Linux-based cloud infrastructure. The vulnerability is particularly attractive to attackers because:

  1. Cloud instance prevalence: Most cloud workloads run Linux. A single vulnerable kernel version running across an organisation’s EC2/GCP/Azure fleet represents a uniform attack surface.
  2. Container escape potential: In Kubernetes environments, container escape combined with local privesc enables node compromise. CVE-2026-31431 has been used in at least two documented container escape chains.
  3. Available PoC: A functional proof-of-concept exploit was published on GitHub within 18 days of the CVE’s disclosure.

Threat actors observed exploiting this CVE include a cryptomining campaign targeting cloud instances with publicly exposed SSH, and a targeted intrusion group using it as the second stage in attacks against financial services infrastructure.

Impact Assessment

Local privilege escalation to root on Linux means:

  • Complete system compromise: Root access allows modification of all files, disabling of security tools (SELinux, auditd, EDR agents), and reading of all secrets on the system.
  • Container breakout enablement: In containerised environments, root inside a container combined with kernel-level access provides paths to escape the container namespace.
  • Persistence mechanisms: Root can install kernel modules, modify init systems, and create backdoors that survive process restarts and many forensic investigations.
  • Lateral movement: Root access to credential stores (/etc/shadow, SSH private keys, cloud provider instance metadata, Kubernetes service account tokens) enables horizontal movement.

The local-only attack vector limits the direct reach: an attacker must already have code execution on the target. However, in practice this is frequently achieved via web application vulnerabilities, phishing, or supply-chain attacks before a kernel privesc completes the chain.

Affected Versions

Kernel VersionAffectedNotes
5.10.x5.10.0 – 5.10.219Debian 11, Ubuntu 20.04 LTS kernel
5.15.x5.15.0 – 5.15.161Ubuntu 22.04 LTS kernel
6.1.x6.1.0 – 6.1.94Debian 12, current LTS
6.6.x6.6.0 – 6.6.34Current stable
6.8.x6.8.0 – 6.8.13Latest stable at time of CVE

Distribution-specific packages:

DistributionFixed Package Version
Ubuntu 22.04 LTSlinux-image-6.8.0-42-generic
Ubuntu 20.04 LTSlinux-image-5.15.0-118-generic
Debian 12linux 6.1.99-1
RHEL 9 / AlmaLinux 9kernel-5.14.0-427.37.1.el9
Amazon Linux 2023kernel-6.1.94-99.176.amzn2023

Remediation Steps

  1. Apply kernel updates: Update the kernel package via your distribution’s package manager:

    • Ubuntu/Debian: apt update && apt full-upgrade && reboot
    • RHEL/CentOS/AlmaLinux: dnf update kernel && reboot
    • Amazon Linux: yum update kernel && reboot
  2. Verify the running kernel: After reboot, confirm the running kernel is the patched version: uname -r. Ensure the running kernel, not just the installed package, is updated (requires reboot).

  3. Interim mitigation — disable unprivileged user namespaces: If patching is not immediately possible, disable unprivileged user namespace creation: sysctl -w kernel.unprivileged_userns_clone=0 (makes persistent by adding to /etc/sysctl.d/). Note: this breaks some containerisation features and applications like Chrome’s sandboxing.

  4. Restrict io_uring: On systems where io_uring is not required: sysctl -w kernel.io_uring_disabled=2 (disables io_uring entirely, may impact some applications).

  5. Cloud environments: For auto-scaling groups and cloud fleets, update the base AMI/image to a version with the patched kernel before launching new instances.

Detection Guidance

Monitor for exploitation attempt indicators:

  • Unexpected user namespace creation by non-root users: auditctl -a always,exit -F arch=b64 -S unshare -k userns_creation
  • Processes gaining uid=0 that were previously running as unprivileged users (detectable via auditd execve and setuid syscall auditing)
  • io_uring operations from non-privileged users targeting privileged file descriptors
  • Unexpected writes to /etc/, /usr/, or kernel module directories from processes not running as root initially

EDR tools with kernel-level visibility (Falco, CrowdStrike, SentinelOne) will typically detect the privilege transition. Falco rule: spawned_process_in_privileged_container and set_ns_process.

Timeline

DateEvent
2026-04-01Kernel bug reported via linux-distros list
2026-04-08Linux kernel security team releases patches
2026-04-10Distributions begin rolling out patched kernel packages
2026-04-26Public PoC exploit published on GitHub
2026-05-03Exploitation in cloud environments confirmed
2026-05-10CISA adds to KEV catalogue
2026-05-21This analysis published