flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write
CVE-2026-55269: gravação fora do buffer no Bluetooth SnoopLogger do Android
CVE-2026-55269 é uma falha de segurança de memória no Android Bluetooth SnoopLogger que pode levar à elevação local de privilégios. Com uma configuração específica de registro para desenvolvedores, um pacote curto do controlador podia chegar a uma gravação de string fixa sem espaço suficiente. O Google corrigiu a condição de redimensionamento invertida e limitou o tamanho analisado.
Imagine um funcionário carimbando “PROHIBITED” numa encomenda estreita. Antes, ela deveria receber uma embalagem extra, mas uma placa invertida fazia o funcionário pular essa etapa nas menores encomendas. A correção adiciona espaço ao pacote curto antes do carimbo e limita o tamanho registrado à embalagem disponível.
Conceitos Centrais e Termos
SnoopLogger- Código Bluetooth do Android que filtra e registra pacotes HCI capturados. O caminho afetado depende da configuração de registro filtrado descrita.
Pacote HCI ACL- Pacote de dados entre o host Bluetooth e o controlador. O commit upstream informa que um pacote excepcionalmente curto pode alcançar o caminho com buffer insuficiente quando o filtro correspondente está ativo.
EXTRA_BUF_SIZE- Capacidade adicional reservada antes de gravar a marca fixa “PROHIBITED” no pacote filtrado. A correção garante essa folga para pacotes pequenos.
CWE-20- Validação inadequada de entrada. A CISA ADP atribui essa fraqueza; o defeito concreto era uma condição de tamanho invertida no tratamento do buffer.
Mapeamentos de frameworks
- Mapeamento conceitual da FlawOpen para o MITRE CWE; nenhum fornecedor ou registro CVE atribuiu este identificador de fraqueza a esta demonstração de pesquisa. CWE-20
Análise de Causa Raiz
O boletim Android de outubro de 2026 lista CVE-2026-55269 para Android 16, 16 QPR2 e 17. O NVD mostra atualmente a pontuação CVSS 3.1 de 7,8 (Alta) da CISA ADP, enquanto o boletim do Google classifica a entrada do System como Crítica; são avaliações diferentes. No commit Bluetooth upstream, SnoopLogger::FilterCapturedPacket entra no caminho filtrado PBAP/MAP e PayloadStrip pode escrever a marca fixa PROHIBITED. A condição vulnerável packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE impedia o preenchimento quando o pacote era pequeno, deixando capacidade insuficiente. A correção usa <= e limita length a packet.size() + PACKET_TYPE_LENGTH. O commit descreve um controlador Bluetooth malicioso enviando um pacote HCI ACL curto, mas exige que as opções de desenvolvedor relevantes e o filtro SnoopLogger estejam ativos. Não é um serviço Android exposto à internet. Não reproduzimos payloads. A disponibilidade do patch depende do fabricante.
Fluxo de Ataque Passo a Paso
Uma configuração específica de registro está ativa
O commit descreve opções de desenvolvedor com filtragem Bluetooth SnoopLogger ativa e o perfil PBAP/MAP magic. Não generalize isso para toda instalação Android ou configuração padrão.
O controlador envia um pacote excepcionalmente curto
Um controlador Bluetooth malicioso pode enviar um pacote HCI ACL curto ao caminho de captura filtrada. O artigo omite bytes e instruções de disparo.
A condição invertida deixa de adicionar espaço
FilterCapturedPacket usava > onde precisava de <=. Pacotes pequenos não recebiam EXTRA_BUF_SIZE, mas a filtragem podia gravar a marca fixa PROHIBITED no buffer pequeno.
O patch upstream restaura o limite do buffer
A correção adiciona espaço aos pacotes curtos elegíveis e limita o comprimento analisado aos dados disponíveis. Instale uma atualização com nível de patch 2026-10-01 ou posterior quando o fabricante a disponibilizar.
Código-Fonte: Vulnerável vs. Seguro
Este trecho segue a alteração pública do Google: a comparação é invertida para que um pacote pequeno receba a capacidade adicional da marca e o comprimento analisado seja limitado ao tamanho disponível. O commit também adiciona testes para pacotes curtos. É uma ilustração reduzida da correção upstream, não um patch independente para um aparelho; instale a atualização do fabricante com nível 2026-10-01 ou posterior.
Trecho de origem: snoop_logger.cc
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
// Pacotes pequenos devem receber espaço para o marcador do filtro.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Depois, PayloadStrip grava o marcador fixo PROHIBITED.
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
// Preencha os pacotes curtos elegíveis antes da filtragem.
packet.resize(packet.size() + EXTRA_BUF_SIZE);
}
// Mantenha o tamanho analisado dentro do pacote redimensionado.
length = std::min(
length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));
Lista de Verificação de Segurança para Engenharia
- ✓Verifique o nível de patch de segurança Android e instale uma atualização do fabricante com data 2026-10-01 ou posterior quando disponível; a publicação no AOSP não significa que todos os fabricantes já distribuíram a correção.
- ✓Para mantenedores Android Bluetooth, preserve testes de regressão para pacotes curtos de entrada e saída sob o perfil filtrado PBAP/MAP
magic. - ✓Ao redimensionar um pacote antes de gravar uma marca de tamanho fixo, prove que a capacidade alocada cobre a marca e todos os acessos posteriores.
- ✓Limite o tamanho analisado à capacidade real do buffer após o redimensionamento; rejeite comprimentos inconsistentes antes do processamento seguinte.
- ✓Não interprete a pontuação CVSS como prova de ataque remoto pela internet: o commit exige uma configuração específica de Opções do desenvolvedor e do filtro SnoopLogger, além de um controlador Bluetooth malicioso.
- ✓Atribua corretamente as severidades: o boletim do Google classifica a entrada como Crítica; a avaliação atual da CISA ADP no NVD mostra CVSS 3.1 7,8 Alta.