Tutorial

Fragnesia CVE-2026-46300: patch the Linux kernel (PHP2Shell)

Security & Monitoring10 min read15 steps

On October 28, 2026, CISA added CVE-2026-46300, nicknamed Fragnesia, to its catalog of exploited vulnerabilities. The Linux kernel flaw dates from May and so does its fix, but it is urgent again: chained with PHP2Shell, it turns a compromised PHP site into a fully compromised server, and therefore into every client site it hosts. This guide shows how to tell in ten minutes which servers still run a vulnerable kernel, how to update by distribution, which workaround to use if the reboot must wait, and which traces to look for.

Contents· Fragnesia in short: a May flaw that is urgent again1/13
  1. 01Fragnesia in short: a May flaw that is urgent again
  2. 02The essentials before opening a terminal
  3. 03Why PHP2Shell changes the schedule
  4. 04Fixed kernels by distribution
  5. 05An installed kernel is not the running kernel
  6. 06Check a server's exposure in ten minutes
  7. 07Update the kernel, by environment
  8. 08Workaround or kernel: the choice depends on the server's role
  9. 09Apply the workaround, check it, undo it
  10. 10KernelCare, for servers that cannot be rebooted
  11. 11Look for traces before rebooting
  12. 12For an agency: one common slot, not one server at a time
  13. 13The official documentation

Fragnesia in short: a May flaw that is urgent again

Fragnesia is the name given to CVE-2026-46300, a Linux kernel flaw disclosed on May 13, 2026 with a public proof of concept. The defect fits in one sentence: the skb_try_coalesce() function loses the marker that flags a shared fragment, so ESP decryption runs in place on page cache pages. An unprivileged process can then modify, in memory, a file that is supposed to be read-only, such as /usr/bin/su, and gain root. The CVSS 3 score is 7.8, and Ubuntu rates the flaw High priority. Fixes have existed since May: AlmaLinux put them into production on May 16, 2026. What changes at the end of October 2026 is the context, because CISA listed the flaw in its catalog of exploited vulnerabilities on October 28, 2026.

The essentials before opening a terminal

  • Local, not remote — Fragnesia cannot be attacked from the internet: the attacker must already run code on the machine. It is the step that follows a web intrusion.
  • Running kernel, not installed kernel — an up-to-date package protects nothing until the machine has rebooted onto it.
  • Fixed kernels exist — Ubuntu, Debian, AlmaLinux and CloudLinux have published their versions; the table below lists them.
  • A workaround exists, at a price — blocking three modules (esp4, esp6, rxrpc) closes the path, but it breaks IPsec and AFS.
  • A bridge, not a solution — the workaround holds until the reboot onto the fixed kernel, not beyond.

Why PHP2Shell changes the schedule

A local privilege escalation does not trigger on its own: it first needs an entry point. On an agency server, the entry point is easy to find, a PHP site. PHP2Shell names two flaws in the interpreter, CVE-2026-109618 and CVE-2026-109619, that allow code execution without authentication. The webshell then runs under the site's account, without privileges. Fragnesia is the next step: it turns that account into root. The company Dream reports having observed this combination in a campaign targeting firewalls; this is the account of a single vendor, which CISA does not confirm. On CISA's side, CVE-2026-46300 is in the catalog with a due date of October 31, 2026 and a forensic triage requested from US agencies. Above all, remember this: fixing PHP closes the entry, not the escalation. A server visited before the PHP fix stays dangerous until its kernel is up to date. The PHP2Shell guide linked below this article covers the first part.

Fixed kernels by distribution

Scroll the table

DistributionFixed kernel (or newer)Good to know
Ubuntu 22.04 LTS5.15.0-181.191`uname -r` shows 5.15.0-181-generic
Ubuntu 24.04 LTS6.8.0-124.124`uname -r` shows 6.8.0-124-generic
Ubuntu 25.10 and 26.04 LTS6.17.0-35.35 and 7.0.0-22.22One version per release; 26.10 is not affected
Debian 12 (bookworm)6.1.190-1Security repository; `uname -v` shows the package version
Debian 13 (trixie)6.12.113-1Security repository; same reading with `uname -v`
AlmaLinux 8, 9 and 104.18.0-553.124.3.el8_10 ; 5.14.0-611.54.5.el9_7 ; 6.12.0-124.56.3.el10_1In production since May 16, 2026
CloudLinux 7h and 84.18.0-553.124.3.lve.el7h ; 4.18.0-553.124.3.lve.el8CloudLinux 9 and 10 reuse the AlmaLinux kernels; check the rollout channel
Not affectedUbuntu 20.04 LTS and earlier, CloudLinux 7Nothing to fix on these versions

