CVE-2026-15890
Last modified
CVE-2026-15890 is a medium-severity vulnerability rated 5.3/10 on the CVSS scale. The default AEAD nonce provider for the PSA Internal Trusted Storage transform module, secure_storage_its_transform_aead_get_nonce() in subsys/secure_storage/src/its/transform/aead_get.c, stores its nonce counter in unsynchronized function-local static variables (s_nonce and s_nonce_initialized). Every ITS write obtains its AES-GCM or ChaCha20-Poly1305 nonce here via secure_storage_its_transform_to_store(). Because the function held no lock, two threads calling it concurrently race on the shared statics: the initialization path (psa_generate_random() followed by memcpy()) and the non-atomic increment-then-copy path can each hand the same nonce value to two distinct encryption operations, and can lose increments so the counter repeats values it was designed never to repeat. EPSS estimates a 0.06% chance of exploitation in the next 30 days.
Description
The default AEAD nonce provider for the PSA Internal Trusted Storage transform module, secure_storage_its_transform_aead_get_nonce() in subsys/secure_storage/src/its/transform/aead_get.c, stores its nonce counter in unsynchronized function-local static variables (s_nonce and s_nonce_initialized). Every ITS write obtains its AES-GCM or ChaCha20-Poly1305 nonce here via secure_storage_its_transform_to_store(). Because the function held no lock, two threads calling it concurrently race on the shared statics: the initialization path (psa_generate_random() followed by memcpy()) and the non-atomic increment-then-copy path can each hand the same nonce value to two distinct encryption operations, and can lose increments so the counter repeats values it was designed never to repeat. The ITS layer (secure_storage_its_set() in subsys/secure_storage/src/its/implementation.c) performs no serialization of its own, so concurrent same-UID writes reach the racy provider directly. Reusing a nonce with the same key under AES-GCM or ChaCha20-Poly1305 is a catastrophic AEAD failure: it leaks the XOR of the two plaintexts (ITS routinely stores secrets, including PSA persistent keys) and, for GCM, exposes the authentication key, enabling forgery of stored entries. Because the AEAD key is derived per entry UID, the security-relevant collision is two concurrent writes to the same UID both receiving the same nonce; an adversary able to read the raw backing storage can then exploit the reuse. Both ITS store back-ends shipped with Zephyr, zms.c and the settings/NVS back-end in settings.c, are log-structured flash stores with deferred garbage collection, so an entry superseded by a rewrite remains physically present in the partition until its sector is reclaimed. Two same-UID writes that race therefore leave both ciphertexts readable in the raw image at once, which is the condition the nonce reuse needs to be exploitable. The trigger remains narrow: both built-in key providers (DEVICE_ID_HASH and ENTRY_UID_HASH) salt the derived key with the entry UID, so reuse across different UIDs is harmless, and the exposure requires an application that writes the same UID concurrently from two threads. The fix serializes the provider with a K_MUTEX_DEFINE(s_nonce_mutex) held for the duration of nonce generation.
Metrics
Weakness Enumeration
Affected Software
Source: CNA advisory (CVE.org). NVD analysis pending.
| Vendor | Product | Versions |
|---|---|---|
| zephyrproject | zephyr | >= 4.0.0, < 4.3.2; >= 4.4.0, < 4.4.2 |
References
Timeline
- Published
- Last Modified
- Status
- Received
Frequently Asked Questions
What is CVE-2026-15890?
How severe is CVE-2026-15890?
How do I fix CVE-2026-15890?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-1586A flaw has been found in Open5GS up to 2.7.5. Impacted is th…7.5
- CVE-2026-1587A vulnerability has been found in Open5GS up to 2.7.6. The a…7.5
- CVE-2026-1588A vulnerability was found in jishenghua jshERP up to 3.6. Th…2.7
- CVE-2026-15887IBM WebSphere Application Server 9.0, and 8.5 is affected by…5.4
- CVE-2026-15889The Aruba HiSpeed Cache plugin for WordPress is vulnerable t…6.4
- CVE-2026-1589A vulnerability was determined in itsourcecode School Manage…9.8
- CVE-2026-15891The MQTT-SN client keepalive handler process_ping() in subsy…7.5
- CVE-2026-15892The mcumgr SMP settings-management group handlers settings_m…5.3
- CVE-2026-15893net_if_ipv6_calc_reachable_time() in subsys/net/ip/net_if.c …6.5
- CVE-2026-15895OS command injection in the npm package loading component in…8.4
- CVE-2026-15899Use after free in CameraCapture in Google Chrome on Mac prio…9.6
- CVE-2026-1590A vulnerability was identified in itsourcecode School Manage…9.8
Are you affected by CVE-2026-15890?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
