CVE-2026-43167
Medium · 5.5CVSS
5.5
EPSS
0.1%
Published
May 6, 2026
CISA due date
—
Cloudanix analysis
A local user with network administration privileges could make some Linux systems hang while removing or reconfiguring network interfaces.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
This Linux kernel flaw affects the XFRM/IPsec hardware offload path during network device unregistration. A local user with sufficient privileges to configure XFRM state and manipulate a network device can create an IPsec offload state that holds a reference to a net_device, then trigger device unregister after offload capabilities change. Because the kernel did not always flush related XFRM state and policy on NETDEV_UNREGISTER, the net_device reference can leak. The result is a denial-of-service condition where device teardown can hang with elevated usage counts, potentially leaving kernel resources stuck and affecting network device lifecycle operations.
Why it matters to the business
Successful exploitation can disrupt Linux systems that use IPsec/XFRM or network device offload features by causing network device removal or reconfiguration to hang. In production, this may interfere with network interface lifecycle management, container or virtual network teardown, test infrastructure, VPN/IPsec operations, or host maintenance workflows. The issue requires local privileges and has very low current EPSS activity, is not listed in CISA KEV, and has no known exploit maturity reported, so it is lower urgency than remotely exploitable kernel flaws but still important for multi-user, container-hosting, lab, CI, and network appliance environments.
How an attack unfolds
An attacker first obtains local access with privileges sufficient to create XFRM/IPsec state and manipulate a network device or simulated network device. They create an XFRM security association using ESP hardware offload against a selected interface, causing the XFRM device path to acquire a reference to the underlying net_device. They then change the interface feature state, such as disabling ESP hardware offload, and unregister or remove the network device. On vulnerable kernels, the NETDEV_UNREGISTER handling does not unconditionally flush all related XFRM state and policy, so the net_device reference is not released. The unregister operation can then wait indefinitely or leave kernel resources pinned, producing a local denial of service against networking operations or system cleanup paths.
How to fix it
Apply a Linux kernel update that includes the upstream fix to always flush XFRM state and policy when a NETDEV_UNREGISTER event occurs. No exact fixed package versions were provided in the input, so remediation should be performed by updating to the latest vendor-supported kernel for the relevant distribution or appliance platform and confirming that the vendor advisory for CVE-2026-43167 is included. Where immediate patching is not possible, reduce exposure by limiting local administrative capabilities that allow XFRM state creation, IPsec offload configuration, ethtool offload changes, network namespace administration, and network device creation/removal. Avoid enabling untrusted users or workloads to run with CAP_NET_ADMIN or equivalent privileges. Consider disabling or restricting IPsec/ESP hardware offload on systems where it is not operationally required, and harden container runtimes so containers cannot manipulate host networking devices or XFRM policy.
How to confirm the fix worked
Confirm the running kernel package is updated to a vendor release that includes the XFRM NETDEV_UNREGISTER flushing fix. Validate exposure by checking whether untrusted users, containers, or automation have CAP_NET_ADMIN or equivalent permission to create XFRM state and manipulate network devices. On test systems only, administrators can verify the fix by reproducing the XFRM offload plus device unregister sequence described in the advisory and confirming that device removal completes cleanly without kernel messages such as 'unregister_netdevice: waiting for ... to become free' or ref_tracker reports involving xfrm_dev_state_add. Also confirm that IPsec/XFRM functionality and network interface teardown continue to work after patching.
Typical attack path
- Gain local access to a Linux system with privileges to configure XFRM/IPsec state and manipulate network devices.
- Identify or create a network interface that supports or exposes ESP/IPsec hardware offload behavior, including simulated devices in test-capable environments.
- Add an XFRM/IPsec ESP state with hardware offload bound to that interface.
- Disable or alter the interface offload feature state after the XFRM state has acquired a device reference.
- Unregister, delete, or remove the affected network device.
- Trigger a leaked net_device reference, causing device teardown to hang or kernel resources to remain pinned.
How to detect it
Look for evidence of failed or hanging network device teardown combined with XFRM/IPsec offload configuration activity. Useful log sources include kernel logs from dmesg, journald kernel facility, syslog/kern.log, auditd command execution logs, EDR process telemetry, container runtime audit logs, and shell history where available. Key artifacts include kernel messages showing unregister_netdevice waiting for an interface to become free, ref_tracker reports involving xfrm_dev_state_add or xfrm_state_construct, and recent use of commands that add XFRM state with offload, change ESP hardware offload with ethtool, or create/delete netdevsim devices. Investigate any sequence where 'ip xfrm state add ... offload crypto dev ...' is followed by 'ethtool -K ... esp-hw-offload off' and then interface deletion or device unregistration. Also review whether the activity originated from unexpected users, containers, CI jobs, or workloads with CAP_NET_ADMIN.
- unregister_netdevice: waiting for
- Usage count =
- ref_tracker: netdev@
- xfrm_dev_state_add
- xfrm_state_construct
- xfrm_add_sa
- xfrm_user_rcv_msg
- xfrm_netlink_rcv
- NETDEV_UNREGISTER
- ip xfrm state add
- offload crypto dev
- proto esp
- ethtool -K
- esp-hw-offload off
- /sys/bus/netdevsim/new_device
- /sys/bus/netdevsim/del_device
- /sys/bus/netdevsim/devices/
- netdevsim0
What your security team should do
- Prioritize patching Linux systems that host containers, CI workloads, network simulation, VPN/IPsec services, or users with local administrative/network privileges.
- Inventory systems where CAP_NET_ADMIN is granted to non-root users, containers, pods, CI jobs, or automation, and reduce those grants where possible.
- Update affected Linux kernels through the operating system or appliance vendor as soon as a fixed release is available for the platform.
- Monitor kernel logs for net_device reference leaks, stuck unregister operations, and XFRM/IPsec offload activity.
- Restrict access to network device creation/removal interfaces and tools such as ip, ethtool, and netdevsim to trusted administrators only.
- If patching is delayed, disable unnecessary ESP/IPsec hardware offload capabilities and avoid exposing netdevsim or similar test interfaces on production systems.
- Because this issue is not in KEV, has no reported exploit maturity, and EPSS remains very low, track it through normal kernel maintenance unless local privilege boundaries are weak or multi-tenant workloads are present.
The record
In the Linux kernel, the following vulnerability has been resolved: xfrm: always flush state and policy upon NETDEV_UNREGISTER event syzbot is reporting that "struct xfrm_state" refcount is leaking. unregister_netdevice: waiting for netdevsim0 to become free. Usage count = 2 ref_tracker: netdev@ffff888052f24618 has 1/1 users at __netdev_tracker_alloc include/linux/netdevice.h:4400 [inline] netdev_tracker_alloc include/linux/netdevice.h:4412 [inline] xfrm_dev_state_add+0x3a5/0x1080 net/xfrm/xfrm_device.c:316 xfrm_state_construct net/xfrm/xfrm_user.c:986 [inline] xfrm_add_sa+0x34ff/0x5fa0 net/xfrm/xfrm_user.c:1022 xfrm_user_rcv_msg+0x58e/0xc00 net/xfrm/xfrm_user.c:3507 netlink_rcv_skb+0x158/0x420 net/netlink/af_netlink.c:2550 xfrm_netlink_rcv+0x71/0x90 net/xfrm/xfrm_user.c:3529 netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline] netlink_unicast+0x5aa/0x870 net/netlink/af_netlink.c:1344 netlink_sendmsg+0x8c8/0xdd0 net/netlink/af_netlink.c:1894 sock_sendmsg_nosec net/socket.c:727 [inline] __sock_sendmsg net/socket.c:742 [inline] ____sys_sendmsg+0xa5d/0xc30 net/socket.c:2592 ___sys_sendmsg+0x134/0x1d0 net/socket.c:2646 __sys_sendmsg+0x16d/0x220 net/socket.c:2678 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f This is because commit d77e38e612a0 ("xfrm: Add an IPsec hardware offloading API") implemented xfrm_dev_unregister() as no-op despite xfrm_dev_state_add() from xfrm_state_construct() acquires a reference to "struct net_device". I guess that that commit expected that NETDEV_DOWN event is fired before NETDEV_UNREGISTER event fires, and also assumed that xfrm_dev_state_add() is called only if (dev->features & NETIF_F_HW_ESP) != 0. Sabrina Dubroca identified steps to reproduce the same symptoms as below. echo 0 > /sys/bus/netdevsim/new_device dev=$(ls -1 /sys/bus/netdevsim/devices/netdevsim0/net/) ip xfrm state add src 192.168.13.1 dst 192.168.13.2 proto esp \ spi 0x1000 mode tunnel aead 'rfc4106(gcm(aes))' $key 128 \ offload crypto dev $dev dir out ethtool -K $dev esp-hw-offload off echo 0 > /sys/bus/netdevsim/del_device Like these steps indicate, the NETIF_F_HW_ESP bit can be cleared after xfrm_dev_state_add() acquired a reference to "struct net_device". Also, xfrm_dev_state_add() does not check for the NETIF_F_HW_ESP bit when acquiring a reference to "struct net_device". Commit 03891f820c21 ("xfrm: handle NETDEV_UNREGISTER for xfrm device") re-introduced the NETDEV_UNREGISTER event to xfrm_dev_event(), but that commit for unknown reason chose to share xfrm_dev_down() between the NETDEV_DOWN event and the NETDEV_UNREGISTER event. I guess that that commit missed the behavior in the previous paragraph. Therefore, we need to re-introduce xfrm_dev_unregister() in order to release the reference to "struct net_device" by unconditionally flushing state and policy.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|