CVE-2026-81003 Overview
CVE-2026-81003 is a Linux kernel vulnerability in the AF_IUCV socket implementation (net/iucv). The function afiucv_hs_rcv() selects a destination socket from iucv_sk_list by matching four 8-byte name fields carried in the transport header. The code performs no validation against the net_device the frame arrived on. Frames from any network device can therefore be delivered to an AF_IUCV socket bound to a different device, transport, or network namespace. The flaw enables denial of service, connection hijacking on the IQD fabric, data injection into existing sockets, and cross-namespace frame delivery from an unprivileged user namespace holding only CAP_NET_RAW.
Critical Impact
An adjacent-network attacker on a shared HiperSockets segment can inject data into established AF_IUCV connections, exhaust accept queues, and terminate active sessions.
Affected Products
- Linux kernel builds compiled with CONFIG_AF_IUCV on IBM Z (s390/s390x)
- Systems using AF_IUCV over HiperSockets (IQD devices)
- z/VM guests exposing classic IUCV or HiperSockets transports to workloads
Discovery Timeline
- 2026-09-11 - CVE-2026-81003 published to NVD
- 2026-09-14 - Last updated in NVD database
Technical Details for CVE-2026-81003
Vulnerability Analysis
The afiucv_hs_rcv() handler in net/iucv/af_iucv.c demultiplexes incoming ETH_P_AF_IUCV frames to sockets in iucv_sk_list. Selection depends solely on four plaintext 8-byte identifiers in the transport header. The ingress net_device is never compared against the socket's bound device (iucv->hs_dev).
Three failure modes result. A HiperSockets frame can match a socket bound to the classic z/VM IUCV transport, producing a child socket where hs_dev == NULL and transport == AF_IUCV_TRANS_HIPER. The first send() on such a socket returns -ENODEV, leaving accept() consumers with an unusable descriptor. A frame arriving on one IQD device can also match a socket bound to a different IQD device, allowing accept-queue exhaustion, attacker-controlled peer identity in child sockets, injection into existing sockets, and termination of established connections.
All AF_IUCV sockets live in init_net because iucv_sock_alloc() calls sk_alloc(&init_net, ...). Frames arriving on devices inside another network namespace still match init_net sockets. A process in an unprivileged user and network namespace holding only namespace-local CAP_NET_RAW can transmit a crafted ETH_P_AF_IUCV frame on its own lo device and reach host sockets.
Root Cause
The receive path performs socket lookup on transport-header name fields without cross-checking the ingress net_device. Missing validation between the frame source and the socket binding permits cross-device, cross-transport, and cross-namespace delivery.
Attack Vector
Exploitation requires adjacency on a shared HiperSockets (VCHID) segment or the ability to emit raw ETH_P_AF_IUCV frames on any interface. On the shared segment, AF_IUCV provides no per-connection authentication: no sequence numbers, no TLS, no nonce. Any peer on the segment can spoof frame identifiers to hijack, disrupt, or inject data into a target connection. From a user namespace, CAP_NET_RAW on a loopback interface is sufficient to reach init_net sockets prior to the fix.
See the upstream fixes for implementation details, including Kernel Commit 0a5af67 and Kernel Commit dfac293.
Detection Methods for CVE-2026-81003
Indicators of Compromise
- Unexpected -ENODEV errors returned from send() on newly accepted AF_IUCV sockets, indicating hs_dev/transport mismatch.
- Sudden accept-queue saturation on AF_IUCV listeners bound to IQD devices, without a corresponding legitimate connection surge.
- Abrupt termination of long-lived AF_IUCV connections coinciding with unfamiliar peer userids appearing in application logs.
Detection Strategies
- Audit hosts for kernels built with CONFIG_AF_IUCV=y or CONFIG_AF_IUCV=m and identify processes with open AF_IUCV sockets via ss -x or /proc/net/iucv.
- Correlate kernel version and s390 architecture against the fixed commits published on kernel.org to flag unpatched z/VM and HiperSockets guests.
- Monitor for unprivileged processes creating raw sockets with ETH_P_AF_IUCV (0xFBFB) inside user namespaces, which has no legitimate use case.
Monitoring Recommendations
- Enable auditd rules on socket() and bind() syscalls filtering for AF_IUCV (family 32) to build a baseline of legitimate use.
- Capture and inspect HiperSockets segment traffic for duplicate or spoofed 8-byte name-field tuples targeting known active endpoints.
- Alert on CAP_NET_RAW acquisition inside non-root user namespaces on s390x hosts running unpatched kernels.
How to Mitigate CVE-2026-81003
Immediate Actions Required
- Apply the upstream stable kernel updates that add ingress-device filtering to afiucv_hs_rcv() on all IBM Z systems running AF_IUCV workloads.
- Inventory z/VM guests and LPARs that use HiperSockets IQD devices and prioritize patching hosts sharing a VCHID segment with untrusted peers.
- Restrict creation of user namespaces on s390x hosts where unprivileged workloads do not require them, reducing exposure of the CAP_NET_RAW path.
Patch Information
The fix skips any socket whose hs_dev does not match the ingress device. Classic IUCV sockets (hs_dev == NULL) and unbound HIPER sockets are skipped automatically. Because hs_dev is always resolved via for_each_netdev_rcu(&init_net, ...), frames whose ingress device belongs to another namespace no longer match any socket. Patches are available in Kernel Commit 0a5af67, Kernel Commit 639828a, Kernel Commit 712330f, Kernel Commit 80230a1, Kernel Commit 8e3763f, Kernel Commit 92e5c28, Kernel Commit a7f0130, and Kernel Commit dfac293.
Workarounds
- Where AF_IUCV is not required, unload or blocklist the af_iucv kernel module to remove the attack surface entirely.
- Isolate sensitive z/VM guests onto dedicated HiperSockets VCHIDs so that no untrusted peer shares the same segment.
- Disable unprivileged user namespaces by setting kernel.unprivileged_userns_clone=0 (or the equivalent sysctl) to block the loopback-frame injection path.
# Disable unprivileged user namespaces and blocklist af_iucv
sysctl -w kernel.unprivileged_userns_clone=0
echo 'kernel.unprivileged_userns_clone=0' > /etc/sysctl.d/99-cve-2026-81003.conf
echo 'blacklist af_iucv' > /etc/modprobe.d/af_iucv-blacklist.conf
echo 'install af_iucv /bin/true' >> /etc/modprobe.d/af_iucv-blacklist.conf
modprobe -r af_iucv 2>/dev/null || true
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

