ZeroHour

CVE-2026-89564

large

Use-after-free in Linux kernel multicast forwarding via stale skb->sk socket pointer

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's IPv4 and IPv6 input paths can leave a pointer to a socket in an skb's skb->sk field, installed either by a bpf_sk_assign() BPF program or by UDP early demux prefetch, without guaranteeing a reference is held on that socket. If a multicast packet is not locally deliverable, the original skb is handed to ip_mr_input() or ip6_mr_input(), where it may sit on an unresolved multicast route queue or be forwarded after the receive-side RCU section has ended. If the prefetched socket is destroyed in the meantime, the skb's eventual free path calls sock_pfree() and dereferences the stale socket pointer, a use-after-free rated CVSS 7.8 (local vector, low privileges, high confidentiality/integrity/availability impact). A local attacker with low privileges who can influence multicast traffic and socket lifetimes on an affected host could plausibly crash the kernel or escalate privileges through memory corruption. No public proof of concept is known, the flaw is not in CISA's KEV catalog, and there is no evidence of exploitation in the wild; the fix orphans the skb before non-local multicast forwarding so forwarded clones carry no socket reference.

What to do: Apply your distribution's kernel update containing the upstream fix (the patch that orphans skbs before non-local multicast forwarding) and reboot into the patched kernel, since no safe runtime workaround exists for the kernel code itself. Check whether hosts actually run multicast routing (mroute/PIM daemons like pimd, FRR's pimd, or igmp proxies) or TC BPF programs using bpf_sk_assign, and disable multicast forwarding where it is not needed. As defense-in-depth for this and other local BPF/vector attacks, set kernel.unprivileged_bpf_disabled=1, and monitor for oopses or crashes referencing sock_pfree, ip_mr_input, or ip6_mr_input.

Affected
Linux kernel
Estimated exposure
large≈10k–100k plausibly exploitable hosts (multicast-routing and TC BPF sk_assign deployments with local users), out of the billions of unpatched Linux devices… — Linux itself runs on billions of devices, but the bug requires multicast forwarding to be active (e.g., PIM/mroute daemons on routers, IPTV or market-data distribution servers) or BPF programs using sk_assign plus a local attacker, and no…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: ip: orphan prefetched skbs before multicast forwarding IPv4 and IPv6 input preserve an skb->sk association installed by bpf_sk_assign() so that local delivery can use the selected socket under RCU. Both address families can also prefetch a socket in UDP early demux. In both paths (BPF and UDP early demux) a reference is not guaranteed to be held on the socket. When a multicast packet is not locally deliverable, IPv6 hands the original skb to ip6_mr_input(). IPv4's ip_mr_input() similarly keeps the original skb when local delivery is not needed. Either path can put the skb on an unresolved multicast route queue or forward it after the receive-side RCU section ends. After the prefetched socket is destroyed, a later skb free invokes sock_pfree() and dereferences the stale skb->sk. Orphan the skb before each non-local multicast forwarding path. Local delivery retains the original skb; the existing skb_clone() calls provide multicast forwarding with a socket-free clone.

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.