CVE-2026-53184
NoneCVSS
—
EPSS
0.5%
Published
Jun 25, 2026
CISA due date
—
Cloudanix analysis
A flaw in the Linux networking code can let someone with enough local privileges crash or destabilize a vulnerable system by abusing advanced packet-processing features.
- Exploitation
- Local Privilege
- Attacker needs
- High Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a Linux kernel denial-of-service flaw in the UDP receive path when UDP sockets are used with sockmap/sockhash and an attached SK_SKB eBPF verdict program. The kernel reuses the sk_buff `skb->dev` field as UDP scratch storage, but before running the sockmap verdict program it failed to clear that field. If the verdict program invokes socket lookup helpers such as `bpf_sk_lookup_tcp`, `bpf_sk_lookup_udp`, or `bpf_skc_lookup_tcp`, the helper may treat the stale scratch value as a `struct net_device *` and dereference an invalid, non-canonical address. This can trigger a general protection fault in softirq context, potentially causing a kernel oops, service disruption, or system crash depending on kernel configuration.
Why it matters to the business
Successful exploitation can disrupt Linux hosts by crashing or destabilizing the kernel networking path, affecting applications, containers, or services that depend on the impacted system. The practical risk is lower than many remotely exploitable kernel bugs because exploitation generally requires the ability to load and attach eBPF sockmap programs or otherwise control privileged networking/BPF behavior. The vulnerability is not currently listed in CISA KEV, is not known to be used in ransomware campaigns, has low EPSS, and has no public exploit maturity reported, but kernel denial-of-service issues should still be prioritized on multi-tenant, container, edge, and high-availability systems where a local crash can cause broad operational impact.
How an attack unfolds
An attacker first obtains local code execution with sufficient privileges to use eBPF and sockmap functionality, typically requiring capabilities such as CAP_BPF, CAP_NET_ADMIN, CAP_SYS_ADMIN, or permissive unprivileged BPF settings. The attacker creates or uses a UDP socket that is placed into a sockmap or sockhash, then attaches an SK_SKB verdict program that calls one of the BPF socket lookup helpers. The attacker then sends or causes delivery of a UDP packet to that socket, commonly over IPv6 based on the reported crash path. During UDP receive processing, the kernel runs the sockmap verdict in softirq context while `skb->dev` still contains stale UDP scratch data. The BPF helper interprets that stale value as a network device pointer and dereferences it, causing a general protection fault. Depending on kernel panic/oops behavior and workload, this may terminate kernel processing, crash the host, or cause significant service instability.
How to fix it
Apply the Linux kernel update from the relevant distribution or kernel vendor that includes the fix for clearing `skb->dev` before running a sockmap verdict on the UDP receive path. Because no exact product or package fixed versions were provided, use vendor advisories and package changelogs to identify kernels containing the upstream fix titled `udp: clear skb->dev before running a sockmap verdict`. Prioritize upgrades on systems that allow eBPF program loading, run privileged containers, expose BPF to workloads, use Cilium/other eBPF-heavy networking components, or host untrusted users. As interim mitigations, disable unprivileged BPF where possible with `kernel.unprivileged_bpf_disabled=1`, restrict CAP_BPF/CAP_NET_ADMIN/CAP_SYS_ADMIN, prevent privileged container use unless required, enforce seccomp/AppArmor/SELinux policies that block BPF program loading, and limit access to tooling that can create sockmaps and attach SK_SKB programs. These mitigations reduce exploitability but do not replace a kernel fix.
How to confirm the fix worked
Confirm remediation by verifying that the running kernel package is at or above the vendor-fixed version and that the applied kernel changelog contains the UDP sockmap fix for clearing `skb->dev` before verdict execution. Reboot into the updated kernel where required and verify with `uname -a` and distribution package tools such as `rpm -q kernel`, `dpkg -l 'linux-image*'`, or vendor-specific inventory tooling. Confirm exposure reduction by checking whether unprivileged BPF is disabled using `sysctl kernel.unprivileged_bpf_disabled`, and review container/runtime policy to ensure untrusted workloads do not receive CAP_BPF, CAP_NET_ADMIN, CAP_SYS_ADMIN, or privileged mode. In non-production test environments only, validation can include running a controlled BPF/sockmap regression test that exercises UDP sockmap verdict programs with socket lookup helpers and confirms no kernel oops occurs.
Typical attack path
- Gain local execution on a vulnerable Linux system or inside a sufficiently privileged container.
- Confirm that eBPF, sockmap/sockhash, and required BPF helpers are available and not blocked by policy.
- Create a UDP socket and insert it into a sockmap or sockhash.
- Attach an SK_SKB verdict eBPF program that invokes a socket lookup helper such as `bpf_sk_lookup_udp`, `bpf_sk_lookup_tcp`, or `bpf_skc_lookup_tcp`.
- Send or trigger receipt of UDP traffic to the mapped socket.
- Cause the kernel UDP receive path to run the verdict program while `skb->dev` contains stale scratch data.
- Trigger a kernel general protection fault in `bpf_skc_lookup`/`bpf_sk_lookup`, resulting in denial of service.
How to detect it
Look for evidence of kernel crashes or oopses in kernel log sources such as `dmesg`, `journalctl -k`, `/var/log/kern.log`, `/var/log/messages`, `/var/log/syslog`, crash dump directories, and centralized EDR/SIEM telemetry. The most relevant artifacts are general protection faults or oops traces containing BPF socket lookup and sockmap verdict functions, especially `bpf_skc_lookup`, `bpf_sk_lookup`, `sk_psock_verdict_recv`, `udp_read_skb`, `sk_psock_verdict_data_ready`, `__udp_enqueue_schedule_skb`, `udpv6_queue_rcv_one_skb`, or `udp6_unicast_rcv_skb`. Correlate crash timing with audit logs showing BPF program load or map creation activity, privileged container launches, capability changes, execution of BPF tooling, or abnormal UDP traffic to local services. Useful audit sources include Linux auditd syscall records for `bpf`, container runtime logs, Kubernetes audit logs for privileged pods or added capabilities, EDR process telemetry, and shell history where available. Because this vulnerability produces a crash rather than a durable file artifact, detection is primarily log- and crash-trace-based; absence of these indicators does not prove non-exploitation if kernel logs rotated or the system rebooted without persistent logging.
- general protection fault, probably for non-canonical address
- Oops: general protection fault
- RIP: 0010:bpf_skc_lookup
- RIP: 0010:bpf_sk_lookup
- bpf_skc_lookup net/core/filter.c
- bpf_sk_lookup net/core/filter.c
- bpf_prog_run_pin_on_cpu
- sk_psock_verdict_recv
- udp_read_skb
- sk_psock_verdict_data_ready
- __udp_enqueue_schedule_skb
- udpv6_queue_rcv_one_skb
- udp6_unicast_rcv_skb
- ip6_protocol_deliver_rcu
- net_rx_action
- handle_softirqs
- syscall=bpf
- comm="bpftool"
- comm="tc"
What your security team should do
- Inventory Linux systems running kernels released before the vendor fix and prioritize internet-facing, multi-tenant, container-hosting, and high-availability systems.
- Patch affected kernels using distribution-supported updates and reboot into the fixed kernel as soon as operationally feasible.
- Disable unprivileged BPF and remove unnecessary CAP_BPF, CAP_NET_ADMIN, CAP_SYS_ADMIN, and privileged-container access from workloads and users.
- Review usage of eBPF networking stacks, sockmap/sockhash programs, service meshes, and container networking components to identify hosts where the vulnerable code path may be reachable.
- Monitor kernel logs for general protection faults involving BPF socket lookup helpers, UDP receive processing, or sockmap verdict functions.
- If suspicious crashes are observed, preserve kernel logs, crash dumps, BPF program inventory, container audit logs, and process execution history before rebooting or rebuilding.
- Treat repeated kernel oopses with the relevant stack trace as a potential local denial-of-service attempt, especially on shared systems or hosts running untrusted workloads.
The record
In the Linux kernel, the following vulnerability has been resolved: udp: clear skb->dev before running a sockmap verdict On the UDP receive path skb->dev is repurposed as dev_scratch (the truesize/state cache set by udp_set_dev_scratch()), through the union { struct net_device *dev; unsigned long dev_scratch; } in sk_buff. When a UDP socket is in a sockmap, sk_data_ready is sk_psock_verdict_data_ready(), which calls udp_read_skb() -> recv_actor() (sk_psock_verdict_recv) to run the attached SK_SKB verdict program in softirq. If that program calls a socket-lookup helper (bpf_sk_lookup_tcp/udp, bpf_skc_lookup_tcp), bpf_skc_lookup() does: if (skb->dev) caller_net = dev_net(skb->dev); skb->dev still holds the dev_scratch value (a non-NULL integer), so dev_net() dereferences it as a struct net_device * and the kernel takes a general protection fault on a non-canonical address in softirq: Oops: general protection fault, probably for non-canonical address 0x1010000800004a0 CPU: 1 UID: 0 PID: 1406 Comm: syz.2.19 Not tainted 7.1.0-rc6 #1 PREEMPT(full) RIP: 0010:bpf_skc_lookup net/core/filter.c:7033 [inline] RIP: 0010:bpf_sk_lookup+0x45/0x160 net/core/filter.c:7047 Call Trace: <IRQ> bpf_prog_4675cb904b7071f8+0x12e/0x14e bpf_prog_run_pin_on_cpu+0xc6/0x1f0 sk_psock_verdict_recv+0x1ba/0x350 udp_read_skb+0x31a/0x370 sk_psock_verdict_data_ready+0x2e3/0x600 __udp_enqueue_schedule_skb+0x4c8/0x650 udpv6_queue_rcv_one_skb+0x3ec/0x740 udp6_unicast_rcv_skb+0x11d/0x140 ip6_protocol_deliver_rcu+0x61e/0x950 ip6_input_finish+0xa9/0x150 NF_HOOK+0x286/0x2f0 ip6_input+0x117/0x220 NF_HOOK+0x286/0x2f0 __netif_receive_skb+0x85/0x200 process_backlog+0x374/0x9a0 __napi_poll+0x4f/0x1c0 net_rx_action+0x3b0/0x770 handle_softirqs+0x15a/0x460 do_softirq+0x57/0x80 </IRQ> The rmem charge that dev_scratch accounted for is released by skb_recv_udp() on dequeue, just above, so the scratch is dead by the time recv_actor() runs. Clear skb->dev so bpf_skc_lookup() falls back to sock_net(skb->sk), which skb_set_owner_sk_safe() set just above.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|