CVE-2026-23439 Overview
CVE-2026-23439 is a NULL pointer dereference vulnerability [CWE-476] in the Linux kernel's udp_tunnel subsystem. When CONFIG_IPV6 is disabled at kernel build time, the udp_sock_create6() function returns 0 (success) without creating a socket. Callers such as fou_create() then dereference the uninitialized socket pointer, triggering a kernel crash. The flaw affects local systems and requires privileged access to invoke the vulnerable netlink path through fou_nl_add_doit. Exploitation results in a denial-of-service condition through kernel panic.
Critical Impact
A local privileged user can crash the Linux kernel by triggering the FOU (Foo-over-UDP) netlink interface on builds where IPv6 support is disabled.
Affected Products
- Linux Kernel (multiple stable branches, including 3.18 and pre-release 7.0-rc1 through 7.0-rc7)
- Distributions shipping kernels built with CONFIG_IPV6=n
- Systems exposing the fou netlink family to privileged userspace
Discovery Timeline
- 2026-04-03 - CVE-2026-23439 published to NVD
- 2026-04-23 - Last updated in NVD database
Technical Details for CVE-2026-23439
Vulnerability Analysis
The vulnerability resides in the kernel's UDP tunnel infrastructure used by Foo-over-UDP (FOU) and similar encapsulation features. When the kernel is compiled without IPv6 support, the stub implementation of udp_sock_create6() returns 0, which conventionally signals success in kernel APIs. However, the function does not populate the output socket pointer, leaving it uninitialized.
The captured crash trace shows the dereference occurring at fou_nl_add_doit in net/ipv4/fou_core.c, reached through the generic netlink path genl_rcv_msg → genl_family_rcv_msg_doit. The faulting address 0x18 corresponds to a field offset within the expected struct socket, confirming an uninitialized pointer dereference rather than a wild read.
The fix changes udp_sock_create6() to return -EPFNOSUPPORT when CONFIG_IPV6=n, ensuring callers correctly take their error path instead of proceeding with an invalid socket pointer.
Root Cause
The root cause is an API contract violation in the IPv6-disabled stub of udp_sock_create6(). Returning success without initializing the output parameter allowed callers to assume a valid socket existed. This is a classic NULL pointer dereference [CWE-476] caused by inconsistent error semantics between the real implementation and its compile-time stub.
Attack Vector
Exploitation requires local access with privileges sufficient to send netlink messages on the fou generic netlink family, typically CAP_NET_ADMIN. An attacker sends a crafted netlink FOU_CMD_ADD request specifying IPv6 socket creation. The kernel calls into fou_create(), which calls udp_sock_create6(), receives a misleading success code, and dereferences the uninitialized pointer. The result is a kernel oops and denial of service. The vulnerability cannot be triggered remotely and does not yield code execution or information disclosure.
No public proof-of-concept exploit is available. The kernel commits that resolve the issue are referenced at git.kernel.org commit dfc96ae0 and related backports.
Detection Methods for CVE-2026-23439
Indicators of Compromise
- Kernel oops messages referencing fou_nl_add_doit or udp_sock_create6 in dmesg or /var/log/kern.log
- BUG: kernel NULL pointer dereference, address: 0000000000000018 entries with call traces reaching genl_rcv_msg
- Unexpected reboots or kernel panics correlated with netlink activity from privileged processes
Detection Strategies
- Inventory running kernels and identify builds where CONFIG_IPV6 is disabled, focusing on minimal or embedded images
- Audit which processes hold CAP_NET_ADMIN and can issue generic netlink commands to the fou family
- Review crash dumps and kdump output for stack traces matching the published call chain
Monitoring Recommendations
- Forward kernel logs to a centralized SIEM or data lake and alert on NULL pointer dereference events involving network subsystem symbols
- Track netlink socket usage by non-system processes through auditd rules on socket() syscalls with AF_NETLINK
- Monitor host availability metrics for anomalous reboot patterns on systems with custom kernel configurations
How to Mitigate CVE-2026-23439
Immediate Actions Required
- Apply the upstream Linux kernel patches listed in the vendor advisory and reboot affected hosts
- Restrict CAP_NET_ADMIN to trusted administrative accounts and remove it from container workloads that do not require it
- For systems that cannot be patched promptly, rebuild the kernel with CONFIG_IPV6=y or CONFIG_IPV6=m to bypass the vulnerable stub
Patch Information
The Linux kernel maintainers released fixes across multiple stable branches. The change replaces the success return value in the IPv6-disabled stub with -EPFNOSUPPORT, forcing callers down their error path. Patch commits are available at kernel.org commit dfc96ae0, commit 003343985f26, commit 12aa4b73a67d, and additional backports referenced in the NVD entry.
Workarounds
- Unload or blacklist the fou kernel module on systems that do not require Foo-over-UDP encapsulation using echo "blacklist fou" > /etc/modprobe.d/fou.conf
- Use seccomp or Linux Security Modules to block netlink commands targeting the fou family from untrusted processes
- Enable IPv6 support in the kernel build configuration to route execution through the functional udp_sock_create6() implementation
# Configuration example: blacklist the fou module and verify
echo "blacklist fou" | sudo tee /etc/modprobe.d/disable-fou.conf
sudo rmmod fou 2>/dev/null || true
lsmod | grep -E "^fou\b" && echo "fou still loaded" || echo "fou not loaded"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


