CVE-2026-43284, CVE-2026-2026-43500: New CopyFail Variants ("DirtyFrag")

Last Update: 2026-05-08T16:57:14Z

What’s Happening

Two new variants of the same vulnerability class as CopyFail have dropped.

CVEs have been assisged:

CVE-2026-43284
CVE-2026-43500

Exploitation

None reported yet

Available Patches

  • Debian
    • Patched as of 6.12.86-1
  • Alma Linux
    • AlmaLinux 8 is patched in kernel-4.18.0-553.123.2.el8_10 and above
    • AlmaLinux 9 is patched in kernel-5.14.0-611.54.3.el9_7 and above
    • AlmaLinux 10 is patched in kernel-6.12.0-124.55.2.el10_1 and above
    • AlmaLinux Kitten 10 will be patched in the next regular kernel build; see the Kitten repo for the current version

Mitigations

General

The kernel modules/components in question are:

  • xfrm: Linux packet transformation (not a module)
  • esp4: Encrypting IPSec traffic
  • esp6: Same thing, but IPv6
  • rxrpc: RxRPC protocol handler

For systems loading these modules dynamically, add this to /etc/modprobe.d/dirtyfrag.conf

install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false

And reboot.

For kernels using these modules built-in, initcall_blacklist (their name) is an option. Add this to the bootloader options. For GRUB2, that’d be:

GRUB_CMDLINE_LINUX_DEFAULT="initcall_blacklist=xfrm_user_init,esp4_init,esp6_init,rxrpc_init"

(And any other options you’ve added)

13 Likes

Also: GitHub - 0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo: Copy Fail 2: Electric Boogaloo · GitHub

1 Like

Additional info, but points to the original GitHub repo.

1 Like

The suggested mitigation works and rebooting is not necessary, you can just do rmmod esp4; rmmod esp6; rmmod rxrpc in the event they were loaded earlier by something. Confirm with lsmod | grep -E 'esp|rxrpc'. Afterwards, the exploit will fail to run. Tested in a VM running Debian 6.12.57+deb13-amd64.

I’ve noticed rxrpc being present in newish RHELs, while esp4 is present in an older RHEL 8 or old SLES. Both were vulnerable through one module or the other.

cat /boot/config-XX | grep -Ei 'rxrpc|inet_esp|inet6_esp' is useful to tell which modules are in your system, and whether you’re therefore vulnerable. Good: # CONFIG_AF_RXRPC is not set, Bad: CONFIG_INET_ESP=m, CONFIG_INET6_ESP=m

Exploitation leaves the following in /var/log/messages:

May  7 22:19:39 hostname kernel: alg: No test for authencesn(hmac(sha256),cbc(aes)) (authencesn(hmac(sha256-ni),cbc-aes-aesni))
May  7 22:19:39 hostname kernel: alg: No test for echainiv(authencesn(hmac(sha256),cbc(aes))) (echainiv(authencesn(hmac(sha256-ni),cbc-aes-aesni)))
May  7 22:19:47 hostname kernel: process 'su' launched '/bin/sh' with NULL argv: empty string added
1 Like

Maybe this is because of running the exploit, but rmmod did not cut it for me.

Can I see the output of lsmod | grep -E 'esp|rxrpc' and cat /boot/config-XX | grep -Ei 'rxrpc|inet_esp|inet6_esp', as well as your /etc/modprobe.d/dirtyfrag.d?

Using DirtyFrag, Exploit → rmmod rxrpc, /etc/modprobe.d/dirtyfrag.conf with the right lines meant the Exploit could not be used again in my machine.

This is in WSL2, so no /boot/config-XX for you.

It looks like the Debian ‘cloud’ kernels do not have the rxrpc module enabled;

$ uname -r
6.12.85+deb13-cloud-amd64

$ grep -Ei ‘rxrpc|inet_esp|inet6_esp’ /boot/config-$( uname -r )
CONFIG_INET_ESP=m
CONFIG_INET_ESP_OFFLOAD=m

CONFIG_INET_ESPINTCP is not set

CONFIG_INET6_ESP=m
CONFIG_INET6_ESP_OFFLOAD=m

CONFIG_INET6_ESPINTCP is not set

CONFIG_AF_RXRPC is not set

While the full kernel does;

$ uname -r
6.12.85+deb13-amd64

$ grep -Ei ‘rxrpc|inet_esp|inet6_esp’ /boot/config-$( uname -r )
CONFIG_INET_ESP=m
CONFIG_INET_ESP_OFFLOAD=m

CONFIG_INET_ESPINTCP is not set

CONFIG_INET6_ESP=m
CONFIG_INET6_ESP_OFFLOAD=m

CONFIG_INET6_ESPINTCP is not set

CONFIG_AF_RXRPC=m
CONFIG_AF_RXRPC_IPV6=y

CONFIG_AF_RXRPC_INJECT_LOSS is not set

CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set

CONFIG_AF_RXRPC_DEBUG is not set

We generally use the ‘cloud’ kernel in all virtual machines, as it is a lot smaller as well. You would still want to enable the mitigations, but, depending on your AppArmor configuration, this may affect how exposed you are, if I am reading the ‘DirtyFail’ description correctly?

