Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/bishopfox/cve-2026-34908-check
ReconocimientoEscáneres de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónPruebas de Penetración
GitHubbishopfox/cve-2026-34908-check

CVE-2026-34908-check

Detecta de forma segura si un servidor UniFi OS es vulnerable a CVE-2026-34908

Ver Repositorio
6647hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Script de Detección de Cadena RCE sin Autenticación en UniFi OS Server

Un detector seguro para la cadena de ejecución remota de código sin autenticación en UniFi OS Server ≤ 5.0.6, divulgado en el Boletín de Aviso de Seguridad 064 de Ubiquiti:

CVEClaseRol en la cadena
CVE-2026-34908 / CVE-2026-34909Control de acceso inadecuado / path traversalOmisión de la puerta de autenticación (el punto de apoyo)
CVE-2026-34910Validación de entrada inadecuada → inyección de comandosRCE sin autenticación alcanzada mediante la omisión

Corregido en UniFi OS Server 5.0.8.

¿Es seguro ejecutarlo?

Sí. El detector está diseñado para uso en producción y evaluaciones:

  • No se ejecuta ningún comando. La sonda alcanza el endpoint vulnerable sin un parámetro requerido, por lo que el controlador rechaza la entrada faltante y confirmamos el error desde ese error de validación.
  • No se cambia el estado del objetivo. Cada solicitud es un simple GET.
  • Protección contra falsos positivos. Un veredicto de VULNERABLE requiere tanto que la omisión de autenticación haya alcanzado el controlador vulnerable como que una solicitud de referencia (mismo endpoint, sin omisión) haya sido correctamente rechazada con 401.

Cómo funciona

UniFi OS utiliza nginx para servir sus servicios, el cual aplica la autenticación mediante una subconsulta. Esa comprobación de autenticación trata cualquier solicitud cuya URI cruda comience con /api/auth/validate-sso/ como pública, pero nginx enruta hacia el backend usando la URI normalizada (descodifica percentualmente %2f→/ y colapsa ../). Una solicitud como:

GET /api/auth/validate-sso/..%2f..%2f..%2fproxy/users/api/v2/ucs/update/latest_package

es tratada como pública (prefijo crudo) pero enrutada al endpoint interno autenticado de actualización de paquetes (ruta normalizada). Sin pkg_name, ese endpoint responde query param pkg_name required — demostrando que la omisión funciona y el controlador vulnerable es alcanzable.

Respuesta de la sondaVeredicto
200 + marcadores de error del controladorVULNERABLE
400 (nginx rechaza la divergencia)PARCHADO (5.0.8+)
401, huella digital de UniFi OS presenteNO CONCLUSIVO (autenticación aplicada / omisión bloqueada)
401, sin huella digital de UniFi OSNO AFECTADO (no es un UniFi OS Server)
cualquier otra cosa, sin huella digital de UniFi OSNO AFECTADO (no es un UniFi OS Server)
cualquier otra cosa, huella digital de UniFi OS presenteNO CONCLUSIVO (respuesta inesperada)

El detector también envía una solicitud de referencia al mismo endpoint sin la omisión y requiere que devuelva 401 antes de declarar un host como vulnerable. La comprobación prueba el comportamiento vulnerable directamente — un veredicto de VULNERABLE significa que la omisión realmente alcanzó el sumidero.

Confirmar que el objetivo es UniFi OS antes de cualquier veredicto no vulnerable

Siempre que la sonda no confirme positivamente VULNERABLE o PARCHADO, el detector obtiene la página raíz y busca la huella digital del portal de administración de UniFi OS ( <title>UniFi OS</title>, window.UNIFI_OS_MANIFEST, id="portal-root", id="site-manager_portal-container"). Esto se aplica también a un 401: un host UniFi OS que aplique autenticación en la omisión es NO CONCLUSIVO, pero un proxy que no sea UniFi y que simplemente devuelva 401 para todo no lleva huella digital y se reporta como NO AFECTADO. Así que cada resultado "no vulnerable" se fundamenta en la huella digital: marcadores presentes → NO CONCLUSIVO; marcadores ausentes → NO AFECTADO (la CVE no aplica).

