CVE-2026-16147 in Zephyrinformation

Résumé

par VulDB • 14/09/2026

Le pilote du contrôleur de périphérique USB ITE IT82xx2 (drivers/usb/udc/udc_it82xx2.c) gère incorrectement les transferts multi-paquets sortants (OUT) sur des points de terminaison non contrôle. Dans work_handler_out(), le tampon de transfert actif est obtenu via udc_buf_peek() (qui ne le désenfile pas) ; lorsqu'un paquet de taille maximale complète arrive mais que le tampon dispose encore d'espace libre en queue (le transfert n'est pas terminé), l'ancien code réarme à la fois le point de terminaison pour continuer à remplir ce même tampon via work_handler_xfer_continue() et transmet simultanément ce même tampon, toujours en cours de remplissage, à la pile supérieure avec udc_submit_ep_event().

Parce que udc_submit_ep_event() transfère la propriété du tampon vers la pile des périphériques USB (usbd_event_carrier() ajoute &buf->node à uds_ctx->ep_events, après quoi le gestionnaire de classe le traite et appelle net_buf_unref()), le pilote continue d'effectuer un DMA pour les paquets entrants suivants contrôlés par l'hôte dans un tampon que la pile supérieure a peut-être déjà libéré et recyclé — une écriture use-after-free. De plus, puisque le tampon n'a jamais été désenfilé, le paquet de complétion exécute udc_buf_get() sur le même objet et le soumet à nouveau, ajoutant &buf->node deux fois à la liste d'événements (corruption de singly-linked-list) et provoquant un double net_buf_unref().

L'IT82xx2 est un contrôleur de périphérique USB ; l'hôte USB non fiable contrôle donc la palettisation des transferts sortants et peut forcer ce chemin sur n'importe quel point de terminaison OUT non contrôle dont le tampon en file d'attente dépasse un paquet — une configuration normale pour les flux bulk/interrupt. Le pilote et la pile du périphérique USB s'exécutent dans un contexte noyau au-dessus de l'hôte externe, offrant à ce dernier une primitive de corruption du tas côté dispositif : un déni de service fiable et, parce que les octets écrits sont contrôlés par l'attaquant, une corruption plausible de la mémoire adjacente du pool net_buf. Le vecteur est physique (connexion USB). La correction diffère la soumission jusqu'à ce que le tampon soit complètement rempli et laisse xfer_work_handler() piloter la continuation, afin que chaque tampon OUT soit soumis à la pile supérieure exactement une fois.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsable

Zephyr

Réserver

17/07/2026

Divulgation

14/09/2026

Modérer

accepté

Entrée

VDB-403689

CPE

prêt

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!