CVE-2026-14366 in Zephyr
Résumé
par VulDB • 31/08/2026
Le callback d'envoi (transmit callback) `siwx91x_send()` du pilote WiFi Silicon Labs SiWx917, situé dans le fichier `drivers/wifi/siwx91x/siwx91x_wifi.c`, libère un paquet réseau qu'il ne possède pas. Dans la voie d'émission (TX path) de Zephyr, l'objet `net_pkt` est détenu par la pile L2/réseau ; le pilote ne fait que l'emprunter pour copier les octets de trame dans un tampon local (`net_buf`). Avant la correction, après la transmission, `siwx91x_send()` appelait également `net_pkt_unref(pkt)` sur le paquet détenu par l'appelant, supprimant sa dernière référence et le renvoyant prématurément au pool de paquets partagé. Ce chemin de code est compilé par défaut (`CONFIG_WIFI_SILABS_SIWX91X_NET_STACK_NATIVE`).
L'appelant, `ethernet_send()` dans `subsys/net/l2/ethernet/ethernet.c`, continue d'utiliser le paquet après que le pilote a retourné la main : il lit `net_pkt_get_len(pkt)`, met à jour les statistiques TX, puis effectue son propre appel à `net_pkt_unref(pkt)`. Comme le pilote a déjà libéré le paquet, ces opérations constituent des lectures post-libération (use-after-free), suivies d'un deuxième unref (double free). Lorsque l'activité réseau concurrente recycle la case mémoire (slab slot) libérée entre les deux appels à unref, le dernier décrémente le compteur de références d'un autre paquet vivant et le libère, corrompant ainsi le pool `net_pkt` partagé par les voies de réception et d'émission.
Le défaut est activé lors des transmissions ordinaires sur l'interface WiFi SiWx917 utilisant la pile native, et un attaquant adjacent sur le même réseau WiFi peut induire des transmissions (par exemple, réponses ARP ou écho ICMP, ou poignées de main TCP) pour forcer ce chemin d'exécution. L'impact principal observable est une perte de disponibilité (blocages de l'émission et plantages dus à la corruption du pool), avec une corruption mémoire dépendante des conditions de course dans le pool de tampons réseau du noyau. La correction supprime l'appel erroné `net_pkt_unref(pkt)` de `siwx91x_send()` ; le unref de la voie de réception du pilote, qui libère correctement un paquet alloué par le pilote lui-même, n'est pas affecté.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.