FlawOpen

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

● CVE-2026-55269 · CVSS 7.8 · Alta
Investigación · FlawOpen

CVE-2026-55269: escritura fuera del búfer en Android Bluetooth SnoopLogger

CVE-2026-55269 es un fallo de seguridad de memoria en Android Bluetooth SnoopLogger que podría permitir una elevación local de privilegios. Con una configuración de registro para desarrolladores concreta, un paquete corto del controlador podía alcanzar una escritura de cadena fija sin espacio suficiente. Google corrigió la condición de redimensionamiento invertida y limitó la longitud analizada.

💡 Explicación en Lenguaje Sencillo (ELI5)

Imagina a un empleado estampando “PROHIBITED” en un paquete estrecho. Primero debería recibir envoltorio adicional, pero una señal al revés hacía que se omitiera ese paso para los paquetes más pequeños. La corrección añade espacio antes del sello y limita la longitud registrada al paquete disponible.

Conceptos Clave y Términos

SnoopLogger
Código de Android Bluetooth que filtra y registra paquetes HCI capturados. La ruta afectada requiere la configuración de registro filtrado documentada.
Paquete HCI ACL
Paquete de datos entre el host Bluetooth y el controlador. El cambio upstream indica que un paquete excepcionalmente corto puede revelar la ruta de búfer insuficiente si el filtro está activo.
EXTRA_BUF_SIZE
Capacidad adicional reservada antes de escribir la marca fija “PROHIBITED” en el paquete filtrado. La corrección garantiza este espacio para paquetes pequeños.
CWE-20
Validación incorrecta de entradas. CISA ADP asigna esta debilidad; el defecto concreto era una condición de tamaño invertida al manejar el búfer.

Mapeos de marcos

  • Mapeo conceptual de FlawOpen a MITRE CWE; ningún proveedor ni registro CVE asignó este identificador de debilidad a esta demostración de investigación. CWE-20

Análisis de Causa Raíz

El boletín Android de octubre de 2026 incluye CVE-2026-55269 para Android 16, 16 QPR2 y 17. NVD muestra actualmente CVSS 3.1 7,8 (Alta) de CISA ADP, mientras que el boletín de Google clasifica como Crítica la entrada System; son evaluaciones distintas. En el commit Bluetooth upstream, SnoopLogger::FilterCapturedPacket entra en la ruta filtrada PBAP/MAP y PayloadStrip puede escribir la marca fija PROHIBITED. La condición vulnerable packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE omitía el relleno para paquetes pequeños y dejaba capacidad insuficiente. La corrección cambia el operador a <= y limita length a packet.size() + PACKET_TYPE_LENGTH. El commit describe un controlador Bluetooth malicioso que envía un paquete HCI ACL corto, pero requiere que estén activas las opciones de desarrollador pertinentes y el filtro SnoopLogger. No es un servicio Android accesible desde Internet. No se reproduce ningún payload. La disponibilidad del parche depende del fabricante.

Flujo de Ataque Paso a Paso

Paso 1

Hay una configuración de registro específica activa

El commit describe Opciones de desarrollador con el filtrado Bluetooth SnoopLogger activo y el perfil PBAP/MAP magic. No generalices esta ruta a todos los dispositivos Android ni a su configuración predeterminada.

Paso 2

El controlador entrega un paquete muy corto

Un controlador Bluetooth malicioso puede enviar un paquete HCI ACL corto a la ruta de captura filtrada. El artículo omite los bytes y los detalles operativos del disparador.

Paso 3

La condición invertida omite el espacio adicional

FilterCapturedPacket usaba > donde debía usar <=. Los paquetes pequeños no recibían EXTRA_BUF_SIZE, pero el filtrado posterior podía escribir la marca PROHIBITED en el búfer insuficiente.

Paso 4

El parche upstream restaura el límite del búfer

La corrección añade espacio a los paquetes cortos pertinentes y limita la longitud analizada a los datos disponibles. Instala una actualización con nivel de parche 2026-10-01 o posterior cuando la ofrezca el fabricante.

Código Fuente: Vulnerable vs. Seguro

Este extracto sigue el cambio público de Google: invierte la comparación para que el paquete pequeño reciba capacidad adicional para la marca y limita la longitud analizada al tamaño disponible. El commit también añade pruebas para paquetes cortos. Es una ilustración reducida del arreglo upstream, no un parche autónomo para un dispositivo; instala la actualización del fabricante con nivel 2026-10-01 o posterior.

Fragmento de origen: snoop_logger.cc

IMPLEMENTACIÓN VULNERABLE
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
  // Los paquetes pequeños deben tener espacio para el marcador del filtro.
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// Después, PayloadStrip escribe el marcador fijo PROHIBITED.
PARCHE SEGURO Y ROBUSTO
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
  // Amplíe los paquetes cortos admitidos antes de filtrarlos.
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// Mantenga la longitud analizada dentro del paquete redimensionado.
length = std::min(
    length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));

Lista de Verificación de Seguridad para Ingeniería

Fuentes