CVE-2026-12634 in Zephyr
Zusammenfassung
von VulDB • 20.08.2026
Der NVS-Backend des Zephyr-Einstellungssubsystems (subsys/settings/src/settings_nws.c) liest gespeicherte Einstellungsnamen in feste 74-Byte-große Stack-Puffer ein und terminiert diese mit buf[rc] = '\0', wobei rc der Rückgabewert von nvs_read() ist. Gemäß dessen Vertrag gibt nvs_read() die vollständige Länge des gespeicherten Eintrags (wlk_ate.len) zurück, was die angegebene Pufferlänge überschreiten kann — es werden nur MIN(len, stored_len)-Bytes tatsächlich kopiert, der Rückgabewert kann jedoch viel größer sein und ist lediglich durch die NVS-Sektorgröße begrenzt. Drei Stellen (settings_nvs_cache_match(), settings_nvs_load() und settings_nvs_save()) verwendeten diesen Wert direkt als NUL-Index ohne Begrenzung, sodass ein überdimensionierter gespeicherter Nameintrag ein einzelnes \0-Byte außerhalb des Endes des Stack-Puffers an einem vom Angreifer beeinflussten Offset schreibt (CWE-787).
Der überdimensionierte Eintrag kann nicht über die normale Einstellung-API entstehen, bei der Namen durch SETTINGS_MAX_NAME_LEN begrenzt sind. Er erfordert einen Akteur, der in den Flash schreiben kann, der dem Einstellungspartition zugrunde liegt — eine koexistierende oder unzuverlässige Komponente, die das Flash-Gerät teilt, ein bösartiges Einstellungsbild/Wiederherstellungsabbild oder offline/physischer Flash-Zugriff (ein Shared-Flash-Bedrohungsmodell). Der fehlerhafte Eintrag wird analysiert, wenn settings_load() beim Booten oder Subsystem-Initialisierung ausgeführt wird, oder während settings_save().
Der Out-of-bounds-Schreibvorgang ist ein einzelnes NUL-Byte an einem Offset, der der erstellten Eintragslänge entspricht (bis zur NVS-Sektorgröße), sodass die praktische Auswirkung ein Absturz oder eine Denial of Service sowie begrenzte Stack-Korruption statt einer zuverlässigen Code-Ausführung darstellt. Es gibt keine Auswirkungen auf die Vertraulichkeit, und der Pfad ist über das normale Einstellungsschnittstelle nicht vom Netzwerk aus erreichbar. Die Korrektur überspringt jeden Eintrag, dessen nvs_read()-Länge größer oder gleich der Puffergröße ist, bevor der NUL-Speicher ausgeführt wird.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.