Skip to main content

Zephyr RTOS CVE-2026-15891

HIGH
NULL Pointer Dereference (CWE-476)
2026-09-13 zephyr
7.5
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Gain adjacent UDP network position
  2. Delivery
    Advertise rogue MQTT-SN gateway
  3. Exploit
    Accept client CONNECT
  4. Install
    Suppress all PINGRESP replies
  5. C2
    Exhaust client PINGREQ retry count
  6. Execute
    Trigger NULL pointer dereference in process_ping()
  7. Impact
    Crash or corrupt slab allocator on target device

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Null pointer safety, defensive checks
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The target device must be running Zephyr RTOS with the MQTT-SN client subsystem compiled in (CONFIG_MQTT_SN enabled) and must be in an active or connecting MQTT-SN session. Exploitation requires the attacker to either (1) control or compromise the legitimate MQTT-SN gateway the client is peered with, or (2) occupy an on-path or adjacent network position and either advertise a rogue gateway or suppress real PINGRESP UDP packets from the legitimate gateway. The trigger condition is the exhaustion of the client's PINGREQ retry count, which the attacker forces simply by not responding - no crafted packet payload is needed. MQTT-SN carries no built-in authentication, so gateway impersonation is ungated on UDP networks. Exploitation is limited to: devices using this specific Zephyr subsystem, sessions that are actively in the connected/ping state, and attackers with UDP-level access to the client (adjacent or gateway-compromise path).

Impact

The NVD-assigned CVSS 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) overstates the realistic attack vector: the description explicitly names an 'on-path/adjacent attacker' advertising a fake gateway or suppressing real PINGRESPs, which maps to AV:A rather than AV:N in practical exploitation. A pre-compromised remote gateway does provide a fully-network-remote path, but that path requires prior compromise of infrastructure, not just network reachability. AC:L is appropriate once the attacker holds the required adjacent position, since triggering the bug requires only withholding UDP responses for the retry window - no timing precision or heap grooming is needed. PR:N is correct because MQTT-SN specifies no client authentication mechanism. Impact is purely availability: no attacker-controlled data is written, and C:N/I:N are accurate. EPSS data is not provided; no KEV listing confirms active exploitation. The bug is trivially reproducible from the commit diff, but the footprint is constrained to Zephyr MQTT-SN deployments. Real-world priority is moderate: high for IoT fleets relying on Zephyr MQTT-SN connectivity, low for environments not using this subsystem.

Exploit ScenarioDerived

An attacker on the same UDP network segment as a Zephyr MQTT-SN device broadcasts or unicasts a forged ADVERTISE packet, causing the client to register the attacker's endpoint as a gateway and connect to it. The attacker accepts the connection and then silently drops all PINGRESP packets. Once the client's PINGREQ retry counter is exhausted, process_ping() executes the gateway-removal path with a NULL gw pointer, crashing the device or corrupting its slab allocator - taking the IoT node offline. No exploit code is publicly known, but the fix is a single-line diff making independent reproduction trivial.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 13, 2026

Null pointer dereference in Zephyr RTOS's MQTT-SN client subsystem allows a malicious or on-path network actor to crash any Zephyr device running an active MQTT-SN session by suppressing gateway keepalive responses. The defect is a missing assignment from the SYS_SLIST_PEEK_HEAD_CONTAINER macro in process_ping(): gw is never populated, remains NULL, and is subsequently dereferenced and passed to the memory slab allocator. The outcome is a kernel panic (with CONFIG_MEM_SLAB_POINTER_VALIDATE) or silent slab free-list corruption on targets where address 0 is writable. No public exploit has been identified at time of analysis, and no KEV listing exists; however, the trivial trigger condition and absence of MQTT-SN authentication make this straightforward for any party controlling or impersonating the client's gateway.

RemediationAI

