
repo for CVE-2025-52413
Descobridor: Golden Ticket Labs
Fornecedor: Particle
Data de Atribuição: 12 de agosto de 2025 (MITRE)
Um estouro de buffer no componente ble_control_request_channel.cpp do Particle Device OS v5.6.0 permite a sobrescrita arbitrária de ponteiro de função devido a um memcpy() sem limites em um buffer de 64 bytes.
Quando combinado com a invocação adjacente do callback ThreadRunner::eventHandler_, isso permite o sequestro confiável do fluxo de controle e até mesmo a execução simulada de payload ROP: contentReference[oaicite:0]{index=0}.
Caminho de código vulnerável:
// ble_control_request_channel.cpp
memcpy(buf_->data, &h, handshake_header_size); // copia sem limites para buffer de 64 bytes
// thread_runner.cpp
if (r->eventHandler_) {
r->eventHandler_(ev); // ponteiro de função chamado após corrupção de memória adjacente
}
handshake_header_size é controlado pelo atacante.
buf_->data é um buffer bruto de 64 bytes, sem verificação de limites.
ThreadRunner armazena um ponteiro de função inline eventHandler_ diretamente adjacente ao buffer.
O estouro de buf_->data permite sobrescrever eventHandler_.
Dependendo da configuração de compilação, o bug se manifesta como um estouro baseado em pilha (CWE-121) ou baseado em heap (CWE-122), mas a causa raiz é a cópia insegura de memória para um buffer fixo ao lado de um ponteiro de função.
Classificação CWE:
CWE-120: Estouro de Buffer Clássico
CWE-121: Estouro de Buffer Baseado em Pilha
CWE-122: Estouro de Buffer Baseado em Heap
CWE-787: Escrita Fora dos Limites
CWE-829: Inclusão de Ponteiro de Função em Struct com Buffer
Gravidade (CVSS v3.1):
Pontuação Base: 8.8 (Alta)
Vetor: AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Isso reflete que a execução de código arbitrário pode ser alcançada com um payload BLE especialmente criado, exigindo apenas proximidade do atacante e nenhum privilégio ou interação do usuário.
Particle Device OS v5.6.0 — Vulnerável
v5.7.0 e superiores — Corrigido silenciosamente ([Gen 3] BLE: Fix stack overflow in BLE timer callback)
⚠️ Nenhum código de exploração armado está incluído. Esta é uma ilustração segura.
Estrutura conceitual da PoC:
struct ExploitTarget {
char buffer[64];
void (*eventHandler)(const char* msg); // alvo de sobrescrita
};
char payload[128];
memset(payload, 'A', 64); // preenche buffer
memcpy(payload + 64, &address_of_rop_shell, 8); // sobrescreve ponteiro de função
// Redireciona fluxo de controle para:
void rop_shell(const char* msg) {
system("/bin/sh"); // payload ROP simulado
}
O dump hexadecimal confirmou que o ponteiro eventHandler_ foi sobrescrito e redirecionado.
A exploração remota é possível através de uma mensagem de controle BLE especialmente criada.
O estouro ocorre durante a análise do handshake, quando handshake_header_size excede o buffer de 64 bytes.
Uma vez corrompido, o callback eventHandler_ invoca código controlado pelo atacante.
Execução de código arbitrário em dispositivos Particle afetados
Comprometimento total da confidencialidade, integridade e disponibilidade
Potencial persistência e movimento lateral em ambientes habilitados para BLE
Atualize para o Particle Device OS v5.7.0 ou superior, onde o estouro foi corrigido.
Reforce a análise BLE com verificações de limites (memcpy_s ou equivalente).
Separe ponteiros de função de campos sujeitos a estouro.
Compile com canários de pilha, SafeStack e sanitizadores de memória.
Notas de Lançamento do Particle Device OS v5.7.0
Relatório de laboratório e simulação da PoC
Todo o conteúdo deste repositório é fornecido apenas para fins educacionais e defensivos. Nenhum payload de exploração está incluído. Não tente usar estas técnicas contra sistemas sem autorização explícita.
Golden Ticket Labs
📧 [email protected]
🌐 goldenticketlabs.com