CVE-2026-46331

Published Jun 16, 2026

Last updated a month ago

Overview

AI description

Automated description summarized from trusted sources.

CVE-2026-46331, dubbed "pedit COW," is a local privilege escalation vulnerability found within the Linux kernel's traffic-control subsystem, specifically affecting the `act_pedit` packet-editing action. The flaw stems from a "partial Copy-on-Write (COW)" failure where the `tcf_pedit_act()` function incorrectly calculates the writable range. It computes this range before accounting for runtime header offsets introduced by typed keys, leading to an out-of-bounds write that corrupts shared page-cache memory. Exploitation of this vulnerability allows a local unprivileged user to gain root access on affected systems. Attackers can achieve this by poisoning the cached copy of a setuid root binary, such as `/bin/su`, in memory. They inject a malicious payload into this cached image, which then executes with root privileges when the binary is invoked, all while leaving the on-disk file integrity checks undisturbed. Successful exploitation typically requires `act_pedit` to be loadable and unprivileged user namespaces to be enabled, granting the necessary `CAP_NET_ADMIN` capability.

Description
In the Linux kernel, the following vulnerability has been resolved: net/sched: fix pedit partial COW leading to page cache corruption tcf_pedit_act() computes the COW range for skb_ensure_writable() once before the key loop using tcfp_off_max_hint, but the hint does not account for the runtime header offset added by typed keys. This can leave part of the write region un-COW'd. Fix by moving skb_ensure_writable() inside the per-key loop where the actual write offset is known, and add overflow checking on the offset arithmetic. For negative offsets (e.g. Ethernet header edits at ingress), use skb_cow() to COW the headroom instead. Guard offset_valid() against INT_MIN, where negation is undefined.
Source
416baaa9-dc9f-4396-8d5f-8c081fb06d67
NVD status
Modified
Products
linux_kernel

Risk scores

CVSS 3.1

Type
Secondary
Base score
7.8
Impact score
5.9
Exploitability score
1.8
Vector string
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Severity
HIGH

Weaknesses

134c704f-9b21-4f2e-91b3-4a467353bcc0
CWE-190
0b0ca135-0b70-47e7-9f44-1890c2a1c46c
CWE-787

Social media

Hype score
Not currently trending
  1. Escaping Claude Cowork’s local VM sandbox via CVE-2026-46331 https://t.co/PyAbvHDJf3

    @_r_netsec

    13 Sept 2026

    477 Impressions

    0 Retweets

    1 Like

    3 Bookmarks

    0 Replies

    0 Quotes

  2. Added 3 New LPE to the Toolkit (Open Source) Page Cache Corruption Exploits - Research by Rajat Gupta (Qualcomm): - Dirty Pedit (CVE-2026-46331) - Sub-second root shell, no crypto needed - skb_shift (CVE-2026-43503) - 13 years of kernels affected (3.9-7.1-rc5) - GRO Flag Loss h

    @khadafigans_

    3 Aug 2026

    91 Impressions

    1 Retweet

    3 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  3. GitHub - sgkdev/packet_edit_meme: PACKET_EDIT_MEME.c (aka CVE-2026-46331): yet another page cache poisoning nightmare · GitHub https://t.co/oieVRX2PIE

    @hereticreader

    26 Jul 2026

    61 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  4. CVE-2026-46331 in Linux's act_pedit module anchors SharedRoot, a sandbox-escape chain letting code inside a Claude Cowork local VM reach host macOS files. No confirmed in-the-wild exploitation, but a public PoC exists on GitHub as of July 23, 2026. Key details: - CVE-2026-46331

    @DFIR_Radar

    25 Jul 2026

    115 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  5. Done with all page-cache frenzy? Introducing Dirty-Pedit (CVE-2026-46331)! https://t.co/VGpf8gVuyU A true semantic variant with a novel in-place writer from the entire dirty bug class! Two other variants (CVE-2026-43503) that got collided: skb_shift and gro are in the repo.

    @z3ta_rjt

    22 Jul 2026

    191 Impressions

    0 Retweets

    2 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  6. CVE-2026-46331: Critical Linux Privilege Escalation: pedit COW Corrupts Page Cache to Hijack /bin/su in Memory Patch Immediately a reliable local root exploit for CVE-2026-46331 in Linux's actpedit subsystem. Unprivileged users with namespaces enabled can poison cached…

    @lyrie_ai

    18 Jul 2026

    28 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  7. Added 4 new LPE exploits to lpe-toolkit: - PEdit COW CVE-2026-46331 - DirtyClone CVE-2026-43503 - Bad Epoll CVE-2026-46242 - FUSE OOB CVE-2026-31694 https://t.co/BmdCcmBkWK

    @portbuster1337

    6 Jul 2026

    10226 Impressions

    48 Retweets

    211 Likes

    137 Bookmarks

    2 Replies

    1 Quote

  8. Top #CVE to #patch this week 👀 - @Ubiquiti UniFi OS (CVE-2026-34908, 34909, 34910) critical flaws - @Cisco UCM (CVE-2026-20230) SSRF to root - Another two @Linux Privesc pedit COW(CVE-2026-46331), DirtyClone - @Linux kernel — new DirtyFrag family privesc, JFrog published

    @stansecure

    2 Jul 2026

    120 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  9. Tails 7.9.1 is out: https://t.co/1TZmZC8BtT It fixes CVE-2026-43503 (*DirtyClone*) and CVE-2026-46331 (*PACKET_EDIT_MEME*).

    @Tails_live

    1 Jul 2026

    4751 Impressions

    25 Retweets

    93 Likes

    6 Bookmarks

    2 Replies

    1 Quote

  10. Thread — CVE-2026-46331 "pedit COW" 🔴 1. 🧵Imagine leaving your house, locking the door — but someone already swapped your key while you slept. No forced entry. No alarm. That's CVE-2026-46331. - A Linux flaw that gives attackers root access without breaking a single lo

    @Nu11Sector

    29 Jun 2026

    87 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  11. CISO Daily Briefing: Amazon Q Developer CVE-2026-12957 (CVSS 8.5) — MCP auto-execution, no user interaction required, Miasma worm across 73 GitHub repos; Linux LPEs CVE-2026-46331 + CVE-2026-43503 bypass file integrity monitoring entirely in memory. Fable 5/Mythos 5 suspended f

    @cloudsa

    28 Jun 2026

    428 Impressions

    0 Retweets

    0 Likes

    1 Bookmark

    0 Replies

    0 Quotes

  12. Open-source defensive toolkit against #DirtyClone (CVE-2026-43503) and #peditCOW (CVE-2026-46331). While patching remains the ultimate solution, this toolkit helps you close the gap while you patch. https://t.co/2ETRhoK5oU

    @douglasmun

    28 Jun 2026

    234 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

  13. 1/3 A new Linux kernel exploit nicknamed pedit COW lets a local unprivileged user gain root. CVE-2026-46331 is an out-of-bounds write in act_pedit that corrupts shared page-cache memory. A working exploit appeared within a day. #CVE #Linux #PrivEsc #cybersecurity

    @CyberTLDR

    27 Jun 2026

    42 Impressions

    0 Retweets

    0 Likes

    0 Bookmarks

    1 Reply

    0 Quotes

  14. Linux kernel flaw CVE-2026-46331 allows local users to gain root access, Red Hat rates it as severe, can you trust your Linux systems to be secure after June 16? #LinuxSecurity #CVE #RootAccess Source: New Linux pedit COW Exploit Enables Root Access by Poisoning Cached Binaries

    @Soemailsecurity

    27 Jun 2026

    40 Impressions

    0 Retweets

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  15. pedit COW (CVE-2026-46331) is a Linux kernel flaw that lets unprivileged users gain root via page cache corruption.Patch now or disable act_pedit. For More: https://t.co/BqDkEZ4lVS #peditCOW #CVE #LinuxKernel #PrivilegeEscalation #RootAccess #CyberSecurity #Linux #InfoSec #RHEL

    @redsecuretech

    27 Jun 2026

    43 Impressions

    1 Retweet

    1 Like

    0 Bookmarks

    0 Replies

    0 Quotes

  16. CVE-2026-46331 CVE-2026-43503 アルマリナックス対応済み

    @hacker_infra

    26 Jun 2026

    206 Impressions

    0 Retweets

    2 Likes

    0 Bookmarks

    0 Replies

    0 Quotes

