flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write
CVE-2026-55269: запись за границы буфера Android Bluetooth SnoopLogger
CVE-2026-55269 — ошибка безопасности памяти в Android Bluetooth SnoopLogger, способная привести к локальному повышению привилегий. При особой конфигурации журнала короткий пакет контроллера мог дойти до записи фиксированной строки без достаточного места. Google исправил инвертированное условие расширения буфера и ограничил разобранную длину.
Представьте служащего, который ставит штамп «PROHIBITED» на узкую посылку. Сначала к ней нужно добавить упаковку, но перевёрнутая табличка заставляла пропускать этот шаг для самых маленьких посылок. Исправление добавляет место до штампа и ограничивает записанную длину размером доступной посылки.
Ключевые понятия и термины
SnoopLogger- Код Bluetooth в Android, который фильтрует и записывает захваченные HCI-пакеты. Уязвимый путь требует указанной конфигурации фильтрованного журнала.
Пакет HCI ACL- Пакет данных между хостом Bluetooth и контроллером. Согласно upstream-изменению, необычно короткий пакет может выявить недостаточную ёмкость буфера при активном фильтре.
EXTRA_BUF_SIZE- Дополнительная ёмкость перед записью фиксированной метки «PROHIBITED» в отфильтрованный пакет. Исправление добавляет её для коротких пакетов.
CWE-20- Недостаточная проверка входных данных. CISA ADP указывает эту слабость; конкретная ошибка состояла в инвертированном условии размера при работе с буфером.
Связи со стандартами
- Концептуальное соответствие FlawOpen для MITRE CWE; ни поставщик, ни запись CVE не присваивали этот идентификатор слабого места данной исследовательской демонстрации. CWE-20
Анализ первопричины
В бюллетене Android за октябрь 2026 года CVE-2026-55269 относится к Android 16, 16 QPR2 и 17. В NVD сейчас указана оценка CISA ADP CVSS 3.1 7,8 (Высокая), тогда как Google помечает запись System как Критическую; это разные оценки. В upstream-коммите Bluetooth SnoopLogger::FilterCapturedPacket переходит в фильтрованный путь PBAP/MAP, где PayloadStrip может записать фиксированную метку PROHIBITED. Уязвимое условие packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE пропускало дополнение буфера для коротких пакетов, оставляя недостаточную ёмкость. Исправление меняет оператор на <= и ограничивает length значением packet.size() + PACKET_TYPE_LENGTH. В коммите описан вредоносный Bluetooth-контроллер, отправляющий короткий HCI ACL-пакет; при этом должны быть включены соответствующие параметры разработчика и фильтр SnoopLogger. Это не Android-служба, доступная из интернета. Эксплойт-payload не приводится. Срок выпуска обновления зависит от производителя устройства.
Пошаговый сценарий атаки
Активна особая конфигурация журнала
В коммите описаны включённая фильтрация Bluetooth SnoopLogger в параметрах разработчика и профиль PBAP/MAP magic. Не переносите эти условия на все устройства Android и настройки по умолчанию.
Контроллер передаёт необычно короткий пакет
Вредоносный Bluetooth-контроллер может отправить короткий пакет HCI ACL в фильтрованный путь захвата. Байты пакета и инструкции запуска опущены.
Инвертированное условие пропускает расширение
FilterCapturedPacket использовал > вместо <=. Короткие пакеты не получали EXTRA_BUF_SIZE, но фильтрация могла записать метку PROHIBITED в недостаточный буфер.
Upstream-исправление восстанавливает границу буфера
Исправление дополняет подходящие короткие пакеты и ограничивает длину доступными данными. Установите обновление производителя с уровнем патча 2026-10-01 или выше, когда оно станет доступно.
Исходный код: Уязвимый vs Защищённый вариант
Этот фрагмент соответствует общедоступному исправлению Google: условие меняется так, чтобы короткий пакет получил дополнительную ёмкость для метки, а разобранная длина ограничивалась доступным размером. В коммите также добавлены тесты коротких пакетов. Это сокращённая иллюстрация upstream-исправления, а не самостоятельный патч для устройства; установите обновление производителя с уровнем 2026-10-01 или новее.
Фрагмент исходного кода: snoop_logger.cc
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
// В коротких пакетах нужно предусмотреть место для маркера фильтра.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Затем PayloadStrip записывает фиксированный маркер PROHIBITED.
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
// Дополните подходящие короткие пакеты до фильтрации.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Ограничьте разобранную длину размером увеличенного пакета.
length = std::min(
length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));
Чек-лист по защите системы для инженеров
- ✓Проверьте уровень исправлений безопасности Android и установите обновление производителя с датой 2026-10-01 или позднее, как только оно появится; публикация AOSP не означает, что каждый OEM уже выпустил обновление.
- ✓Сопровождающим Android Bluetooth следует сохранить регрессионные тесты коротких входящих и исходящих пакетов при фильтрованном профиле PBAP/MAP
magic. - ✓Перед записью фиксированной метки после увеличения пакета докажите, что выделенная ёмкость покрывает метку и все последующие обращения.
- ✓После изменения размера ограничивайте разобранную длину реальной ёмкостью буфера; отклоняйте несогласованные длины до дальнейшей обработки.
- ✓Не считайте CVSS доказательством удалённой интернет-атаки: коммит требует особых параметров разработчика, фильтра SnoopLogger и вредоносного Bluetooth-контроллера.
- ✓Точно указывайте оценки: Google помечает запись бюллетеня как Критическую; текущая оценка CISA ADP в NVD — CVSS 3.1 7,8 (Высокая).