Requisitos

  • Python 3.7+, solo biblioteca estándar — sin paquetes de terceros.

Uso

# host único (puerto predeterminado 11443)
./cve_2026_34908_check.py 192.168.1.10

# puerto explícito / formularios URL
./cve_2026_34908_check.py host-a:11443 https://host-b

# escanear una lista, un objetivo por línea (se permiten comentarios '#'), salida compacta
./cve_2026_34908_check.py -f targets.txt --brief

# salida legible por máquina para pipelines
./cve_2026_34908_check.py -f targets.txt --json > results.json

Opciones

IndicadorDescripción
targetsUno o más host, host:port, o https://host:port
-f, --targets-file ARCHIVOLeer objetivos desde un archivo (uno por línea; comentarios #)
--briefUna sola línea alineada por objetivo — ideal para escanear muchos hosts
--jsonEmitir resultados JSON estructurados
--timeout SEGSTiempo de espera por solicitud (predeterminado: 10)
--no-colorDeshabilitar salida coloreada (también respeta NO_COLOR y no TTY)

Ejemplos

Una consola vulnerable (detallado, el predeterminado). La segunda línea es el detalle del veredicto; el marcador [!] y VULNERABLE se renderizan en rojo en una TTY:

$ ./cve_2026_34908_check.py 192.168.1.10
[!] 192.168.1.10:11443: VULNERABLE
      auth bypass reached the vulnerable handler (no command executed); baseline correctly 401

Una consola parchada (5.0.8+):

$ ./cve_2026_34908_check.py 192.168.1.11
[+] 192.168.1.11:11443: PARCHADO
      nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior

Un host UniFi OS confirmado que la sonda no pudo clasificar → NO CONCLUSIVO. La línea de detalle distingue los dos casos (autenticación aplicada vs. respuesta inesperada):

$ ./cve_2026_34908_check.py 192.168.1.12 192.168.1.13
[?] 192.168.1.12:11443: NO CONCLUSIVO
      bypass blocked / auth enforced (HTTP 401) on a confirmed UniFi OS host — not confirmed vulnerable
[?] 192.168.1.13:11443: NO CONCLUSIVO
      UniFi OS detected, but probe returned an unexpected response: HTTP 302 text/html

Un host que no es UniFi OS en absoluto → NO AFECTADO (el aviso no aplica):

$ ./cve_2026_34908_check.py 203.0.113.9:443
[-] 203.0.113.9:443: NO AFECTADO
      no UniFi OS web fingerprint on / (probe HTTP 404) — target is not a UniFi OS Server

Escanear una lista, una línea alineada por host (--brief). El código de salida es 1 si algún host es VULNERABLE, si no 0 — útil en scripts:

$ ./cve_2026_34908_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE    192.168.1.10:11443
PARCHADO      192.168.1.11:11443
NO CONCLUSIVO 192.168.1.12:11443
NO AFECTADO   203.0.113.9:443
ERROR         10.0.0.1:11443  timeout
exit: 1

Salida legible por máquina para pipelines (--json). Cada resultado lleva el verdict más el bypass.state/bypass.detail detrás de él; los resultados ERROR llevan un campo error en lugar de bypass:

$ ./cve_2026_34908_check.py 192.168.1.10 192.168.1.11 10.0.0.1 --json
[
  {
    "target": "192.168.1.10:11443",
    "bypass": {
      "state": "vulnerable",
      "detail": "auth bypass reached the vulnerable handler (no command executed); baseline correctly 401"
    },
    "verdict": "VULNERABLE"
  },
  {
    "target": "192.168.1.11:11443",
    "bypass": {
      "state": "patched",
      "detail": "nginx rejected the normalized-path divergence (HTTP 400) — 5.0.8+ behavior"
    },
    "verdict": "PARCHADO"
  },
  {
    "target": "10.0.0.1:11443",
    "verdict": "ERROR",
    "error": "timeout"
  }
]

Veredictos

Descargar herramienta