Zephyr Project bis 4.3.1/4.4.x I3C i3c_handlers.c z_vrfy_i3c_transfer bus Race Condition
| CVSS Meta Temp Score | Aktueller Exploitpreis (≈) | CTI Interest Score |
|---|---|---|
| 7.7 | $0-$5k | 1.69+ |
Zusammenfassung
In Zephyr Project Zephyr bis 4.3.1/4.4.x wurde eine Schwachstelle ausgemacht. Sie wurde als sehr kritisch eingestuft. Hierbei betrifft es die Funktion z_vrfy_i3c_transfer der Datei drivers/i3c/i3c_handlers.c der Komponente I3C. Mittels Manipulieren des Arguments bus mit unbekannten Daten kann eine Race Condition-Schwachstelle ausgenutzt werden.
Diese Schwachstelle wird als CVE-2026-87038 gehandelt. Der Angriff muss lokal erfolgen. Es ist kein Exploit verfügbar.
Es wird empfohlen, die betroffene Komponente zu aktualisieren.
Details
Es wurde eine sehr kritische Schwachstelle in Zephyr Project Zephyr bis 4.3.1/4.4.x gefunden. Es betrifft die Funktion z_vrfy_i3c_transfer der Datei drivers/i3c/i3c_handlers.c der Komponente I3C. Durch Manipulation des Arguments bus mit einer unbekannten Eingabe kann eine Race Condition-Schwachstelle ausgenutzt werden. Im Rahmen von CWE wurde eine Klassifizierung als CWE-367 vorgenommen. Die Auswirkungen sind bekannt für Vertraulichkeit, Integrität und Verfügbarkeit. Die Zusammenfassung von CVE lautet:
The user-mode verification handler for the i3c_transfer() system call, z_vrfy_i3c_transfer() in drivers/i3c/i3c_handlers.c, validated the caller-supplied struct i3c_device_desc in place instead of snapshotting it. It confirmed only that the descriptor was readable by the calling thread (K_SYSCALL_MEMORY_READ()), read target->bus once to check it with K_SYSCALL_OBJ(), and then passed the caller's live pointer down. The implementation z_impl_i3c_transfer() re-reads target->bus from that user memory and dispatches through it as DEVICE_API_GET(i3c, target->bus)->i3c_xfers(...), so the bus that was validated is not necessarily the bus that is used. DEVICE_API_GET() performs no runtime type check outside CONFIG_DEVICE_API_ASSERT builds.
On a build with CONFIG_USERSPACE and an I3C controller driver, a user thread that has been granted an I3C device object can exploit this with a second thread in the same memory domain: one thread calls i3c_transfer() while the other rewrites the bus field of the descriptor. The window between the check and the use spans the num_msgs validation, the message-array access check, a stack VLA allocation and a memcpy() of up to 32 struct i3c_msg, so the race is repeatable and can simply be retried until it lands.
When the substitution succeeds, the kernel dereferences an attacker-chosen pointer as a struct device, loads a function pointer from the attacker-controlled api table and calls it in supervisor mode with attacker-influenced arguments. This yields kernel-mode code execution from an unprivileged user thread — a complete escape of the userspace memory-protection sandbox; lesser outcomes are an arbitrary two-level kernel read or a kernel fault. Builds without CONFIG_USERSPACE, or without an I3C driver, are unaffected.
The fix copies the descriptor into a kernel-stack local with k_usermode_from_copy(), validates the bus in that copy, and dispatches on the copy, so the validated value is provably the value used.Das Advisory findet sich auf github.com. Die Identifikation der Schwachstelle wird seit dem 08.09.2026 mit CVE-2026-87038 vorgenommen. Die Ausnutzbarkeit gilt als leicht. Der Angriff muss lokal erfolgen. Es sind zwar technische Details, jedoch kein verfügbarer Exploit zur Schwachstelle bekannt. Die Beschaffenheit der Schwachstelle lässt vermuten, dass ein Exploit momentan zu etwa USD $0-$5k gehandelt werden wird (Preisberechnung vom 04.11.2026).
Ein Aktualisieren auf die Version 4.3.2 oder 4.5.0 vermag dieses Problem zu lösen.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.
Produkt
Typ
Hersteller
Name
Version
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Zuverlässigkeit: 🔍
CVSSv3
VulDB Meta Base Score: 7.9VulDB Meta Temp Score: 7.7
VulDB Base Score: 8.8
VulDB Temp Score: 8.4
VulDB Vector: 🔒
VulDB Zuverlässigkeit: 🔍
CNA Base Score: 7.0
CNA Vector (zephyr): 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vektor | Komplexität | Authentisierung | Vertraulichkeit | Integrität | Verfügbarkeit |
|---|---|---|---|---|---|
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Zuverlässigkeit: 🔍
Exploiting
Klasse: Race ConditionCWE: CWE-367 / CWE-362
CAPEC: 🔒
ATT&CK: 🔒
Physisch: Teilweise
Lokal: Ja
Remote: Nein
Verfügbarkeit: 🔒
Status: Nicht definiert
Preisentwicklung: 🔍
Aktuelle Preisschätzung: 🔒
| 0-Day | freischalten | freischalten | freischalten | freischalten |
|---|---|---|---|---|
| Heute | freischalten | freischalten | freischalten | freischalten |
Threat Intelligence
Interesse: 🔍Aktive Akteure: 🔍
Aktive APT Gruppen: 🔍
Gegenmassnahmen
Empfehlung: UpgradeStatus: 🔍
0-Day Time: 🔒
Upgrade: Zephyr 4.3.2/4.5.0
Timeline
08.09.2026 CVE zugewiesen04.11.2026 Advisory veröffentlicht
04.11.2026 VulDB Eintrag erstellt
04.11.2026 VulDB Eintrag letzte Aktualisierung
Quellen
Advisory: github.comStatus: Bestätigt
CNA: zephyr
CVE: CVE-2026-87038 (🔒)
GCVE (CVE): GCVE-0-2026-87038
GCVE (VulDB): GCVE-100-430995
Eintrag
Erstellt: 04.11.2026 07:34Anpassungen: 04.11.2026 07:34 (68)
Komplett: 🔍
Cache ID: 216::103
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.
Bisher keine Kommentare. Sprachen: de + en.
Bitte loggen Sie sich ein, um kommentieren zu können.