Configurations

  1. In the Linux kernel, the following vulnerability has been resolved: cgroup: Avoid iteration of dying tasks with zero refcount The commit 260fbcb92bbea ("cgroup: Move dying_tasks cleanup from cgroup_task_release() to cgroup_task_free()") extended the lifetime of tasks on the dying_tasks list. The iterators have provision to go through dying_tasks because of dying threadgroup leaders or explicit CSS_TASK_ITER_WITH_DEAD, however, it was expected that such tasks can obtain a new reference (that is possible before cgroup_task_release()/put_task_struct_rcu_user()). The tasks after cgroup_task_release() and before cgroup_task_free() are subject to race when they may or may not have ->usage count > 0. The race window is between css_task_iter_next() invocations when css_set_lock is released and we may arrive at a new ->task_pos. The iterator should not attempt to resurrect tasks whose ->usage count dropped to zero. (When that happens, __put_task_struct_rcu_cb() is already imminent and the returned task_struct would could be used after free.) As for the fix, we cannot simply check the signal->live count of a task on the dying list because that won't distinguish regular zombies waiting to be reaped from RCU remnant tasks that are going to be free'd. Therefore add an extra check to rule out ->usage==0 tasks from any iteration. The repeat: loop in css_task_iter_advance() doesn't consider ->usage count, so add a new loop to css_task_iter_next() to skip de-used tasks on the dying_list. Rough illustration of the possible race R (reader of cgroup.procs) T (thread) L (group leader) --------------------------------- -------------------------------- -------------------------------- L exits, signal->live > 0 cgroup_task_dead(L) css_set_skip_task_iters() // skips only cset->tasks list_add_tail(&L->cg_list, &cset->dying_tasks) css_task_iter_next() take css_set_lock css_task_iter_advance() leader && signal->live != 0 => it->task_pos = &L->cg_list release css_set_lock T exits --signal->live == 0 cgroup_task_dead(T) // css_set_lock release_task(T) cgroup_task_release(T) release_task(L) // zap_leader cgroup_task_release(L) put_task_struct_rcu_user(L) ...RCU... put_task_struct(L) L->usage = 0 /* L still on dying_tasks */ ...RCU... __put_task_struct(L) css_task_iter_next() // another iteration take css_set_lock it->task_pos = &L->cg_list get_task_struct(L) => addition on 0 drop css_set_lock cgroup_task_free(L) css_set_skip_task_iters() // dying skip comes too late free_task(L) cgroup_procs_show() task_pid_vnr(L)•CVE-2026-98163

References

Sources include official advisories and independent security research.