An installed kernel is not the running kernel

This is the trap that turns "everything is up to date" into a server that is still vulnerable. Installing a kernel package drops new files into /boot, but the kernel in memory remains the one from the last boot. Until the machine reboots, apt or dnf can report an up-to-date system while uname -r still answers with the old number. This is common across a fleet for a simple reason: nobody likes rebooting a server that carries client sites, so the reboot waits. Two reference points avoid confusion. On Ubuntu, the number in the table has two parts: 5.15.0-181.191 corresponds to 5.15.0-181-generic in uname -r. On Debian, uname -r shows the kernel ABI, not the package version; uname -v displays the full version, for example "Debian 6.1.190-1".

Check a server's exposure in ten minutes

  1. Read the running kernel

    uname -r then uname -v. Note the result machine by machine: it is the only value that counts, not the one from the package manager. Compare it to the table above.

  2. List the installed kernels

    Debian and Ubuntu: dpkg -l 'linux-image*'. AlmaLinux and CloudLinux: rpm -q kernel. If a fixed kernel is installed but uname -r shows another number, the server has not rebooted: it is exposed.

  3. Spot pending reboots

    On AlmaLinux and CloudLinux, sudo needs-restarting -r tells you whether a reboot is needed. On Ubuntu, the presence of the file /var/run/reboot-required signals the same thing.

  4. Look at the modules involved

    lsmod | grep -E 'esp4|esp6|rxrpc'. An empty result does not make the server safe: a module that is absent can load on demand. It only says it is not loaded at this moment.

  5. Check rxrpc on AlmaLinux 9 and 10

    rpm -q kernel-modules-partner. On these two versions, the rxrpc module is exposed only if this package is installed; AlmaLinux 8 does not build this module.

  6. Spot the VPN gateways

    systemctl list-units | grep -Ei 'strongswan|libreswan|ipsec'. List the machines that terminate or carry IPsec tunnels, or that use AFS: the workaround below is not suitable for them.

Update the kernel, by environment

  1. Debian and Ubuntu

    sudo apt update && sudo apt full-upgrade then sudo reboot. We use full-upgrade because a new kernel arrives as a new package, which upgrade alone can leave aside.

  2. AlmaLinux and other RHEL

    sudo dnf clean metadata && sudo dnf upgrade then sudo reboot. After the reboot, rpm -q kernel must list a kernel at least equal to the one in the table.

  3. CloudLinux

    On CloudLinux 9 and 10, the AlmaLinux kernels apply: same command as above. On CloudLinux 7h and 8, the fixed kernel is a CloudLinux kernel distributed by channel; the CloudLinux article, linked at the end of the page, says whether your channel offers it. Then sudo yum update 'kernel*', then sudo reboot.

  4. Docker containers

    A container has no kernel of its own: it uses the host's. Rebuilding an image fixes nothing here, whereas updating the host and rebooting it protects all its containers at once. Ubuntu also mentions a possible container escape: do not put this off. The PHP images to rebuild for PHP2Shell belong to another guide.

  5. Check after the reboot

    uname -r (and uname -v on Debian) must show a number equal to or higher than the one in the table. Then run sudo systemctl --failed to spot the services that did not come back.

Workaround or kernel: the choice depends on the server's role

Rebooting cuts the sites, and the objection is legitimate. The workaround exists for that: it blocks the loading of esp4, esp6 and rxrpc, the three modules the flaw goes through, without a reboot. Its price is precise. ESP is the encryption protocol of IPsec and rxrpc serves AFS; if the server terminates or carries IPsec tunnels (strongSwan, Libreswan) or mounts AFS, the workaround breaks them, and AlmaLinux says so plainly. A simple rule: on a web server without VPN, apply the workaround now, then the kernel at the next slot; on a VPN gateway, fixed kernel on a reboot slot, without the workaround. In both cases, the workaround is only a bridge until the reboot onto the fixed kernel. AlmaLinux also states that the workaround published for Dirty Frag already covers Fragnesia: if it is in place, there is nothing to add.

