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
| Distribution | Fixed kernel (or newer) | Good to know |
|---|---|---|
| Ubuntu 22.04 LTS | 5.15.0-181.191 | `uname -r` shows 5.15.0-181-generic |
| Ubuntu 24.04 LTS | 6.8.0-124.124 | `uname -r` shows 6.8.0-124-generic |
| Ubuntu 25.10 and 26.04 LTS | 6.17.0-35.35 and 7.0.0-22.22 | One version per release; 26.10 is not affected |
| Debian 12 (bookworm) | 6.1.190-1 | Security repository; `uname -v` shows the package version |
| Debian 13 (trixie) | 6.12.113-1 | Security repository; same reading with `uname -v` |
| AlmaLinux 8, 9 and 10 | 4.18.0-553.124.3.el8_10 ; 5.14.0-611.54.5.el9_7 ; 6.12.0-124.56.3.el10_1 | In production since May 16, 2026 |
| CloudLinux 7h and 8 | 4.18.0-553.124.3.lve.el7h ; 4.18.0-553.124.3.lve.el8 | CloudLinux 9 and 10 reuse the AlmaLinux kernels; check the rollout channel |
| Not affected | Ubuntu 20.04 LTS and earlier, CloudLinux 7 | Nothing 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
Read the running kernel
uname -rthenuname -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.List the installed kernels
Debian and Ubuntu:
dpkg -l 'linux-image*'. AlmaLinux and CloudLinux:rpm -q kernel. If a fixed kernel is installed butuname -rshows another number, the server has not rebooted: it is exposed.Spot pending reboots
On AlmaLinux and CloudLinux,
sudo needs-restarting -rtells you whether a reboot is needed. On Ubuntu, the presence of the file/var/run/reboot-requiredsignals the same thing.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.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.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
Debian and Ubuntu
sudo apt update && sudo apt full-upgradethensudo reboot. We usefull-upgradebecause a new kernel arrives as a new package, whichupgradealone can leave aside.AlmaLinux and other RHEL
sudo dnf clean metadata && sudo dnf upgradethensudo reboot. After the reboot,rpm -q kernelmust list a kernel at least equal to the one in the table.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*', thensudo reboot.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.
Check after the reboot
uname -r(anduname -von Debian) must show a number equal to or higher than the one in the table. Then runsudo systemctl --failedto 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
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.Check
lsmod | grep -E 'esp4|esp6|rxrpc'must return nothing. The workaround survives a reboot as long as the file exists.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.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