@readmodelmag
MODEL

Tools

A May Linux bug helped root 25 servers this week. Here's the 30-second kernel check

SummaryAttackers chained PHP2Shell with Fragnesia, a Linux kernel bug patched in May, to get root on Palo Alto PAN-OS devices. We wrote a read-only check and ran it on our own box. The catch: on our kernel, the published module-blocking mitigation couldn't have worked.

· MODEL Editors · 3 min read

Some links may be affiliate links. Disclosure

MODEL builder tip card headlined: A May Linux bug helped root 25 servers. Check your kernel before you trust the fix. Left, a dark terminal panel titled Our box: ./check-fragnesia.sh (read-only) shows kernel 6.12.94+, upstream version: fixed (6.12.91+), CONFIG_INET_ESP=y, CONFIG_INET6_ESP=y and CONFIG_INET_ESPINTCP=y marked built in, and esp4/esp6 modules: not loaded, with a note: true, and meaningless here, the code is in the kernel itself. Right, two boxes: CVE-2026-46300, Fragnesia, page-cache write, local user to root, fixed upstream in 5.10.257, 5.15.208, 6.1.174, 6.6.141, 6.12.91, 6.18.33, 7.0.10 and 7.1 plus; and =y, if ESP is built in the esp4/esp6 blocklist can't switch it off, only a patched kernel helps. A black bar reads: This week attackers chained PHP2Shell and Fragnesia to root 25 Palo Alto PAN-OS servers (Dream, Unit 42). The catch: distro kernels like Ubuntu's 6.8.0-124 use their own numbers. Watermark: MODEL, readmodelmag.com.
Our read-only check, run on MODEL's own Linux box. Illustration by MODEL. Original. Image source.

A write-up from Dream Research, on the Hacker News front page today, describes an attack that rooted 25 servers running Palo Alto Networks' PAN-OS, including systems in a US government-affiliated environment. It took two bugs. PHP2Shell (CVE-2026-109618 and CVE-2026-109619) gave code execution on the management web server as the low-privilege nobody user. A Linux kernel bug called Fragnesia (CVE-2026-46300) turned that into root.

Palo Alto's Unit 42 says it independently verified the attacker's tooling and results. It says patched PAN-OS devices aren't affected, and that about 0.02% of its installed base had internet-facing management interfaces and was impacted. If you run PAN-OS, the fix is the advisory's: patch, and take the management interface off the public internet.

Why builders should care anyway. Fragnesia isn't a Palo Alto bug. It's in the Linux kernel's IPsec ESP-in-TCP code, and it was disclosed in May. Per Red Hat and Ubuntu, a local user can use it to overwrite the cached contents of read-only files and become root. Ubuntu adds that on hosts running third-party containers it "may additionally facilitate container escape." That's the setup a lot of AI agent sandboxes and shared build boxes run on. In this attack, the web bug was the way in and the kernel bug was the way up.

The tip: check the running kernel, then check how ESP is built. The kernel's CVE record lists these upstream stable fixes: 5.10.257, 5.15.208, 6.1.174, 6.6.141, 6.12.91, 6.18.33, 7.0.10, and 7.1 and later. We wrote a short read-only script that compares uname -r against that list and reads the kernel config. It changes nothing. On our box:

kernel: 6.12.94+
upstream version: fixed (6.12.91+)
CONFIG_INET_ESP=y  built in: a modprobe blocklist can't turn this off
CONFIG_INET6_ESP=y  built in: a modprobe blocklist can't turn this off
CONFIG_INET_ESPINTCP=y  built in: a modprobe blocklist can't turn this off
CONFIG_INET6_ESPINTCP=y  built in: a modprobe blocklist can't turn this off
esp4/esp6 modules: not loaded

You can do the same by hand. Distros keep the config in /boot or /proc/config.gz; this reads whichever exists (ours is the second):

uname -r
zcat -f /proc/config.gz /boot/config-$(uname -r) 2>/dev/null | grep -E 'CONFIG_INET6?_ESP(INTCP)?='

The catch we found. The published stopgap, for systems that can't patch yet, is to block the esp4 and esp6 kernel modules with a file in /etc/modprobe.d/, then confirm with grep -qE '^(esp4|esp6) ' /proc/modules. That only works when ESP is built as a module (=m). Our kernel has it built in (=y), so there's no module to block, and the "NOT loaded" check would pass even though the code is in the running kernel. Our kernel is past the upstream fix, so we're fine. A box on an older kernel with this config wouldn't be, whatever the check printed.

Second catch: distro version numbers. Distro kernels backport fixes under their own numbering. Ubuntu's fixed builds include 6.8.0-124.124 (24.04 LTS), 5.15.0-181.191 (22.04 LTS) and 7.0.0-22.22 (26.04 LTS). The upstream list says nothing about those, so check your distro's table. A kernel update also needs a reboot before it's running.

Who it's for: anyone running Linux servers, CI runners, or agent sandboxes that execute code they didn't write.

What we didn't test. We didn't run any exploit, touch a PAN-OS device, or check PHP versions. We tested our script's version logic on sample version strings, not other machines. Attribution of the campaign is Dream's and Unit 42's reading, not ours.

Our take: don't trust a mitigation's own "you're fine" check. Make sure the patched kernel is what's actually running.

Not sponsored. No affiliate links.

Sources

  1. Chained PHP2Shell Exploit Roots 25 Servers, including US Government Servers (updated Oct 29, 2026)

    Dream Research

  2. Threat Brief: Critical Vulnerabilities in PHP: CVE-2026-109618, CVE-2026-109619 (updated Oct 29, 2026)

    Palo Alto Networks Unit 42

  3. CVE-2026-46300 record (net: skbuff: preserve shared-frag marker during coalescing)

    CVE Program / Linux kernel CNA

  4. Fragnesia Linux kernel local privilege escalation vulnerability mitigations

    Ubuntu

  5. CVE-2026-46300

    Red Hat

  6. Hacker News discussion

    Hacker News

FREE · EVERY WEEK

The top AI tools this week, tested.

Every week MODEL's editors pick the AI tools worth your time, try them hands-on, and tell you what's good, what's not, and who it's for. Free, in your inbox.

Free. Unsubscribe anytime. Our picks are editorial and can't be bought.