Apply the workaround, check it, undo it

  1. Write the file and unload the modules

    sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/fragnesia.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
    The command creates /etc/modprobe.d/fragnesia.conf, which forbids loading the three modules, then unloads the ones that were loaded.

  2. Check

    lsmod | grep -E 'esp4|esp6|rxrpc' must return nothing. The workaround survives a reboot as long as the file exists.

  3. Drop the page cache if the machine may have been targeted

    sudo sh -c "echo 3 > /proc/sys/vm/drop_caches". Binaries are reloaded from disk. If you want to keep evidence, run the checks of the next section first.

  4. Undo the workaround

    Once the machine has rebooted onto the fixed kernel: sudo rm /etc/modprobe.d/fragnesia.conf. If a Dirty Frag workaround was already in place under another file name, it follows its own cycle.

KernelCare, for servers that cannot be rebooted

If the server uses KernelCare (live kernel patching), kcarectl --update applies the fix without a reboot, and kcarectl --patch-info | grep CVE-2026-46300 confirms it is present. CloudLinux reports a complete rollout for the AlmaLinux ELS and FIPS variants, the EL8 family, Debian 11 and 12 and Ubuntu Jammy, without explicitly naming standard CloudLinux 9 and 10. Do not generalize: check per distribution, and if the command returns nothing, fall back on the workaround or on the kernel.

Look for traces before rebooting

A server patched since May is not concerned; a server that has never rebooted is, and if it has carried a vulnerable PHP site, it may have been visited. The alteration happens in the page cache: it does not necessarily write to disk, and a reboot or drop_caches erases it. So run your checks first. Three leads. Recent .php files under the web roots: sudo find /var/www /home -name '*.php' -mtime -7 -type f, to adapt to your paths. Unexpected setuid binaries: sudo find / -xdev -perm -4000 -type f -mtime -30. Package integrity: rpm -V util-linux on the RHEL family, sudo debsums -s util-linux on Debian and Ubuntu after apt install debsums; the util-linux package provides /usr/bin/su, the target cited by AlmaLinux. A suspicious result is not cleaned up by hand: isolate the machine and treat it as compromised.

For an agency: one common slot, not one server at a time

Time is not lost in the command, but in knowing which machine carries which clients, which one is a VPN gateway and when it can reboot. Build a table per server: running kernel, installed kernel, role (web, VPN, database), workaround applied or not. Then sort into three batches: simple web servers, immediate workaround then kernel at the slot; gateways, kernel at the slot without the workaround; machines already up to date, a simple check of the running kernel. Warn clients once, on a common slot, rather than machine by machine. The reboot method for a VPS that carries client sites is detailed in the PwnEscape and Vghost guide linked below this article, no need to repeat it here. This guide is provided as is: administering your servers remains your responsibility, with no support from us.

The official documentation

Ubuntu page for CVE-2026-46300: https://ubuntu.com/security/CVE-2026-46300

Debian security tracker: https://security-tracker.debian.org/tracker/CVE-2026-46300

AlmaLinux notice on Fragnesia: https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/

CloudLinux article (kernels and KernelCare): https://blog.cloudlinux.com/fragnesia-mitigation-and-kernel-update

CISA alert of October 28, 2026: https://www.cisa.gov/news-events/alerts/2026/10/28/cisa-adds-two-known-exploited-vulnerabilities-catalog

SecurityWeek report on the PHP2Shell chain: https://www.securityweek.com/china-linked-hackers-exploit-php2shell-to-root-firewalls/

Upstream fix in the kernel: https://git.kernel.org/linus/f84eca5817390257cef78013d0112481c503b4a3

A fleet of sites to patch in a single slot

A fleet of client sites is easier to patch when the machines are grouped and visible in one place: one common slot, one table. The client relationship stays with the agency, the infrastructure with ServOrbit.com.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab