FlawOpen

flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write

● CVE-2026-55269 · CVSS 7.8 · Haute
Recherche · FlawOpen

CVE-2026-55269 : écriture hors limites dans Android Bluetooth SnoopLogger

CVE-2026-55269 est un défaut de sûreté mémoire dans Android Bluetooth SnoopLogger pouvant entraîner une élévation locale de privilèges. Avec une configuration de journalisation développeur précise, un paquet court pouvait atteindre une écriture de chaîne fixe sans capacité suffisante. Google a corrigé la condition de redimensionnement inversée et borné la longueur analysée.

💡 Explication en Langage Simple (ELI5)

Imaginez un employé qui tamponne « PROHIBITED » sur un petit colis. Il faudrait d’abord ajouter une protection, mais un panneau inversé faisait sauter cette étape pour les colis les plus courts. Le correctif ajoute le rembourrage avant le tampon et limite la longueur enregistrée au colis disponible.

Concepts Clés et Termes

SnoopLogger
Code Bluetooth Android qui filtre et journalise les paquets HCI capturés. Le chemin concerné exige la configuration de journalisation filtrée documentée.
Paquet HCI ACL
Paquet de données entre l’hôte Bluetooth et le contrôleur. Le commit amont indique qu’un paquet très court peut révéler le tampon insuffisant si le filtre correspondant est actif.
EXTRA_BUF_SIZE
Capacité supplémentaire réservée avant l’écriture de la marque fixe « PROHIBITED » dans le paquet filtré. Le correctif garantit ce rembourrage pour les petits paquets.
CWE-20
Validation incorrecte des entrées. CISA ADP attribue cette faiblesse ; le défaut concret était une condition de taille inversée dans la gestion du tampon.

Correspondances de référentiels

  • Correspondance conceptuelle de FlawOpen avec MITRE CWE ; aucun fournisseur ni enregistrement CVE n’a attribué cet identifiant de faiblesse à cette démonstration de recherche. CWE-20

Analyse de Cause Racine

Le bulletin Android d’octobre 2026 répertorie CVE-2026-55269 pour Android 16, 16 QPR2 et 17. Le NVD affiche actuellement le score CVSS 3.1 7,8 (Élevé) de CISA ADP, tandis que le bulletin Google qualifie l’entrée System de Critique ; ces évaluations diffèrent. Dans le commit Bluetooth amont, SnoopLogger::FilterCapturedPacket emprunte le chemin PBAP/MAP filtré et PayloadStrip peut écrire la marque fixe PROHIBITED. La condition vulnérable packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE omettait le rembourrage des petits paquets et laissait une capacité insuffisante. Le correctif remplace l’opérateur par <= et borne length à packet.size() + PACKET_TYPE_LENGTH. Le commit décrit un contrôleur Bluetooth malveillant envoyant un paquet HCI ACL court, mais les options développeur et filtres SnoopLogger concernés doivent être activés. Ce n’est pas un service Android accessible depuis Internet. Aucun payload n’est reproduit. Le déploiement du correctif dépend du fabricant.

Déroulement de l'Attaque Étape par Étape

Étape 1

Une configuration de journalisation précise est active

Le commit décrit les options développeur avec le filtrage Bluetooth SnoopLogger actif et le profil PBAP/MAP magic. Ne généralisez pas ce chemin à tous les appareils Android ni à leur configuration par défaut.

Étape 2

Le contrôleur fournit un paquet très court

Un contrôleur Bluetooth malveillant peut envoyer un paquet HCI ACL court dans le chemin de capture filtrée. L’article omet les octets et les détails de déclenchement.

Étape 3

La condition inversée omet le rembourrage requis

FilterCapturedPacket utilisait > au lieu de <=. Les petits paquets ne recevaient pas EXTRA_BUF_SIZE, mais le filtrage pouvait ensuite écrire la marque PROHIBITED dans le tampon trop petit.

Étape 4

Le correctif amont rétablit l’invariant du tampon

Le correctif ajoute de l’espace aux paquets courts concernés et borne la longueur analysée aux données disponibles. Installez une mise à jour au niveau 2026-10-01 ou ultérieur dès que le fabricant la propose.

Code Source : Vulnérable vs Sécurisé

Cet extrait suit le changement public de Google : l’opérateur est inversé afin que les petits paquets reçoivent la capacité supplémentaire nécessaire à la marque, et la longueur analysée est limitée à la taille disponible. Le commit ajoute aussi des tests de paquets courts. Il s’agit d’une illustration réduite du correctif amont, pas d’un correctif autonome pour un appareil ; installez la mise à jour du fabricant au niveau 2026-10-01 ou ultérieur.

Extrait source: snoop_logger.cc

IMPLÉMENTATION VULNÉRABLE
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
  // Les petits paquets doivent disposer d’espace pour le marqueur du filtre.
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// Ensuite, PayloadStrip écrit le marqueur fixe PROHIBITED.
PATCH SÉCURISÉ ET ROBUSTE
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
  // Complétez les paquets courts admissibles avant le filtrage.
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// Gardez la longueur analysée dans les limites du paquet redimensionné.
length = std::min(
    length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));

Liste de Contrôle de Sécurité pour l'Ingénierie

Sources