
repo per CVE-2025-52413
Scopritore: Golden Ticket Labs
Fornitore: Particle
Data assegnazione: 12 agosto 2025 (MITRE)
Un overflow del buffer nel componente ble_control_request_channel.cpp di Particle Device OS v5.6.0 consente la sovrascrittura arbitraria di un puntatore a funzione a causa di una memcpy() senza limiti in un buffer di 64 byte.
Se abbinato alla chiamata adiacente del callback ThreadRunner::eventHandler_, questo permette un dirottamento affidabile del flusso di controllo e persino l'esecuzione simulata di payload ROP: contentReference[oaicite:0]{index=0}.
Percorso del codice vulnerabile:
// ble_control_request_channel.cpp
memcpy(buf_->data, &h, handshake_header_size); // copia senza limiti in un buffer di 64 byte
// thread_runner.cpp
if (r->eventHandler_) {
r->eventHandler_(ev); // puntatore a funzione chiamato dopo la corruzione della memoria adiacente
}
handshake_header_size è controllato dall'attaccante.buf_->data è un buffer grezzo di 64 byte, privo di controlli sui limiti.ThreadRunner memorizza un puntatore a funzione inline eventHandler_ direttamente adiacente al buffer.buf_->data consente la sovrascrittura di eventHandler_.A seconda della disposizione della build, il bug si manifesta come overflow basato su stack (CWE-121) o su heap (CWE-122), ma la causa principale è la copia non sicura della memoria in un buffer fisso accanto a un puntatore a funzione.
Classificazione CWE:
Gravità (CVSS v3.1)
Ciò riflette che è possibile ottenere l'esecuzione di codice arbitrario con un payload BLE appositamente predisposto, che richiede solo la prossimità dell'attaccante e nessun privilegio o interazione dell'utente.
⚠️ Non è incluso codice di exploit funzionante. Questa è un'illustrazione sicura.
Struttura concettuale del PoC:
struct ExploitTarget {
char buffer[64];
void (*eventHandler)(const char* msg); // bersaglio della sovrascrittura
};
char payload[128];
memset(payload, 'A', 64); // riempi il buffer
memcpy(payload + 64, &address_of_rop_shell, 8); // sovrascrivi il puntatore a funzione
// Reindirizza il flusso di controllo a:
void rop_shell(const char* msg) {
system("/bin/sh"); // payload ROP simulato
}
Il dump esadecimale ha confermato che il puntatore eventHandler_ è stato sovrascritto e reindirizzato.
handshake_header_size supera il buffer di 64 byte.eventHandler_ invoca il codice controllato dall'attaccante.Tutti i contenuti di questo repository sono forniti solo a scopo educativo e difensivo. Non sono inclusi payload di exploit. Non tentare di utilizzare queste tecniche contro sistemi senza autorizzazione esplicita.
Golden Ticket Labs
📧 [email protected]
🌐 goldenticketlabs.com