
référentiel pour CVE-2025-52413
Découvreur : Golden Ticket Labs
Fournisseur : Particle
Date d'attribution : 12 août 2025 (MITRE)
Un débordement de tampon dans le composant ble_control_request_channel.cpp de Particle Device OS v5.6.0 permet l'écrasement arbitraire d'un pointeur de fonction en raison d'un memcpy() sans limite dans un tampon de 64 octets.
Lorsqu'il est associé à l'invocation du callback adjacent ThreadRunner::eventHandler_, cela permet un détournement fiable du flux de contrôle et même l'exécution simulée d'une charge utile ROP :contentReference[oaicite:0]{index=0}.
Chemin de code vulnérable :
// 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 contrôlé par l'attaquant.
buf_->data est un tampon brut de 64 octets, sans vérification des limites.
ThreadRunner stocke un pointeur de fonction inline eventHandler_ directement adjacent au tampon.
Le débordement de buf_->data permet d'écraser eventHandler_.
Selon la disposition de la compilation, le bogue se manifeste comme un débordement basé sur la pile (CWE-121) ou sur le tas (CWE-122), mais la cause première est une copie mémoire non sécurisée dans un tampon fixe à côté d'un pointeur de fonction.
Classification CWE :
CWE-120 : Débordement de tampon classique
CWE-121 : Débordement de tampon basé sur la pile
CWE-122 : Débordement de tampon basé sur le tas
CWE-787 : Écriture hors limites
CWE-829 : Inclusion de pointeur de fonction dans une structure avec tampon
Sévérité (CVSS v3.1)
Score de base : 8,8 (Élevé)
Vecteur : AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Cela reflète qu'une exécution de code arbitraire peut être réalisée avec une charge utile BLE spécialement conçue, nécessitant uniquement la proximité de l'attaquant et aucun privilège ou interaction utilisateur.
Particle Device OS v5.6.0 — Vulnérable
v5.7.0 et plus récent — Corrigé silencieusement ([Gen 3] BLE : Correction du débordement de pile dans le rappel du minuteur BLE)
⚠️ Aucun code d'exploitation armé n'est inclus. Il s'agit d'une illustration sécurisée.
Structure conceptuelle de la 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
}
Le vidage hexadécimal a confirmé que le pointeur eventHandler_ a été écrasé et redirigé.
L'exploitation à distance est possible via un message de contrôle BLE spécialement conçu.
Le débordement se produit lors de l'analyse de la poignée de main, lorsque handshake_header_size dépasse le tampon de 64 octets.
Une fois corrompu, le callback eventHandler_ invoque le code contrôlé par l'attaquant.
Exécution de code arbitraire sur les appareils Particle affectés
Compromission totale de la confidentialité, de l'intégrité et de la disponibilité
Persistance potentielle et mouvement latéral dans les environnements compatibles BLE
Mettez à niveau vers Particle Device OS v5.7.0 ou plus récent, où le débordement a été corrigé.
Renforcez l'analyse BLE avec des vérifications des limites (memcpy_s ou équivalent).
Séparez les pointeurs de fonction des champs sujets aux débordements.
Compilez avec des canaris de pile, SafeStack et des sanitizers mémoire.
Rapport de laboratoire et simulation PoC
Tout le contenu de ce dépôt est fourni à des fins éducatives et défensives uniquement.
Aucune charge utile d'exploitation n'est incluse. N'essayez pas d'utiliser ces techniques contre des systèmes sans autorisation explicite.
Golden Ticket Labs
📧 [email protected]
🌐 goldenticketlabs.com