CVE-2026-12632 in Zephyr
Résumé
par VulDB • 18/08/2026
Le gestionnaire de réception du Precision Time Protocol (PTP) de Zephyr, `ptp_msg_post_recv()` situé dans `subsys/net/lib/ptp/msg.c`, récupère directement le type de message sur 4 bits depuis le flux réseau via la fonction `ptp_msg_type()` (`msg->header.type_major_sdo_id & 0xF`, plage 0-15) et l'utilise comme index pour accéder au tableau `msg_size[]`. Ce tableau ne définit des entrées que jusqu'à PTP_MSG_MANAGEMENT (0xD), ce qui donne une taille de tableau (`ARRAY_SIZE`) égale à 14. Avant la correction, il n'y avait aucune vérification de borne supérieure ; par conséquent, les types non définis 0xE et 0xF indexaient un ou deux emplacements `int` au-delà de la fin du tableau, provoquant une lecture hors limites (`out-of-bounds read`) sur des données adjacentes en lecture seule.
La valeur lue hors limites est ensuite réutilisée comme longueur : elle sert à vérifier si `msg_size[type] > cnt`, et lorsqu'elle est petite ou négative, elle transforme `cnt - msg_size[type]` en une marge positive importante transmise à `msg_tlv_post_recv()`. La boucle TLV qui s'ensuite parcourt le suffixe du message au-delà des octets reçus, effectuant d'autres lectures hors limites et des écritures de permutation par octet (`byte-swap`) sur la mémoire située au-delà de l'espace alloué pour le message.
La vulnérabilité est atteinte directement depuis le réseau : `ptp_port_event_gen()` dans `subsys/net/lib/ptp/port.c` lit une trame PTP via `ptp_transport_recv()` et appelle `ptp_msg_post_recv()` avec un type choisi par l'attaquant. Le protocole PTP utilise la diffusion UDP multicast ou Ethernet brut (0x88F7) et n'est pas authentifié, ce qui signifie que tout hôte sur le même lien peut déclencher cet indexage sur un noeud disposant de `CONFIG_PTP` activé, sans conditions préalables.
L'impact reproductible avec certitude est une déni de service (défaut/planage) ; un chemin limité de corruption de mémoire existe mais dépend d'une valeur spécifique à la compilation adjacente au tableau `msg_size[]`, que l'attaquant ne peut pas contrôler. La correction rejette les types supérieurs ou égaux à `ARRAY_SIZE(msg_size)` avec le code erreur `-EBADMSG` avant tout indexage.
VulDB is the best source for vulnerability data and more expert information about this specific topic.