{"id":1461,"date":"2026-06-26T13:46:23","date_gmt":"2026-06-26T13:46:23","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=1461"},"modified":"2026-06-26T13:46:23","modified_gmt":"2026-06-26T13:46:23","slug":"new-linux-pedit-cow-exploit-enables-root-access-by-poisoning-cached-binaries","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=1461","title":{"rendered":"New Linux pedit COW Exploit Enables Root Access by Poisoning Cached Binaries"},"content":{"rendered":"<div>\n<p><span class=\"p-author\"><i class=\"icon-font icon-user\">\ue804<\/i><span class=\"author\">Swati Khandelwal<\/span><i class=\"icon-font icon-calendar\">\ue802<\/i><span class=\"author\">Jun 26, 2026<\/span><\/span><span class=\"p-tags\">Linux \/ Vulnerability<\/span><\/p>\n<\/div>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj0PC1aWOiorYx2AGD7fl-IVefJBKPJvjy7sMo5MURoMlaq492QcSdpSqqdGZRZk3u3e6BMS7qVzrJXBuWk-kH4oRqQy1cHTxkvHBLMMbllF9R_rNqL618rz5zEV_FfOvE0_YQgI-VVWbVX772Bc72qSphwMK-TtOAoZ5A9swYpvSNYsFfdR17i8AAXXzDZ\/s1700-e365\/linux-hack.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>A flaw in the Linux kernel&#8217;s traffic-control subsystem can let a local unprivileged user gain root on affected systems.<\/p>\n<p><a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-46331\">CVE-2026-46331<\/a>, nicknamed \u00ab<b>pedit COW<\/b>,\u00bb is an out-of-bounds write in the packet-editing action (act_pedit) that corrupts shared page-cache memory. A\u00a0<a href=\"https:\/\/github.com\/sgkdev\/packet_edit_meme\">public, working exploit<\/a>\u00a0appeared within a day of the CVE assignment on June 16. Red Hat\u00a0<a href=\"https:\/\/access.redhat.com\/security\/vulnerabilities\/RHSB-2026-008\">rates the flaw as important<\/a>.<\/p>\n<p>The exploit never touches the file on disk. It poisons the cached copy of a setuid root binary (\/bin\/su) in memory, injects a small payload, and runs that altered image as root. File-integrity checks come back clean while a root shell is already open.<\/p>\n<p>The exploit needs two things:\u00a0act_pedit\u00a0being loadable and unprivileged user namespaces being open, giving the attacker a namespace-local networking capability (CAP_NET_ADMIN) needed to trigger the bug.<\/p>\n<p>On the tested RHEL and Debian targets, both conditions were present.<\/p>\n<h2>How the Bug Works<\/h2>\n<p>Linux&#8217;s\u00a0tc\u00a0traffic-control tool can rewrite packet headers in flight using an action called\u00a0pedit. The kernel function that does this,\u00a0tcf_pedit_act(), is supposed to make a private copy of the data before editing it, the standard copy-on-write pattern.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-cant-stop-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjPEV6-530TOlxG6PjrmdlY623wpBwduZ7t1HV6flcmO5R4q4AmfixDUzW0CrhlvMVNWbhvOIso-UDNTka4W_W9Chrdj_dglwBZwi7DuePM2IMIl-hfUYVIqBXgfpr_2619K8Gptb4LzwJ6gUbi7lWl2M8AFQJsHEaw63Q7tZ6708YGruiHrr0Y2W9YYxLQ\/s728-e100\/ThreatLocker-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>It checked the writable range once, before the final offsets were known. Some edit keys only resolve their offset at runtime. When that happens, the write lands outside the privately copied region, so the kernel modifies a shared page-cache page instead of a private copy. If that page belongs to a cached file, the file&#8217;s in-memory image is corrupted.<\/p>\n<p>The pattern is familiar.\u00a0<a href=\"https:\/\/thehackernews.com\/2022\/03\/researchers-warn-of-linux-kernel-dirty.html\">Dirty Pipe,\u00a0Copy Fail, DirtyClone, and\u00a0Dirty Frag\u00a0all share the same shape: a kernel fast path writes into a page it does not exclusively own, and the page cache takes the hit.<\/p>\n<p>What is new here is the entry point. An unprivileged user can configure\u00a0tc\u00a0actions from inside a user namespace, which gives them the\u00a0CAP_NET_ADMIN\u00a0that the exploit needs.<\/p>\n<h2>Affected Systems<\/h2>\n<p>The PoC author reported unprivileged-to-root exploitation on RHEL 10 and Debian 13 (trixie), where unprivileged user namespaces are open by default. Ubuntu 24.04 required routing execution through AppArmor profiles that still permit user namespaces. Ubuntu 26.04 blocks that path by default because its AppArmor profiles restrict unprivileged user namespaces, though the underlying kernel remains vulnerable.<\/p>\n<p>Fixes are split by vendor.<\/p>\n<ul>\n<li><a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-46331\">Debian has fixed trixie<\/a>\u00a0through its security channel. Debian 11 and 12 are still listed as vulnerable.<\/li>\n<li>Ubuntu lists supported releases <a href=\"https:\/\/ubuntu.com\/security\/CVE-2026-46331\">from 18.04 through 26.04<\/a> as vulnerable\u00a0as of June 25.<\/li>\n<li>Red Hat lists RHEL 8, 9, and 10 as affected; RHEL 7 is not listed in the bulletin.<\/li>\n<\/ul>\n<h2>What to Do<\/h2>\n<p>Install the patched kernel and reboot. Prioritize systems where \u00ablocal user\u00bb does not mean trusted user: multi-tenant hosts, CI\/CD runners, Kubernetes nodes, build workers, and shared research or lab machines.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/vpn-threat-report-m\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhFlTC7RrRZGiFAgASS0noWSL0qsQGFVp8-Hvuw9yp3X3VKRuTcb5SsPX09wJzrdIM6pu1_5lS4EeZp7Sx4iYBpNJkrGnpr08yyaS1HQ5_5TxaCsP6O0OtHNuOkesn6CbNjao1GPulCJk-uljYMSfMZfBYNrngpe669t7jlRn1FqiEnXhsFD1WVkpaYIVgh\/s728-e100\/ai-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>If you cannot patch yet, two mitigations kill the exploit chain. On systems that do not need\u00a0tc pedit\u00a0rules, check whether the module is in use (lsmod | grep act_pedit), then block it from loading:<\/p>\n<pre><code>echo 'install act_pedit \/bin\/true' | sudo tee \/etc\/modprobe.d\/disable-act_pedit.conf<\/code><\/pre>\n<p>Alternatively, disable unprivileged user namespaces (user.max_user_namespaces=0\u00a0on RHEL,\u00a0kernel.unprivileged_userns_clone=0\u00a0on Debian\/Ubuntu). That removes the namespace-local capability the exploit needs, but it breaks rootless containers, some CI sandboxes, and sandboxed browsers. Test first.<\/p>\n<p>Because the overwrite targets cached memory, file-integrity checks may not catch it. Dropping the page cache (echo 3 &gt; \/proc\/sys\/vm\/drop_caches) clears the poisoned in-memory copy, but does nothing about the root shell the attacker already opened. Treat the host as compromised.<\/p>\n<p>The fix landed on the\u00a0<a href=\"https:\/\/lists.openwall.net\/netdev\/2026\/05\/23\/133\">netdev\u00a0mailing list<\/a>\u00a0in late May, framed as a routine data-corruption patch. The exploitable detail sat on a public mailing list for weeks. No CVE, no security warning. The CVE was assigned when the fix was merged on June 16. The weaponized proof-of-concept followed within a day. For kernel page-cache corruption bugs, waiting for a scanner rule is too slow.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ue804Swati Khandelwal\ue802Jun 26, 2026Linux \/ Vulnerability A flaw in the Linux kernel&#8217;s traffic-control subsystem can let a local unprivileged user gain root on affected systems. CVE-2026-46331, nicknamed \u00abpedit COW,\u00bb is&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1462,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[130,2210,2209,2208,724,120,181,2207,671,61],"class_list":["post-1461","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-access","tag-binaries","tag-cached","tag-cow","tag-enables","tag-exploit","tag-linux","tag-pedit","tag-poisoning","tag-root"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1461"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/1461\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/1462"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}