Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-87043— sys_rand_get() silently returns an unwritten buffer when the entropy device is not ready

Quick assessment

Affected
zephyrproject zephyr
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

在 中,熵设备随机数生成器在 失败后,立即从 返回 ,从而未能执行同一函数中更靠后的非密码学系统定时器回退机制。由于 的返回类型为 并丢弃了该错误,且面向公众的 系统调用本身也声明为 (因此无法报告失败),调用方的输出缓冲区未被修改,其原有内容被直接作为“随机数据”返回。由于存在封装层极薄的接口,这实质上构成了未初始化内存读取漏洞: 声明了 ,调用 后直接返回 。 “未就绪”状态属于正常的运行时情况,而非故障。熵驱动在 阶段初始化,其优先级由 配置(默认为 50),因此任何更早初始化的内核对象(运行优先级为 30)

CVSS 4.8 · Medium
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-87043

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
sys_rand_get() silently returns an unwritten buffer when the entropy device is not ready
Source: CVE Program / CVE List V5
Vulnerability Description
The entropy-device random number generator in subsys/random/random_entropy_device.c returned early with -ENODEV from rand_get() as soon as device_is_ready() failed, before reaching the non-cryptographic system-timer fallback further down the same function. Because z_impl_sys_rand_get() returns void and discards that error — and the public sys_rand_get() syscall is itself declared void, so it cannot report failure — the caller's output buffer was left untouched and its previous contents were handed back as random data. The thin wrappers make this a plain uninitialized read: sys_rand32_get() declares uint32_t ret;, calls sys_rand_get(&ret, sizeof(ret)) and returns ret. The "not ready" state is a normal runtime condition rather than a fault. Entropy drivers initialise at PRE_KERNEL_1 with CONFIG_ENTROPY_INIT_PRIORITY (default 50), so any earlier initialiser — kernel objects run at priority 30 — observes an unready device; the sibling generator subsys/random/random_xoshiro128.c and z_early_rand_get() in kernel/init.c both already carried an explicit timer fallback for exactly this case. The state is also permanent for the boot when an entropy driver's init hook fails, which several in-tree drivers can do on real hardware (entropy_stm32 on an RNG clock configuration error, entropy_psa_crypto when psa_crypto_init() fails, entropy_nrf_cracen, entropy_esp32, entropy_virtio). When this occurs, every non-cryptographic random value in the system is either a constant or stale memory. coap_next_token() in subsys/net/lib/coap/coap.c fills a static buffer, so every CoAP token becomes the same .bss constant; tcp_init_isn() in subsys/net/ip/tcp.c returns an uninitialized stack word as the TCP initial sequence number; DHCPv4/DHCPv6 transaction IDs, WebSocket masking keys and RTP SSRCs are similarly degraded, and arch/arm64/core/pac.c derives per-thread Pointer Authentication keys from the same source. Where the bytes are transmitted directly — SSH packet padding, the netmidi2 session nonce, a DTLS connection ID on builds without CONFIG_CSPRNG_ENABLED — stale caller stack or heap contents are disclosed on the wire. The fix initialises ret to -ENODEV and only calls entropy_get_entropy() when the device is ready, so the not-ready case now falls through to the timer fallback and the buffer is always written. The cryptographically secure path is unchanged: sys_csrand_get() still propagates the error to the caller and never silently degrades. An attacker cannot induce the unready state, but can observe and exploit the resulting non-random values remotely on an affected device.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
Source: CVE Program / CVE List V5
Vulnerability Type
使用不充分的随机数
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
zephyrproject zephyr 4.4.0 ~ 4.5.0 -

II. Public POCs for CVE-2026-87043

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-87043

请登录查看更多情报信息。

Other References for CVE-2026-87043 (2)

Same Patch Batch · zephyrproject · 2026-11-04 · 8 CVEs total

CVE-2026-16511 8.8 HIGH Unvalidated user pointers in RTIO syscall verifiers allow a user-mode thread to write kern
CVE-2026-87040 8.3 HIGH Bluetooth LE Controller accepts received PDUs whose length field exceeds the configured ma
CVE-2026-87039 7.8 HIGH I2S configure syscall handler passes an unvalidated user-supplied kernel object pointer to
CVE-2026-87041 7.8 HIGH Inverted memory-permission check in the RTIO syscall verifier allows a user-mode thread to
CVE-2026-87038 7.0 HIGH Time-of-check/time-of-use double fetch in the Zephyr i3c_transfer() syscall handler allows
CVE-2026-87044 6.5 MEDIUM Memory leak in the Mbed TLS crypto shim on failed cipher/AEAD operations leads to remotely
CVE-2026-85036 5.7 MEDIUM Bluetooth Classic AVDTP session reuse re-initializes a queued work item, corrupting the sy

IV. Related Vulnerabilities