1 Like

Debian has updated kernel packages available for Trixie;

Looks like CVE-2026-43500 is one of the CVEs assigned.

(New user, cannot add more than two links)

For Trixie Security, per the Debian tracker at least:

AlmaLinux also has an updated kernel package for CVE-2026-43284;

1 Like

Proxmox also has updated kernel packages. For Proxmox 8.x;

$ apt-get changelog proxmox-kernel-6.8 | head -n21
Get:1 https://metadata.cdn.proxmox.com proxmox-kernel-6.8 6.8.12-23 Changelog [39.0 kB]
proxmox-kernel-6.8 (6.8.12-23) bookworm; urgency=medium

cherry-pick fixes for “DirtyFrag” local privilege escalation issue

– Proxmox Support Team support@proxmox.com  Fri, 08 May 2026 10:00:51 +0200

proxmox-kernel-6.8 (6.8.12-22) bookworm; urgency=medium

Fix “copy.fail” Local Privilege Escalation / CVE-2026-31431:
An unprivileged local user can write 4 controlled bytes into the page
cache of any readable file on a Linux system, and use that to gain root.

– Proxmox Support Team support@proxmox.com  Thu, 30 Apr 2026 09:01:51 +0200

proxmox-kernel-6.8 (6.8.12-21) bookworm; urgency=medium

update submodule to Ubuntu-6.8.0-116.116 and refresh patches.

– Proxmox Support Team support@proxmox.com  Sun, 26 Apr 2026 19:55:26 +0200

And Proxmox 9.x;

$ apt-get changelog proxmox-kernel-6.17 | head -n21
Get:1 https://metadata.cdn.proxmox.com proxmox-kernel-6.17 6.17.13-7 Changelog [41.4 kB]
proxmox-kernel-6.17 (6.17.13-7) trixie; urgency=medium

cherry-pick fixes for “DirtyFrag” local privilege escalation issue

– Proxmox Support Team support@proxmox.com  Fri, 08 May 2026 11:58:26 +0200

proxmox-kernel-6.17 (6.17.13-6) trixie; urgency=medium

cherry-pick follow-up commits for copy.fail fixes

– Proxmox Support Team support@proxmox.com  Thu, 30 Apr 2026 10:48:21 +0200

proxmox-kernel-6.17 (6.17.13-5) trixie; urgency=medium

Fix “copy.fail” Local Privilage Escalation / CVE-2026-31431:

An unprivileged local user can write 4 controlled bytes into the page cache
of any readable file on a Linux system, and use that to gain root.

– Proxmox Support Team support@proxmox.com  Thu, 30 Apr 2026 08:30:46 +0200
1 Like

Updated kernel package for Debian Bullseye available now as well;

$ zcat /usr/share/doc/linux-image-5.10.0-42-cloud-amd64/changelog.gz | head -n35
linux-signed-amd64 (5.10.251+4) bullseye-security; urgency=high

  * Sign kernel from linux 5.10.251-4

  * rxrpc: input: Open-code skb_unshare()
  * rxrpc: Fix conn-level packet handling to unshare RESPONSE packets
  * rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present
  * xfrm: esp: avoid in-place decrypt on shared skb frags

 -- Ben Hutchings <benh@debian.org>  Fri, 08 May 2026 11:43:47 +0200

linux (5.10.251-3) bullseye-security; urgency=high

  [ Bastian Blank ]
  * Remove architectures not existing in Debian

 -- Ben Hutchings <benh@debian.org>  Thu, 30 Apr 2026 21:59:04 +0200

linux (5.10.251-2) bullseye-security; urgency=high

  * crypto: af-alg - fix NULL pointer dereference in scatterwalk
  * crypto: doc - fix kernel-doc notation in chacha.c and af_alg.c
  * crypto: scatterwalk - Backport memcpy_sglist()
  * crypto: algif_aead - use memcpy_sglist() instead of null skcipher
  * crypto: algif_aead - Revert to operating out-of-place
    (CVE-2026-31431)
  * crypto: algif_aead - snapshot IV for async AEAD requests
  * crypto: authenc - use memcpy_sglist() instead of null skcipher
  * crypto: authencesn - Do not place hiseq at end of dst for out-of-place
    decryption
  * crypto: authencesn - Fix src offset when decrypting in-place
  * crypto: af_alg - Fix page reassignment overflow in af_alg_pull_tsgl
  * crypto: algif_aead - Fix minimum RX size check for decryption

 -- Ben Hutchings <benh@debian.org>  Thu, 30 Apr 2026 18:04:21 +0200

(Is this useful to people, in the context of this community? Or too verbose?)

Somebody check my math here but it seems odd that the RHEL mitigations say to use modprobe? I didn’t think these modules were loaded dynamically for Red Hat like distros. Certainly weren’t for Fedora.

Dormann says it’s right and I defer to him.

Figured out what I was missing! That kmod loads the module on demand when the kernel demands it during the exploit, despite what lsmod shows me beforehand.

A new variant has appeared!

The fix has landed in the mainline kernel, but distro patches will of course lag.

1 Like

Another variant has appeared, mitigated by the same fixes as for these.