flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write
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.
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
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.
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.
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.
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
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.
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
- ✓Comprueba el nivel de parche de seguridad Android e instala una actualización del fabricante con fecha 2026-10-01 o posterior cuando esté disponible; la publicación en AOSP no significa que todos los fabricantes ya la hayan distribuido.
- ✓Para mantenedores de Android Bluetooth, conserva pruebas de regresión para paquetes entrantes y salientes cortos con el perfil filtrado PBAP/MAP
magic. - ✓Al redimensionar un paquete antes de escribir una marca de tamaño fijo, demuestra que la capacidad asignada cubre la marca y todos los accesos posteriores.
- ✓Limita la longitud analizada a la capacidad real del búfer tras redimensionarlo; rechaza longitudes incoherentes antes del procesamiento posterior.
- ✓No interpretes el CVSS como prueba de un ataque remoto por Internet: el commit requiere una configuración concreta de Opciones de desarrollador y del filtro SnoopLogger, además de un controlador Bluetooth malicioso.
- ✓Atribuye las severidades con precisión: Google clasifica la entrada del boletín como Crítica; la evaluación CISA ADP actual en NVD muestra CVSS 3.1 7,8 Alta.