FlawOpen

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

● CVE-2026-55269 · CVSS 7.8 · Alta
Pesquisa · FlawOpen

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.

💡 Explicação em Linguagem Simples (ELI5)

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

Passo 1

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.

Passo 2

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.

Passo 3

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.

Passo 4

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

IMPLEMENTAÇÃO VULNERÁVEL
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.
PATCH SEGURO E ROBUSTO
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

Fontes