
Exploit di esecuzione remota di codice pre-autenticazione per il router TP-Link Omada ER605 tramite il daemon del client DDNS (cmxddnsd)
Catena di exploit Proof-of-Concept (PoC) che prende di mira il demone client DDNS cmxddnsd del TP-Link Omada ER605 quando il dispositivo è configurato per utilizzare il servizio DDNS Comexe.
⚠️ Legale / Etica: questo repository è esclusivamente per ricerca sulla sicurezza autorizzata e riproduzione controllata in laboratorio. Non utilizzarlo contro sistemi che non possiedi o per i quali non hai il permesso esplicito di testare.
Questo PoC dimostra un approccio a catena che combina:
La catena corrisponde ai seguenti problemi pubblicati:
| CVE | Advisory ZDI | Tipo (come descritto da ZDI/NVD) | Ruolo di alto livello in una catena |
|---|---|---|---|
| CVE-2024-5244 | ZDI-24-503 | Affidamento sull'oscurità come sicurezza (i messaggi DDNS possono essere accessibili/contraffatti) | Consente di creare/contraffare messaggi DDNS dall'aspetto valido |
| CVE-2024-5243 | ZDI-24-502 | Buffer overflow nella gestione dei nomi DNS | Utilizzato per influenzare/avvelenare lo stato relativo ai nomi DNS e abilitare un percorso di leak per il bypass di ASLR |
| CVE-2024-5242 | ZDI-24-501 | Buffer overflow basato su stack nella gestione dei codici di errore DDNS | Utilizzato come primitiva di dirottamento del flusso di controllo per una RCE basata su ROP |
Nota: questo README allinea la descrizione CVE ↔ problema alla terminologia ZDI/NVD. La coreografia esatta dell'exploit può variare in base alla build del firmware e ai dettagli di riproduzione locale; vedere
exploit.pye le note di analisi in questo repository.
< ER605(UN)_V2_2.2.42.2.2ER605(UN)_V2_2.2.4 Build 20240119 (e versioni successive)ZDI descrive l'impatto come adiacente alla rete quando il DDNS Comexe è abilitato/configurato. In pratica, una riproduzione richiede tipicamente la capacità di osservare e influenzare a sufficienza il percorso del traffico DDNS/DNS del router per:
Questo repository evita intenzionalmente una guida operativa passo-passo per ottenere tale posizionamento al di fuori di un laboratorio controllato.
┌─────────────────┐ ┌─────────────────────────┐
│ TP-Link ER605 │ │ Attacker │
│ (cmxddnsd) │ │ (authorized lab setup) │
└───────┬─────────┘ └───────────┬─────────────┘
│ │
│ (1) DDNS message spoofing/impersonation │ CVE-2024-5244
│<-----------------------------------------│
│ │
│ (2) Parsing-time overflow affects DNS- │ CVE-2024-5243
│ name-related state; later leak occurs│
│ in DNS query sending path (e.g., │
│ sndDnsQuery) to bypass ASLR │
│<-----------------------------------------│
│ │
│ (3) Error-code overflow for control-flow │ CVE-2024-5242
│ hijack → ROP → system(command) │
│<-----------------------------------------│
Separazione fondamentale:
_chkPkt per codici di errore/gestione dei nomi DNS).exploit.py — Implementazione del PoC utilizzata per la riproduzione in laboratorio (richiede l'inserimento di costanti/offset specifici della build).README.md — Questo documento.Questo PoC richiede valori specifici della build (ad es. offset, posizioni dei gadget, interpretazione del leak) che dipendono dal firmware target e dalla libc. Questi valori sono intenzionalmente lasciati come segnaposto e devono essere derivati tramite analisi della build testata.
Esempi di segnaposto (vedi exploit.py):
system()Un anti-pattern ricorrente nella logica di parsing è la copia di dati di campo controllati dall'attaccante utilizzando una lunghezza derivata dal delimitatore senza vincolarla adeguatamente alla dimensione del buffer di destinazione (concettualmente):
char *end = strchr(ptr, '\x01'); // delimitatore
int len = end - ptr; // lunghezza influenzata dall'attaccante
memcpy_or_strncpy(dest, ptr, len); // manca il bounds check -> overflow
Il PoC utilizza una forma di gadget MIPS compatibile con i delay slot:
move $t9, $s0
jalr $t9
move $a0, $s1 ; delay slot
Controllando $s0 e $s1 tramite sovrascrittura dei registri salvati, ciò consente una sequenza di chiamata system(command) compatta.
La costruzione pratica del payload è vincolata da:
\x01), eVedere exploit.py per i vincoli esatti utilizzati in questa riproduzione.
Questo codice e questa documentazione sono forniti esclusivamente a scopo educativo e per ricerca sulla sicurezza autorizzata. Qualsiasi utilizzo senza permesso esplicito è proibito e potrebbe essere illegale.