Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain unprivileged app-thread execution on device
-
DeliveryOpen AF_PACKET RAW socket on 802.15.4 iface
-
ExploitCall zsock_sendto() with oversized payload
-
ExecutionLength checks skipped, net_buf_add_mem overruns 125-byte pool
-
PersistSupervisor-mode OOB write corrupts adjacent kernel memory
-
ImpactKernel crash or state compromise
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a build with CONFIG_NET_L2_IEEE802154_FRAGMENT enabled (the default whenever CONFIG_NET_6LO is set) so the vulnerable unfragmented copy branch exists. Exploitation is NOT possible over the air / from the radio - 6LoWPAN encode path length-checks IPv6 packets. It requires local on-device code that opens a NET_AF_PACKET socket (NET_SOCK_RAW, where the 6LoWPAN block is skipped, or NET_SOCK_DGRAM, which returns early on the address-family test) bound to an 802.15.4 interface, then sends a payload exceeding the 125-byte IEEE802154_MTU. For this to constitute a privilege-boundary crossing (unprivileged thread driving a supervisor-mode write via zsock_socket()/zsock_sendto() syscalls), the build must also have CONFIG_USERSPACE enabled; without CONFIG_USERSPACE the attacker already runs in-supervisor and this is a caller-side robustness defect only. Overrun size is limited to ~ll_hdr_len+3 bytes under the default CONFIG_NET_BUF_FIXED_DATA_SIZE (128 bytes) but can be much larger under CONFIG_NET_BUF_VARIABLE_DATA_SIZE. |
| Impact | The vendor CVSS 3.1 vector (AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:H, base 6.3) is internally consistent with the description and I concur with it. This is a genuine supervisor-mode out-of-bounds write (CWE-787) but its real-world risk is bounded by several factors that keep it out of the critical tier. Attack vector is local (AV:L): the flaw is explicitly NOT reachable from the radio - for IPv6/6LoWPAN traffic ieee802154_6lo_encode_pkt() length-checks the whole packet and diverts oversized frames to the fragmentation path, so the vulnerable unfragmented branch only sees in-bounds copies. It is only reachable by an on-device application opening a NET_AF_PACKET socket (RAW or DGRAM) bound to an 802.15.4 interface, where the 6LoWPAN length validation is skipped. Complexity is High (AC:H) because it requires the specific build config (CONFIG_NET_L2_IEEE802154_FRAGMENT, default when CONFIG_NET_6LO is set) and, for a security boundary to be crossed, CONFIG_USERSPACE so an unprivileged thread can drive the kernel write via zsock syscalls; without USERSPACE the attacker is already in-process and this is a robustness/reliability defect rather than a privilege boundary crossing. PR:L reflects the userspace-thread case. There is NO EPSS score, NO CISA KEV listing, and NO public exploit code referenced - exploitation status is therefore 'no public exploit identified at time of analysis.' The overrun magnitude is configuration-dependent: bounded to ~ll_hdr_len+3 bytes with the default 128-byte fixed buffers, but potentially much larger under CONFIG_NET_BUF_VARIABLE_DATA_SIZE. Net: a real, patch-worthy memory-corruption bug in a widely-deployed RTOS, but a narrow trigger and local-only vector make it low-to-medium operational priority rather than an urgent fire. |
| Exploit ScenarioDerived | On a Zephyr device built with CONFIG_NET_L2_IEEE802154_FRAGMENT and CONFIG_USERSPACE, an unprivileged application thread opens a NET_AF_PACKET RAW socket bound to the 802.15.4 interface and calls zsock_sendto() with a payload larger than the 125-byte IEEE802154_MTU. No length validation exists on that transmit path, so ieee802154_send() performs an unchecked net_buf_add_mem() into the fixed 125-byte tx_frame_buf_pool, writing attacker-chosen bytes past the buffer into adjacent kernel memory. No public exploit code is referenced; achieving controlled compromise rather than a crash requires favorable heap/pool adjacency (AC:H). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 28, 2026
A supervisor-mode out-of-bounds write exists in the Zephyr RTOS 802.15.4 L2 transmit path: ieee802154_send() copies packet data into a fixed 125-byte frame buffer without validating the packet length on the unfragmented code path. On builds with CONFIG_NET_L2_IEEE802154_FRAGMENT (enabled by default with CONFIG_NET_6LO), local code that opens a NET_AF_PACKET socket (NET_SOCK_RAW, which skips the 6LoWPAN encoder, or NET_SOCK_DGRAM, which returns early on the address-family check) bound to an 802.15.4 interface can send a payload larger than IEEE802154_MTU and corrupt memory adjacent to the transmit buffer pool, causing a crash or further compromise of kernel state. The flaw is not reachable from the radio because ieee802154_6lo_encode_pkt() length-checks IPv6 packets and forces fragmentation; in a CONFIG_USERSPACE build an unprivileged thread can reach it through the zsock_socket()/zsock_sendto() syscalls, though the overrun is bounded to roughly ll_hdr_len + 3 bytes with the default fixed-size net_buf configuration. No public exploit code was identified at time of analysis and the vendor patch is available (commit 3d4c6177d2dbd77d12d9b14cd75a00cdbd826227).
RemediationAI
Vendor-released patch: apply the fix commit 3d4c6177d2dbd77d12d9b14cd75a00cdbd826227 (Zephyr security advisory GHSA-j76j-jrjc-xgvp), which validates ll_hdr_len + net_pkt_get_len(pkt) + authtag_len against IEEE802154_MTU and routes all copies through copy_pkt_to_frame() so oversized packets fail with -EMSGSIZE. Where updating is not immediately possible, remove the vulnerable branch by disabling CONFIG_NET_L2_IEEE802154_FRAGMENT (and therefore 6LoWPAN, CONFIG_NET_6LO) on 802.15.4 builds, at the cost of losing 6LoWPAN fragmentation and IPv6 support over 802.15.4, and disable CONFIG_NET_SOCKETS_PACKET so NET_AF_PACKET sockets cannot be created. Enabling CONFIG_ASSERT does not fix the defect - it only converts the silent overwrite into an assertion failure, which is itself a denial of service; enabling CONFIG_USERSPACE raises the exposure by letting unprivileged threads reach the path through zsock_socket()/zsock_sendto(), so restrict or audit threads granted socket syscalls. Because no public exploit code was identified at time of analysis and the weakness requires local on-device code, the patch is the only mitigation that removes the out-of-bounds write.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Zephyr's IEEE 802.15.4 link layer (subsys/net/l2/ieee802154/ieee802154.c) transmits frames from a single fixed-size buffer pool sized to IEEE802154_MTU (125 bytes). When 6LoWPAN fragmentation support is compiled in (CONFIG_NET_L2_IEEE802154_FRAGMENT, default with CONFIG_NET_6LO), ieee802154_send() has a branch for packets that do not require fragmentation, and that branch performed an unchecked net_buf_add_mem(frame_buf, pkt_buf->data, pkt_buf->len). The only length guard was __ASSERT_NO_MSG() inside net_buf_simple_add(), which is compiled out unless CONFIG_ASSERT is set, so oversized data silently overran the frame buffer. This is CWE-787 (out-of-bounds write): the copy length is derived from attacker-influenced packet data rather than from the destination buffer's tailroom. The normal IPv6 path is safe because ieee802154_6lo_encode_pkt() compares the whole packet length against IEEE802154_MTU and selects fragmentation when it does not fit; the gap appears for NET_AF_PACKET/TCP-IP-offload-style traffic where either the 6LoWPAN block is skipped (NET_SOCK_RAW) or it returns early on the address-family test (NET_SOCK_DGRAM), leaving net_context_sendto(), net_if_tx() and pkt_buffer_length() with no clamping for this L2. The fix adds a length check (ll_hdr_len + net_pkt_get_len(pkt) + authtag_len against IEEE802154_MTU) and a copy_pkt_to_frame() helper that verifies tailroom, returns -EMSGSIZE instead of overflowing, and linearizes the entire net_buf chain into one MAC frame. Overrun severity depends on net_buf configuration: with the default CONFIG_NET_BUF_FIXED_DATA_SIZE of 128 bytes it is limited to about ll_hdr_len + 3 bytes, while CONFIG_NET_BUF_VARIABLE_DATA_SIZE permits a single storage buffer as large as CONFIG_NET_PKT_BUF_TX_DATA_POOL_SIZE, making the write substantially larger.
Know when Zephyr gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:H
Local AF_PACKET socket access only (AV:L); requires specific FRAGMENT/USERSPACE build config and favorable memory layout (AC:H); unprivileged userspace thread (PR:L); OOB write corrupts kernel state (I:H/A:H) with no disclosure (C:N).
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
ieee802154_send() in subsys/net/l2/ieee802154/ieee802154.c copies the outgoing packet into a single fixed 125-byte transmit buffer (tx_frame_buf_pool, sized IEEE802154_MTU). In builds with CONFIG_NET_L2_IEEE802154_FRAGMENT enabled (the default whenever CONFIG_NET_6LO is set), the branch taken when 6LoWPAN fragmentation is not required performed an unchecked net_buf_add_mem(frame_buf, pkt_buf->data, pkt_buf->len). The only guard was __ASSERT_NO_MSG() inside net_buf_simple_add(), which is compiled out without CONFIG_ASSERT, so an oversized packet silently overran the frame buffer.
The defect is not reachable from the radio: for NET_AF_INET6 packets ieee802154_6lo_encode_pkt() compares the whole packet length against IEEE802154_MTU and takes the fragmentation path when it does not fit, so every buffer copied on the unfragmented branch is within bounds. It is reachable through NET_AF_PACKET sockets bound to an 802.15.4 interface: for NET_SOCK_RAW the 6LoWPAN block is skipped entirely and for NET_SOCK_DGRAM it returns early on the address-family test, leaving no length validation anywhere on the transmit path (net_context_sendto() and net_if_tx() apply none, and pkt_buffer_length() does not clamp the allocation for this L2).
An application - or, in a CONFIG_USERSPACE build, an unprivileged application thread using the zsock_socket()/zsock_sendto() syscalls - can therefore drive a supervisor-mode out-of-bounds write of chosen bytes past the 125-byte pool buffer. With the default CONFIG_NET_BUF_FIXED_DATA_SIZE of 128 bytes the overrun is bounded to roughly ll_hdr_len + 3 bytes; with CONFIG_NET_BUF_VARIABLE_DATA_SIZE a single storage buffer can be as large as CONFIG_NET_PKT_BUF_TX_DATA_POOL_SIZE, making the overrun far larger. The consequence is corruption of memory adjacent to the pool, with a crash or further compromise of kernel state as the practical impact.
The fix validates ll_hdr_len + net_pkt_get_len(pkt) + authtag_len against IEEE802154_MTU before any copy and adds a tailroom-checking copy_pkt_to_frame() helper that returns -EMSGSIZE instead of overrunning the buffer. The same change also linearizes the whole net_buf chain into one MAC frame, so packet storage boundaries no longer become frame boundaries on the wire.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on
Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit
Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS
Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner
Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability
Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable
DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul
zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(
Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul
The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte
Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c
EUVD-2026-88473
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB