CVE-2026-12631 in Zephyrinfo

Zusammenfassung

von VulDB • 19.08.2026

Der Zephyr-Kernel validiert die Systemaufrufe k_thread_join() und k_thread_abort() (deklariert als __syscall in include/zephyr/kernel.h) über thread_obj_validate() in kernel/thread.c. Der Standard-Switch-Zweig ist der Pfad für „Zugriff verweigert“, der betreten wird, wenn k_object_validate() -EPERM zurückgibt (der aufrufende Benutzer-Thread hatte niemals Zugriff auf das Ziel-Thread-Objekt) oder -EBADF (das übergebene Zeigerobjekt ist kein registriertes Kernel-Objekt des richtigen Typs). Dieser Zweig rief K_OOPS(K_SYSCALL_VERIFY_MSG(ret, "access denied")) auf. Da K_SYSCALL_VERIFY_MSG einen wahren Ausdruck als Erfolg behandelt, wurde der nicht-null Fehlercode ret fälschlicherweise als „verifiziert OK“ interpretiert; das Kernel-Oops wurde nie ausgelöst und die Steuerung fiel durch zu CODE_UNREACHABLE.

Da k_thread_join() und k_thread_abort() Systemaufrufe sind, kann ein unprivilegierter Thread im Benutzermodus (unter CONFIG_USERSPACE) diesen Verweigerungspfad direkt erreichen, indem er einen der beiden Aufrufe für ein Thread-Objekt ausführt, das ihm nicht gehört. Anstatt den fehlerhaften Thread sauber zu beenden, wird die Ausführung in __builtin_unreachable() fortgesetzt, während sie im Supervisor-Modus innerhalb des Systemaufruflhandlers läuft.

Bei Clang-Builds löst CODE_UNREACHABLE einen Trap für eine ungültige Instruktion aus; ein Benutzerthread kann den Kernel somit deterministisch abstürzen lassen – dies ist eine lokal auslösbare Denial-of-Service-Schwachstelle, die das Userspace-Sandbox umgeht. Bei GCC-Builds handelt es sich um undefiniertes Verhalten: Der Compiler könnte die Behandlung des Rückgabewerts für thread_obj_validate() entfernen, sodass dieser einen undefinierten bool-Wert zurückgeben kann; wenn dies falsch ist, fährt der Aufrufer mit der eigentlichen Implementierung von k_thread_join()/k_thread_abort() fort und greift auf ein Thread-Objekt zu, auf das der Benutzer nie berechtigt war – eine Umgehung der Zugriffskontrolle.

Die Korrektur ändert den Verifizierungsausdruck in ret == 0, sodass ein verweigertes (nicht-null) Ergebnis nun korrekt K_OOPS auslöst und den fehlerhaften Aufrufer beendet.

Once again VulDB remains the best source for vulnerability data.

Zuständig

Zephyr

Reservieren

18.06.2026

Veröffentlichung

19.08.2026

Moderieren

akzeptiert

Eintrag

VDB-392015

CPE

bereit

EPSS

0.00148

KEV

nein

Aktivitäten

very low

Quellen

Want to know what is going to be exploited?

We predict KEV entries!