flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write
CVE-2026-55269: Heap-Schreibfehler im Android Bluetooth SnoopLogger
CVE-2026-55269 ist ein Speicherfehler in Android Bluetooth SnoopLogger, der eine lokale Rechteausweitung ermöglichen könnte. Bei einer bestimmten Entwickler-Logging-Konfiguration konnte ein kurzes Controller-Paket eine feste String-Schreiboperation ohne ausreichenden Platz erreichen. Google korrigierte die umgekehrte Resize-Bedingung und begrenzte die geparste Länge.
Ein Mitarbeiter stempelt „PROHIBITED“ auf ein schmales Paket. Zuerst müsste es zusätzliche Polsterung erhalten, doch ein falsch herum angebrachtes Schild ließ diesen Schritt bei den kleinsten Paketen aus. Der Fix polstert das kurze Paket vor dem Stempel und begrenzt die gespeicherte Länge auf das tatsächlich verfügbare Paket.
Kernkonzepte & Begriffe
SnoopLogger- Android-Bluetooth-Code, der erfasste HCI-Pakete filtert und protokolliert. Der betroffene Pfad setzt die beschriebene gefilterte Logging-Konfiguration voraus.
HCI-ACL-Paket- Datenpaket zwischen Bluetooth-Host und Controller. Der Upstream-Commit nennt ungewöhnlich kurze Pakete als Auslöser des zu kleinen Puffers, sofern der passende Filter aktiv ist.
EXTRA_BUF_SIZE- Zusätzliche Kapazität vor dem Schreiben des festen „PROHIBITED“-Markers in ein gefiltertes Paket. Der Fix stellt diese Polsterung für kleine Pakete sicher.
CWE-20- Unzureichende Eingabevalidierung. CISA ADP ordnet die Schwäche so ein; konkret war die Größenbedingung in der Pufferbehandlung umgekehrt.
Framework-Zuordnungen
- Konzeptionelle Zuordnung von FlawOpen zu MITRE CWE; weder ein Anbieter noch ein CVE-Datensatz hat diese Schwachstellen-ID dieser Forschungsdemonstration zugewiesen. CWE-20
Ursachenanalyse
Das Android-Sicherheitsbulletin vom Oktober 2026 führt CVE-2026-55269 für Android 16, 16 QPR2 und 17 auf. NVD zeigt derzeit CISA ADPs CVSS-3.1-Wert 7,8 (Hoch); Google stuft den System-Eintrag im Bulletin als Kritisch ein. Das sind unterschiedliche Bewertungen. Im Bluetooth-Upstream-Commit erreicht SnoopLogger::FilterCapturedPacket den gefilterten PBAP/MAP-Pfad; PayloadStrip kann anschließend den festen Marker PROHIBITED schreiben. Die verwundbare Bedingung packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE ließ kleine Pakete ungepolstert und damit zu wenig Kapazität. Der Fix ändert den Operator zu <= und begrenzt length auf packet.size() + PACKET_TYPE_LENGTH. Der Commit beschreibt einen bösartigen Bluetooth-Controller, der ein kurzes HCI-ACL-Paket sendet; die betreffenden Entwickleroptionen und SnoopLogger-Filter müssen jedoch aktiviert sein. Es handelt sich nicht um einen aus dem Internet erreichbaren Android-Dienst. Ein Exploit-Payload wird nicht gezeigt. Die Verfügbarkeit des Updates hängt vom Gerätehersteller ab.
Schritt-für-Schritt Angriffsablauf
Eine bestimmte Logging-Konfiguration ist aktiv
Der Commit beschreibt aktiviertes Bluetooth-SnoopLogger-Filtering in den Entwickleroptionen und das PBAP/MAP-Profil magic. Verallgemeinern Sie diesen Pfad nicht auf alle Android-Geräte oder deren Standardkonfiguration.
Der Controller liefert ein ungewöhnlich kurzes Paket
Ein bösartiger Bluetooth-Controller kann ein kurzes HCI-ACL-Paket in den gefilterten Erfassungspfad senden. Paketbytes und operative Auslöser werden hier ausgelassen.
Die umgekehrte Bedingung lässt die Polsterung aus
FilterCapturedPacket verwendete > statt <=. Kleine Pakete erhielten kein EXTRA_BUF_SIZE, später konnte die Filterung jedoch den festen Marker PROHIBITED in den zu kleinen Puffer schreiben.
Der Upstream-Fix stellt die Puffergrenze wieder her
Der Fix polstert geeignete kurze Pakete und begrenzt die geparste Länge auf die verfügbaren Daten. Installieren Sie ein Herstellerupdate mit Patch-Level 2026-10-01 oder neuer, sobald es bereitsteht.
Quellcode: Verwundbar vs. Sicher
Dieser Ausschnitt folgt Googles öffentlicher Änderung: Die Bedingung wird umgedreht, damit kleine Pakete zusätzlichen Platz für den Marker erhalten, und die geparste Länge wird auf die verfügbare Größe begrenzt. Der Commit ergänzt auch Tests für kurze Pakete. Dies ist eine gekürzte Darstellung des Upstream-Fixes, kein eigenständiger Gerätepatch; installieren Sie das Herstellerupdate mit Patch-Level 2026-10-01 oder neuer.
Quelltextauszug: snoop_logger.cc
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
// Kleine Pakete benötigen Platz für die Filtermarkierung.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Anschließend schreibt PayloadStrip die feste Markierung PROHIBITED.
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
// Ergänzen Sie geeignete kurze Pakete vor dem Filtern.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Halten Sie die geparste Länge innerhalb des vergrößerten Pakets.
length = std::min(
length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));
Checkliste für Engineering & Systemsicherheit
- ✓Prüfen Sie das Android-Sicherheitspatch-Level und installieren Sie ein Herstellerupdate vom 2026-10-01 oder neuer, sobald verfügbar; eine AOSP-Veröffentlichung bedeutet nicht, dass jedes OEM-Gerät das Update bereits erhalten hat.
- ✓Android-Bluetooth-Maintainer sollten Regressionstests für kurze ein- und ausgehende Pakete mit dem gefilterten PBAP/MAP-Profil
magicbeibehalten. - ✓Belegen Sie beim Vergrößern eines Pakets vor einem Schreibzugriff auf einen festen Marker, dass die Kapazität den Marker und alle folgenden Zugriffe abdeckt.
- ✓Begrenzen Sie geparste Längen nach jedem Resize auf die echte Pufferkapazität und lehnen Sie widersprüchliche Paketlängen vor der Weiterverarbeitung ab.
- ✓Der CVSS-Wert beweist keinen entfernten Internetangriff: Der Commit setzt bestimmte Entwickleroptionen und SnoopLogger-Filter sowie einen bösartigen Bluetooth-Controller voraus.
- ✓Geben Sie die Bewertungen korrekt wieder: Google markiert den Bulletin-Eintrag als Kritisch; CISA ADPs aktuelle NVD-Bewertung lautet CVSS 3.1 7,8 Hoch.