
Sans dongle, sans root, outil d'évaluation de sécurité Bluetooth pour écouteurs sans fil affectés par la chaîne de vulnérabilités du SDK Airoha (CVE-2025-20700/20701/20702)
Version 1.0.0
Outil d'évaluation de sécurité Bluetooth pour les écouteurs sans fil affectés par la chaîne de vulnérabilités du SDK Airoha (CVE-2025-20700 / CVE-2025-20701 / CVE-2025-20702). Il scanne les appareils à proximité, identifie les puces Airoha connues comme étant affectées grâce à leurs empreintes, et sonde l'accès GATT non authentifié et l'accessibilité du protocole RACE - entièrement via la pile Bluetooth du système d'exploitation (BlueZ) via bleak. Aucun dongle Bluetooth externe n'est requis et les droits root ne sont pas nécessaires. Les résultats sont rapportés en langage clair avec les détails techniques, afin que vous puissiez agir sans connaissance approfondie du Bluetooth.
Cet outil est destiné à évaluer les appareils que vous possédez ou dont vous avez l'autorisation explicite de tester. Les sondages GATT et RACE sont des opérations actives : ils se connectent à l'appareil cible et lui envoient des commandes. N'utilisez pas --gatt, --race, --firmware, --bd-address, --assess, --baseline, --check-drift ou --memory-read contre un appareil qui n'est pas le vôtre ou pour lequel vous n'avez pas obtenu l'autorisation de tester. --scan est passif et écoute uniquement les annonces déjà diffusées publiquement, il est donc sûr de l'exécuter contre tout appareil à portée.
--memory-read va plus loin que les autres sondes actives : il récupère une vraie page en lecture seule (256 octets) du contenu flash réel de l'appareil, à une adresse fixe, comme confirmation définitive de CVE-2025-20702 lorsque la sonde --race (qui ne teste que l'accessibilité) n'obtient aucune réponse. Il est en lecture seule (les lectures flash ne présentent aucun risque d'usure ou de brick, contrairement aux commandes d'écriture/effacement/FOTA, que cet outil n'envoie jamais), optionnel, et nécessite sa propre confirmation séparée au-delà de l'invite de propriété standard, décrivant exactement ce qu'il fait avant d'exécuter quoi que ce soit.
Sonder un appareil voisin arbitraire n'est pas seulement une question de politique - cela peut avoir de réels effets secondaires. --gatt tente une lecture ou un abonnement aux notifications sur chaque caractéristique qu'il trouve, et certains appareils grand public exposent des services de type provisionnement (par exemple le service Fast Pair de Google) qui réagissent en déclenchant une véritable négociation d'appairage sur l'appareil cible, indépendamment de ce que cet outil demande explicitement. Une caractéristique nécessitant un chiffrement peut déclencher la même chose, même contre votre propre appareil, car BlueZ peut acheminer silencieusement cette demande d'authentification vers l'agent que votre bureau a enregistré (par exemple l'invite d'appairage de KDE) - par conséquent, chaque commande active enregistre également son propre agent BlueZ temporaire qui rejette automatiquement toute demande de ce type pendant la durée de la sonde, de sorte qu'aucune invite d'appairage ne peut apparaître. Chaque commande active invite également à confirmer que l'adresse cible est bien la vôtre avant de faire quoi que ce soit sur la radio ; passez --yes pour ignorer l'invite en cas d'utilisation scriptée après avoir déjà confirmé qu'il s'agit de votre appareil :
buds_audit.py --assess --target AA:BB:CC:DD:EE:FF --yes
--watch est passif, comme --scan - il écoute uniquement les annonces déjà diffusées et ne se connecte jamais à quoi que ce soit, donc il ne demande pas de confirmation.
python3 -m venv venv
venv/bin/pip install -r requirements.txt
Nécessite Python 3.10+ (développé avec la version 3.14) et un système Linux exécutant BlueZ avec un adaptateur Bluetooth allumé.
Linux uniquement, et pas automatiquement tous les systèmes Linux :
bleak lui-même a un backend Windows, mais cet outil ne repose pas uniquement sur bleak - la découverte Bluetooth Classic (core/scanner.py) et les vérifications d'état d'appairage (core/gatt.py) utilisent toutes deux directement bluetoothctl en ligne de commande, un outil CLI propre à BlueZ qui n'existe pas sur Windows. Ces chemins de code échoueraient simplement avec « commande introuvable ».bluetoothctl dans le PATH, pas seulement n'importe quel noyau Linux. La plupart des distributions de bureau l'incluent ; une image minimale ou serveur sans le paquet bluez installé ne l'aura pas par défaut. Vérifié sans root sur BlueZ 5.86 - d'autres versions devraient fonctionner de la même manière car bleak cible l'API D-Bus standard de BlueZ, mais cela n'a pas été revérifié indépendamment.usbipd-win, qui ne transfère que les adaptateurs connectés par USB. Le Bluetooth intégré de la plupart des ordinateurs portables est connecté via un bus non USB (SDIO/PCIe, avec le Wi-Fi), que usbipd-win ne peut généralement pas transférer - cela dépend donc entièrement du matériel spécifique.Vous n'avez pas besoin d'une machine Linux personnelle - vous avez juste besoin de Linux avec un accès réel à un adaptateur Bluetooth. Deux moyens pratiques pour y parvenir :
Dans les deux cas, la règle est la même : l'outil lui-même est inchangé - il a simplement besoin de Linux avec un adaptateur Bluetooth que BlueZ peut réellement atteindre.
De nombreux écouteurs TWS cessent d'émettre des annonces (et abandonnent toute connexion active) après une période d'inactivité pour économiser l'énergie, et certains s'éteignent complètement d'eux-mêmes. Si un scan ne trouve pas un appareil trouvé il y a une minute, ou si une sonde échoue en cours de route, c'est généralement que les écouteurs se sont mis en veille, pas un bug - sortez-les de leur boîtier ou appuyez à nouveau sur le bouton d'appairage et réessayez.