Apply the upstream one-line patch from commit bd21e954c36be105a374bbc090623810f1a17ee3 (https://github.com/zephyrproject-rtos/zephyr/commit/bd21e954c36be105a374bbc090623810f1a17ee3), which corrects the macro call to gw = SYS_SLIST_PEEK_HEAD_CONTAINER(&client->gateways, gw, next). The exact patched Zephyr release version should be confirmed via the security advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c4g8-4f9p-4746. As a compensating control where patching is not immediately possible, disable the MQTT-SN client subsystem in the Kconfig build (deselect CONFIG_MQTT_SN) if the application does not require it - this eliminates the attack surface entirely with no functional trade-off for non-MQTT-SN workloads. Alternatively, network-level controls that restrict which UDP sources can deliver PINGRESP packets (e.g., allowlisting the legitimate gateway IP/port at the network layer) reduce the impersonation attack path, though they do not protect against a compromised legitimate gateway. Enabling CONFIG_MEM_SLAB_POINTER_VALIDATE in the build converts the silent slab corruption case into a deterministic kernel panic, which is preferable for crash diagnostics but does not prevent the DoS itself.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

MQTT-SN (MQTT for Sensor Networks) is a UDP-based publish-subscribe protocol designed for constrained IoT/embedded devices, used in Zephyr RTOS under subsys/net/lib/mqtt_sn/. The defect (CWE-476, NULL Pointer Dereference) originates from misuse of the Zephyr kernel linked-list macro SYS_SLIST_PEEK_HEAD_CONTAINER, which returns the head container but, unlike assignment macros, does not write back to a pointer variable. The developer called the macro as a void statement, leaving gw at its NULL initialiser. The subsequent gw->gw_id dereference and k_mem_slab_free(&gateways, NULL) call either trigger k_panic() when the kernel slab-pointer validation config option is enabled, or write a corrupted free-list pointer through address 0 in the common/default build - corrupting the allocator state of the entire embedded system. The affected CPE is cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:*, indicating all versions of Zephyr shipping this MQTT-SN implementation. The sibling function process_advertise() uses the safe iterator macro and is unaffected.

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

Vendor (zephyr) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 6.5 MEDIUM

Realistic exploitation requires adjacent network position to impersonate or intercept a UDP MQTT-SN gateway; no authentication, pure availability impact.

3.1 AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:A/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

DescriptionCVE.org

The MQTT-SN client keepalive handler process_ping() in subsys/net/lib/mqtt_sn/mqtt_sn.c removes the gateway record after PINGREQ retries are exhausted. It invoked SYS_SLIST_PEEK_HEAD_CONTAINER(&client->gateways, gw, next) but discarded the result. That macro is a pure expression that does not assign to gw, so gw retained its NULL initializer regardless of the list contents.

The code then dereferences the NULL gw (gw->gw_id) and passes it to mqtt_sn_gw_destroy(), reaching k_mem_slab_free(&gateways, NULL). With CONFIG_MEM_SLAB_POINTER_VALIDATE enabled this triggers k_panic(); in the default configuration it performs a write through the NULL pointer ((char )mem = slab->free_list;) and corrupts the slab free list. The outcome is a crash/kernel panic or, on targets where address 0 is writable, silent memory-allocator corruption.

The vulnerable branch runs whenever the connected MQTT-SN gateway fails to answer keepalive PINGREQs for the configured number of retries. This condition is controlled by the remote peer: a malicious or compromised gateway, or an on-path/adjacent attacker that advertises itself as a gateway and then stops responding (or blackholes the real gateway's PINGRESPs), forces the client into the defect. MQTT-SN runs over UDP and no authentication is required.

The impact is a remotely triggerable denial of service (availability) of the affected MQTT-SN client; there is no attacker-controlled data written. The sibling remover process_advertise() uses SYS_SLIST_FOR_EACH_CONTAINER_SAFE and is not affected. The fix assigns the macro's return value to gw.

Technical POC Analysis

CWE-476 (NULL pointer dereference) in the MQTT-SN client keepalive handler processping() in subsys/net/lib/mqttsn/mqttsn.c (advisory pins the pre-fix branch at lines 1004-1010).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Zephyr RTOS devices running MQTT-SN client subsystem are vulnerable to unauthenticated remote denial-of-service attacks that crash the device by suppressing gateway keepalive responses, directly impacting availability of IoT deployments. No public exploit identified at time of analysis, but the trivial trigger and lack of authentication requirements pose significant operational risk to connected device fleets.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Medium
widely-used embedded RTOS in IoT/constrained-device sector
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A null pointer dereference occurs when a program attempts to access memory through a pointer that has been set to NULL (address 0x0).

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Affected Products (CPE)CVE.org

cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:*

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy