
repositorio para CVE-2025-52413
Descubridor: Golden Ticket Labs
Proveedor: Particle
Fecha asignada: 12 de agosto de 2025 (MITRE)
Un desbordamiento de búfer en el componente ble_control_request_channel.cpp de Particle Device OS v5.6.0 permite sobrescribir un puntero de función arbitrario debido a un memcpy() sin límites en un búfer de 64 bytes.
Cuando se combina con la invocación adyacente de la retrollamada ThreadRunner::eventHandler_, esto permite el secuestro fiable del flujo de control e incluso la ejecución simulada de cargas útiles ROP:contentReference[oaicite:0]{index=0}.
Ruta de código vulnerable:
// ble_control_request_channel.cpp
memcpy(buf_->data, &h, handshake_header_size); // unbounded copy into 64-byte buffer
// thread_runner.cpp
if (r->eventHandler_) {
r->eventHandler_(ev); // function pointer called after adjacent memory corruption
}
handshake_header_size está controlado por el atacante.
buf_->data es un búfer bruto de 64 bytes, sin comprobaciones de límites.
ThreadRunner almacena un puntero de función en línea eventHandler_ directamente adyacente al búfer.
El desbordamiento de buf_->data permite sobrescribir eventHandler_.
Dependiendo de la disposición de la compilación, el fallo se manifiesta como un desbordamiento basado en pila (CWE-121) o basado en montón (CWE-122), pero la causa raíz es la copia insegura de memoria en un búfer fijo junto a un puntero de función.
Clasificación CWE:
CWE-120: Desbordamiento de búfer clásico
CWE-121: Desbordamiento de búfer basado en pila
CWE-122: Desbordamiento de búfer basado en montón
CWE-787: Escritura fuera de los límites
CWE-829: Inclusión de un puntero de función en una estructura con búfer
Severidad (CVSS v3.1)
Puntuación base: 8.8 (Alta)
Vector: AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Esto refleja que se puede lograr la ejecución de código arbitrario con una carga útil BLE manipulada, requiriendo únicamente la proximidad del atacante y sin privilegios ni interacción del usuario.
Versiones afectadas
Particle Device OS v5.6.0 — Vulnerable
v5.7.0 y versiones posteriores — Corregido silenciosamente ([Gen 3] BLE: Fix stack overflow in BLE timer callback)
Prueba de concepto (solo laboratorio)
⚠️ No se incluye código de exploit armado. Esta es una ilustración segura.
Estructura conceptual del PoC:
struct ExploitTarget {
char buffer[64];
void (*eventHandler)(const char* msg); // overwrite target
};
char payload[128];
memset(payload, 'A', 64); // fill buffer
memcpy(payload + 64, &address_of_rop_shell, 8); // overwrite function pointer
// Redirect control flow to:
void rop_shell(const char* msg) {
system("/bin/sh"); // simulated ROP payload
}
El volcado hexadecimal confirmó que el puntero eventHandler_ fue sobrescrito y redirigido.
Vector de ataque
La explotación remota es posible mediante un mensaje de control BLE especialmente diseñado.
El desbordamiento ocurre durante el análisis del handshake, cuando `handshake_header_size` supera el búfer de 64 bytes.
Una vez corrompido, la retrollamada `eventHandler_` invoca código controlado por el atacante.
Impacto
Ejecución de código arbitrario en los dispositivos Particle afectados
Compromiso total de la confidencialidad, integridad y disponibilidad
Posible persistencia y movimiento lateral en entornos habilitados para BLE
Mitigación
Actualice a Particle Device OS v5.7.0 o superior, donde se corrigió el desbordamiento.
Refuerce el análisis BLE con comprobaciones de límites (`memcpy_s` o equivalente).
Separe los punteros de función de los campos desbordables.
Compile con canarios de pila, SafeStack y sanitizadores de memoria.
Referencias
Notas de la versión de Particle Device OS v5.7.0
Informe de laboratorio y simulación del PoC
Licencia y aviso legal
Todo el contenido de este repositorio se proporciona únicamente con fines educativos y defensivos. No se incluyen cargas útiles de exploit. No intente utilizar estas técnicas contra sistemas sin autorización explícita.
Contacto
Golden Ticket Labs 📧 [email protected]
🌐 goldenticketlabs.com