
Script de detección para CVE-2026-11374
Un script de detección para la precondición de explotación de CVE-2026-11374, una falla predecible de tickets SSO que permite la toma de control de cuentas sin autenticación en la suite ManageEngine AD360. Los cuatro productos dentro del alcance comparten el ManageEngineADSFramework:
| Producto | Compilación afectada | Compilación corregida |
|---|---|---|
| ADSelfService Plus | ≤ 6528 | 6529 |
| RecoveryManager Plus | ≤ 6320 | 6321 |
| M365 Manager Plus | ≤ 4816 | 4817 |
| ADAudit Plus | ≤ 8702 | 8703 |
En las compilaciones afectadas, el ticket SSO es simplemente System.currentTimeMillis() (una marca de tiempo predecible) muestreada en el inicio de sesión de la víctima, por lo que puede reproducirse mediante la cookie CUSTOM_SSO_TICKET para secuestrar esa sesión. La corrección reemplaza el ticket con UUID.randomUUID() (un identificador suficientemente aleatorio). La ruta de reproducción solo es alcanzable cuando el producto está integrado con AD360: ADSFilter la condiciona con isProductIntegrated(). Esa condición es la precondición que esta herramienta comprueba.
NOTA: este detector confirma la precondición, no la vulnerabilidad en sí. Un resultado
POTENTIALLY_AFFECTEDno es un veredicto de vulnerable confirmado; consulte más abajo para más información.
Sí. Está diseñado para uso en producción y en evaluaciones.
1700000000000, un valor en milisegundos lo suficientemente lejano en el pasado como para que nunca pueda estar en caché), por lo que nunca se recupera ninguna sesión. El servidor solo nos indica que borremos las cookies que enviamos.GET simple, y las únicas cookies afectadas son las desechables que envía la herramienta.El parche de CVE-2026-11374 solo cambió la forma en que se genera el ticket (milisegundos a UUID); no cambió la ruta de reproducción de cookies que esta sonda ejercita. Como resultado, una instalación parcheada responde byte por byte de manera idéntica a una vulnerable para cualquier solicitud no autenticada.
Lo que la herramienta puede hacer, sin autenticación y de forma no destructiva:
Lo que no puede hacer:
POTENTIALLY_AFFECTED significa que la precondición se cumple y que debe verificar el nivel de parche, no que el host esté confirmado como vulnerable.conf/product.conf localmente, o resolver activamente un ticket en vivo (explotación real, intencionalmente no implementada aquí).?build= de ADSSP a veces es la compilación real y a veces un marcador congelado que lee por debajo de la compilación corregida, por lo que un valor inferior al corregido es ambiguo y la herramienta lo marca como no concluyente. Un valor igual o superior a la compilación corregida sigue siendo una señal confiable de parcheado, ya que el marcador siempre es demasiado bajo para alcanzarlo.requests. Instale con
pip install requests.# un solo host (prefiera una URL o host:puerto; los puertos difieren según el producto)
./cve_2026_11374_check.py https://adssp.example.com:8888
# múltiples hosts (el esquema es opcional: se prueba https primero, luego http)
./cve_2026_11374_check.py host-a:8081 host-b:8365
# escanear una lista, un objetivo por línea (se permiten comentarios con '#'), salida compacta
./cve_2026_11374_check.py -f targets.txt --brief
# salida legible por máquina para canalizaciones
./cve_2026_11374_check.py -f targets.txt --json > results.json
Los puertos predeterminados difieren según el producto (ADSelfService Plus 8888, ADAudit Plus 8081, M365 Manager Plus 8365, RecoveryManager Plus 8090), así que pase una URL o host:puerto. Un host sin puerto usa 8888 por defecto.
| Bandera | Descripción |
|---|---|
targets | Uno o más host, host:puerto o https://host:puerto |
-f, --targets-file ARCHIVO | Leer objetivos desde un archivo (uno por línea; comentarios con #) |
--brief | Una línea alineada por objetivo, útil para escanear muchos hosts |
--json | Emitir resultados JSON estructurados |
--timeout SEGS | Tiempo de espera por solicitud (predeterminado: 15) |
--no-build | Omitir la solicitud adicional de número de compilación en un hallazgo positivo |
--no-color | Deshabilitar la salida de color (también respeta NO_COLOR y no-TTY) |
Una consola integrada con AD360 (verboso, el predeterminado). La segunda línea aclara que esto es la precondición y no un veredicto de vulnerable; la tercera es la pista de compilación de mejor esfuerzo:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[!] https://adssp.example.com:8888: POTENTIALLY_AFFECTED
ADSelfService Plus: integrado con AD360, ruta de reproducción CustomSSO activa - precondición cumplida. No confirmado como vulnerable; verifique el nivel de parche (compilación corregida 6529).
compilación: 6519 (por debajo de la corregida 6529 - no concluyente: ?build= puede ser un marcador obsoleto o un hotfix)
Una instalación independiente del mismo producto, donde la ruta de reproducción no está activa:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[+] https://adssp.example.com:8888: UNAFFECTED
ADSelfService Plus: independiente / no integrado con AD360 (sin limpieza), por lo que la ruta de reproducción no es alcanzable aquí. Verifique build >= 6529 de todos modos.
Escaneo de una lista con una línea alineada por host (--brief). El estado de salida es 1 si algún host es POTENTIALLY_AFFECTED; de lo contrario 0, lo cual es útil en scripts. La nota final muestra el producto identificado, además del número de compilación en un hallazgo:
$ ./cve_2026_11374_check.py -f targets.txt --brief; echo "exit: $?"
POTENTIALLY_AFFECTED https://host-a:8888 ADSelfService Plus 6519
POTENTIALLY_AFFECTED http://host-b:8081 ADAudit Plus 8530
UNAFFECTED http://host-c:8365 M365 Manager Plus
UNAFFECTED https://host-d:443
INCONCLUSIVE http://host-e:8888 ADSelfService Plus
ERROR host-f:8888 timeout
exit: 1