
Detectar de forma segura si un controlador de UniFi Network Application es vulnerable a CVE-2026-22557
Detecte de forma segura si un controlador UniFi Network Application es vulnerable a CVE-2026-22557 sin causar ninguna interrupción. Consulte el artículo completo en el blog de Bishop Fox.
CVE-2026-22557 es una vulnerabilidad de path-traversal no autenticado en el portal cautivo de invitados de UniFi Network Application que permite a atacantes remotos leer archivos arbitrarios como el usuario del proceso del controlador (CVSS 10.0). La vulnerabilidad afecta a UniFi Network Application 10.1.85 y anteriores en la rama 10.1.x, y las versiones anteriores correspondientes en las ramas 10.2.x y 9.0.x. Ubiquiti publicó correcciones en 10.1.89, 10.2.97 y 9.0.118 (SAB-062).
El renderizador de página de error del portal de invitados lee el parámetro de solicitud page_error y lo utiliza textualmente
como una ruta relativa en el cargador de recursos del portal, sin validación. Cuando portal_customized: true está
establecido en el sitio consultado (la configuración que tiene cualquier portal cautivo personalizado, como una implementación de hotel, tienda o cafetería),
el cargador resuelve esa ruta contra el directorio del portal en disco, y la
ruta puede escapar de él.
Esta herramienta realiza pruebas de vulnerabilidad no destructivas mediante:
/status y compararla con las líneas de corrección de SAB-062page_error en /guest/<site>/wechat/sign con profundidades ../ de 1 a 8 contra un
nombre de archivo de doble rama, para determinar si el path-traversal se dispara en absolutofirmware.json) para determinar si la rama del sistema de archivos del portal personalizado está activaLa herramienta solicita solo el archivo de catálogo de tiempo de ejecución como oráculo de rama activa. No lee credenciales, material TLS, estado de la base de datos ni copias de seguridad, y no escribe ningún contenido de archivo en la salida estándar ni en disco. Solo se imprime el veredicto.
portal_customized: true en el sitio consultado devuelven el archivo de catálogo
a la profundidad calibrada, confirmando VULNERABLE.portal_customized: false en
el sitio consultado activan el path-traversal en el paso de calibración pero no devuelven contenido de disco en el paso
de confirmación → PARCIALMENTE EXPUESTO. El binario de la aplicación sigue siendo vulnerable; se requiere
parche incluso si este sitio no está en el estado explotable.NO VULNERABLE.NO EXPUESTO.git clone https://github.com/BishopFox/CVE-2026-22557-check
cd CVE-2026-22557-check
Se requiere Python 3.9+. La herramienta utiliza solo la biblioteca estándar de Python, por lo que no se necesita ningún paso de pip install.
Pruebe un controlador de UniFi Network Application en <TARGET>. Apunte la herramienta a la URL que llegue al
controlador; el manejador vulnerable se distribuye en el puerto de administración (predeterminado 8443/TCP) así como
en los puertos dedicados del portal de invitados (8843, 8880).
python3 cve_2026_22557_check.py <BASE_URL> [--site NOMBRE]
El slug de sitio predeterminado es default. Las implementaciones de UniFi con múltiples sitios configurados deben volver a ejecutar la
herramienta con --site <nombre> para cada uno. Un controlador es explotable tan pronto como cualquier sitio
tenga portal_customized: true.
Los ejemplos a continuación utilizan --brief para un resultado de una línea por host. Ejecute sin --brief para obtener el banner
completo, el progreso paso a paso y un bloque de resultados que incluye acciones de remediación recomendadas.
El controlador está en una compilación vulnerable y la condición previa del portal personalizado está activa para el sitio consultado, por lo que la ruta de lectura no autenticada es alcanzable.
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[VULNERABLE] https://192.168.1.100:8443 site=default
El controlador está en una compilación vulnerable, pero el sitio consultado no tiene portal_customized: true
habilitado, por lo que la condición previa de lectura de disco no se cumple para este sitio. El binario de la aplicación aún necesita ser
parcheado; otro sitio en el mismo controlador puede seguir estando en el estado explotable.
$ python3 cve_2026_22557_check.py https://192.168.1.100:8443 --brief
[PARTIAL] https://192.168.1.100:8443 site=default
El controlador está en una compilación corregida (10.1.89, 10.2.97, 9.0.118 o posterior), por lo que el path-traversal no se dispara en ninguna profundidad consultada.
$ python3 cve_2026_22557_check.py https://192.168.1.200:8443 --brief
[NOT VULNERABLE] https://192.168.1.200:8443 site=default
--site NOMBRE Slug de sitio de UniFi a sondear (predeterminado: "default")
--max-depth N Profundidad máxima de traversal ../ a intentar (predeterminado: 8)
--no-tls-recon Omitir visualización de sujeto/SAN del certificado TLS
--no-color Deshabilitar salida de color ANSI (también respeta la variable de entorno NO_COLOR)
--timeout N Tiempo de espera por solicitud en segundos (predeterminado: 20)
--brief Imprimir un resultado de una sola línea, sin banner ni pasos
Códigos de salida: 0 VULNERABLE, 1 parcialmente expuesto / no vulnerable / no expuesto, 2 error de transporte.
La herramienta solo puede devolver un veredicto VULNERABLE si se cumplen las siguientes condiciones:
/guest/* se distribuye en el puerto de administración
(8443) así como en los puertos dedicados del portal de invitados (8843, 8880); la herramienta solo sondea la URL que se le
proporciona.portal_customized: true en su configuración guest_access, que es la
condición previa para la ruta de código de lectura de disco. Un controlador con múltiples sitios es explotable si cualquier
sitio tiene esto habilitado.Si no se cumple alguna condición, la herramienta pasa a un veredicto más conservador. Un
resultado PARCIALMENTE EXPUESTO aún significa que la aplicación es vulnerable y debe ser parcheada; el sitio consultado
simplemente no expone la ruta de lectura de disco.