CVE-2026-15890
Received Received - Intake

Race Condition in Zephyr RTOS PSA Internal Trusted Storage AEAD Nonce Generation

Vulnerability report for CVE-2026-15890, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-21

Last updated on: 2026-09-21

Assigner: Zephyr Project

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.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-21
Last Modified
2026-09-21
Generated
2026-09-22
AI Q&A
2026-09-22
EPSS Evaluated
N/A
NVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
zephyrproject zephyr *

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-362 The product contains a concurrent code sequence that requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence operating concurrently.
CWE-323 Nonces should be used for the present occasion and only once.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability involves a race condition in the PSA Internal Trusted Storage (ITS) transform module of Zephyr RTOS. The issue occurs in the nonce generation function where two threads can concurrently access and modify unsynchronized static variables, leading to the same nonce being reused for different encryption operations. This nonce reuse breaks the security guarantees of AES-GCM and ChaCha20-Poly1305, allowing plaintext recovery and forgery of stored entries.

Detection Guidance

This vulnerability is specific to the Zephyr RTOS secure storage ITS transform module and requires detecting concurrent writes to the same UID in the ITS layer. No standard network or system commands can directly detect this issue. Review Zephyr application logs for concurrent ITS write operations to the same UID and analyze flash storage dumps for duplicate nonce values in ciphertexts.

Impact Analysis

If you use Zephyr RTOS with ITS for storing secrets or keys, an attacker with access to the raw storage could exploit this to recover plaintexts or forge data. The impact is limited to applications writing the same UID concurrently from multiple threads, as nonce reuse across different UIDs is harmless.

Compliance Impact

This vulnerability could lead to unauthorized access or modification of sensitive data stored in the ITS layer, which is critical for compliance with GDPR (data protection) and HIPAA (healthcare data privacy). Nonce reuse in AES-GCM or ChaCha20-Poly1305 allows plaintext recovery and forgery, potentially exposing or altering protected data.

Mitigation Strategies

Apply the official Zephyr patch that introduces a mutex (s_nonce_mutex) to serialize nonce generation. Update to a version of Zephyr that includes the fix. If immediate patching is not possible, restrict applications to single-threaded ITS write operations to prevent concurrent access to the same UID.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-15890. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart