CVE-2026-43503
High · 8.8CVSS
8.8
EPSS
2.0%
Published
May 23, 2026
CISA due date
—
Cloudanix analysis
A Linux kernel flaw can let someone with limited access tamper with protected system data and potentially gain higher privileges.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a Linux kernel sk_buff metadata propagation flaw. Several skb fragment-transfer paths move references to shared, externally owned, or page-cache-backed memory pages into a new skb but fail to preserve the SKBFL_SHARED_FRAG marker. Later in-place network writers, notably ESP/IPsec input handling, may incorrectly believe the packet data is private and skip copy-on-write via skb_cow_data(). That can allow writes into shared backing pages, including page-cache pages associated with files that should be read-only to the attacker. The likely consequences are kernel-mediated memory or page-cache corruption, integrity bypass, local privilege escalation, and possible denial of service depending on the reachable network path and kernel configuration.
Why it matters to the business
A successful attacker with local access can potentially tamper with protected data or system files through the kernel despite normal file permissions, which can lead to privilege escalation, service compromise, data corruption, or system instability. The issue affects the Linux kernel broadly rather than a single application, so exposure depends on deployed kernel versions, enabled networking/IPsec functionality, and use of packet duplication paths such as nftables dup or TEE-style forwarding. Although this is not currently listed in CISA KEV and the supplied EPSS score is low, the high CVSS score and named threat-actor context warrant prioritized remediation on multi-user systems, container hosts, VPN/IPsec gateways, and systems where untrusted users can execute code.
How an attack unfolds
An attacker first obtains low-privileged local execution on a vulnerable Linux system. They then arrange for packet processing that causes skb fragments backed by shared or page-cache memory to be transferred through affected helpers without carrying the shared-fragment marker. One described path uses packet duplication, such as an nftables dup to local destination rule or another nf_dup_ipv4()/xt_TEE caller, so that a copied skb reaches ESP input processing. Because the destination skb still references shared pages but no longer reports them as shared, ESP in-place processing can modify data without first copying it. Under the right conditions, those writes land in page-cache-backed data for files the attacker should not be able to modify, enabling protected file tampering, privilege escalation, or corruption. The provided threat-actor label DirtyClone should be treated as hunt context even though exploit maturity is listed as none and the vulnerability is not currently KEV-listed.
How to fix it
Upgrade the Linux kernel to a vendor release that includes the fix for SKBFL_SHARED_FRAG propagation across affected skb fragment-transfer helpers, including __pskb_copy_fclone(), skb_shift(), skb_gro_receive(), skb_gro_receive_list(), tcp_clone_payload(), and skb_segment(). No fixed version was provided in the input, so use the relevant distribution or kernel vendor advisory as the source of truth and deploy the latest patched kernel for each supported branch. Reboot into the patched kernel after installation; merely installing kernel packages is not sufficient if the running kernel remains vulnerable. Where immediate patching is not possible, reduce exposure by limiting local shell access, restricting untrusted workloads, reviewing nftables/iptables TEE or dup usage, disabling unnecessary IPsec/ESP paths, and minimizing configurations that allow untrusted users to influence packet-processing paths. Treat mitigations as temporary because this is a kernel memory/page-cache integrity issue best addressed by patching.
How to confirm the fix worked
Confirm the running kernel, not only the installed package, is updated to a vendor build containing the fix. Validate with uname -a, package-manager kernel inventory, and vendor advisory metadata. If source or symbol-level validation is possible, verify that skb fragment-transfer paths propagate SKBFL_SHARED_FRAG when moving shared fragments. Review nftables and iptables rules for dup or TEE paths and review IPsec/XFRM ESP configurations to understand remaining exposure. After reboot, confirm no vulnerable older kernel remains selected as the default boot entry and that live-patching coverage, if used, explicitly includes this fix. Functional validation should include regression testing for packet forwarding, IPsec/VPN traffic, GRO/GSO-heavy workloads, and container networking.
Typical attack path
- Gain low-privileged local code execution on a vulnerable Linux host.
- Identify or create a reachable networking path involving fragmented skb data and packet duplication, GRO, segmentation, TCP payload cloning, or related skb fragment-transfer behavior.
- Trigger packet processing that moves shared skb fragments into a destination skb without preserving the SKBFL_SHARED_FRAG marker.
- Route the malformed metadata state into an in-place writer such as ESP/IPsec input processing.
- Cause the kernel to write into memory or page-cache-backed pages that should have been treated as shared and copied first.
- Use the resulting protected-file or memory corruption to alter system behavior, escalate privileges, corrupt data, or crash services.
How to detect it
There is unlikely to be a reliable universal kernel log entry for successful exploitation. Detection should combine exposure review, file-integrity monitoring, and forensic analysis. Collect kernel version data, nftables and iptables rules, XFRM/IPsec state, VPN configuration, auditd logs, EDR telemetry, package verification output, and file-integrity-monitoring alerts. Look for local users or workloads creating traffic that exercises ESP/IPsec and packet duplication paths, especially near the time of unexpected changes to root-owned or read-only files. Review audit logs for writes, renames, or metadata changes to privileged files that do not match authorized package management or configuration-management activity. Check for unexplained package verification failures, altered binaries or libraries, setuid/setgid changes, suspicious new persistence files, kernel oops/panic messages in networking or ESP paths, and unexpected nftables or iptables rule changes involving dup or TEE. For systems with threat-intelligence correlation, search for references to DirtyClone in case notes, detections, malware labels, or campaign tags, but validate with host evidence before declaring compromise.
- nft.*dup to
- dup to
- -j TEE
- --gateway
- xt_TEE
- nf_dup_ipv4
- authencesn
- esp4
- esp6
- ip xfrm state
- ip xfrm policy
- SKBFL_SHARED_FRAG
- skb_has_shared_frag
- skb_cow_data
- __pskb_copy_fclone
- skb_shift
- skb_gro_receive
- skb_gro_receive_list
- tcp_clone_payload
- skb_segment
- DirtyClone
What your security team should do
- Prioritize patching internet-facing VPN/IPsec systems, multi-user Linux servers, container hosts, CI/build workers, and systems running untrusted code.
- Inventory running kernel versions across Linux fleets and map them to vendor advisories that include this fix.
- Reboot systems after kernel updates and verify the active kernel version post-reboot.
- Hunt for risky exposure patterns such as nftables dup rules, iptables TEE targets, nf_dup usage, and active ESP/IPsec XFRM states, especially on systems with local untrusted users.
- Monitor for unexpected modification of root-owned or read-only files, package verification failures, integrity-monitoring alerts, and unexplained kernel instability.
- Treat DirtyClone as threat context for hunting and threat-intelligence correlation, but do not assume exploitation solely from the presence of prerequisite networking rules.
- If patching must be delayed, restrict local access, reduce privileges for untrusted workloads, isolate containers more strongly, and temporarily remove unnecessary packet duplication or IPsec processing paths.
The record
In the Linux kernel, the following vulnerability has been resolved: net: skbuff: propagate shared-frag marker through frag-transfer helpers Two frag-transfer helpers (__pskb_copy_fclone() and skb_shift()) fail to propagate the SKBFL_SHARED_FRAG bit in skb_shinfo()->flags when moving frags from source to destination. __pskb_copy_fclone() defers the rest of the shinfo metadata to skb_copy_header() after copying frag descriptors, but that helper only carries over gso_{size,segs, type} and never touches skb_shinfo()->flags; skb_shift() moves frag descriptors directly and leaves flags untouched. As a result, the destination skb keeps a reference to the same externally-owned or page-cache-backed pages while reporting skb_has_shared_frag() as false. The mismatch is harmful in any in-place writer that uses skb_has_shared_frag() to decide whether shared pages must be detoured through skb_cow_data(). ESP input is one such writer (esp4.c, esp6.c), and a single nft 'dup to <local>' rule -- or any other nf_dup_ipv4() / xt_TEE caller -- is enough to land a pskb_copy()'d skb in esp_input() with the marker stripped, letting an unprivileged user write into the page cache of a root-owned read-only file via authencesn-ESN stray writes. Set SKBFL_SHARED_FRAG on the destination whenever frag descriptors were actually moved from the source. skb_copy() and skb_copy_expand() share skb_copy_header() too but linearize all paged data into freshly allocated head storage and emerge with nr_frags == 0, so skb_has_shared_frag() returns false on its own; they need no change. The same omission exists in skb_gro_receive() and skb_gro_receive_list(). The former moves the incoming skb's frag descriptors into the accumulator's last sub-skb via two paths (a direct frag-move loop and the head_frag + memcpy path); the latter chains the incoming skb whole onto p's frag_list. Downstream skb_segment() reads only skb_shinfo(p)->flags, and skb_segment_list() reuses each sub-skb's shinfo as the nskb -- both p and lp must carry the marker. The same omission also exists in tcp_clone_payload(), which builds an MTU probe skb by moving frag descriptors from skbs on sk_write_queue into a freshly allocated nskb. The helper falls into the same family and warrants the same fix for consistency; no TCP TX-side in-place writer is currently known to reach a user page through this gap, but a future consumer depending on the marker would regress silently. The same omission exists in skb_segment(): the per-iteration flag merge takes only head_skb's flag, and the inner switch that rebinds frag_skb to list_skb on head_skb-frags exhaustion does not fold the new frag_skb's flag into nskb. Fold frag_skb's flag at both sites so segments drawing frags from frag_list members carry the marker.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Tumbleweed | kernel-source | 0 | 7.0.11-1.1 |
Related vulnerabilities
- CVE-2026-53354 In the Linux kernel, the following vulnerability has been resolved: arm64: errata… Also affects kernel-source
- CVE-2026-53325 In the Linux kernel, the following vulnerability has been resolved: agp/amd64: Fix broken… Also affects kernel-source
- CVE-2026-52946 In the Linux kernel, the following vulnerability has been resolved: fs/fcntl: fix… Also affects kernel-source
- CVE-2026-52907 In the Linux kernel, the following vulnerability has been resolved: media: rockchip… Also affects kernel-source
- CVE-2026-52906 In the Linux kernel, the following vulnerability has been resolved: 9p: fix access mode… Also affects kernel-source
- CVE-2026-52905 In the Linux kernel, the following vulnerability has been resolved: mm/damon/core… Also affects kernel-source
- CVE-2026-52904 In the Linux kernel, the following vulnerability has been resolved: drm/nouveau: fix… Also affects kernel-source
- CVE-2026-46332 In the Linux kernel, the following vulnerability has been resolved: greybus… Also affects kernel-source