
CVE-2026-11374-check — Updated!
Script di rilevamento per CVE-2026-11374
Script di rilevamento della precondizione CVE-2026-11374 ManageEngine AD360
Uno script di rilevamento per la precondizione di sfruttamento di CVE-2026-11374, una falla del ticket SSO prevedibile che porta all'acquisizione non autenticata di account nell'intera suite ManageEngine AD360. I quattro prodotti interessati condividono il ManageEngineADSFramework:
| Prodotto | Build vulnerabile | Build corretta |
|---|---|---|
| ADSelfService Plus | ≤ 6528 | 6529 |
| RecoveryManager Plus | ≤ 6320 | 6321 |
| M365 Manager Plus | ≤ 4816 | 4817 |
| ADAudit Plus | ≤ 8702 | 8703 |
Nelle build vulnerabili, il ticket SSO è semplicemente System.currentTimeMillis() (un timestamp prevedibile) campionato al login della vittima, quindi può essere riutilizzato tramite il cookie CUSTOM_SSO_TICKET per dirottare la sessione. La correzione sostituisce il ticket con UUID.randomUUID() (un identificatore sufficientemente casuale). Il percorso di replay è raggiungibile solo quando il prodotto è integrato con AD360: ADSFilter lo vincola a isProductIntegrated(). Questa condizione è la precondizione che questo strumento verifica.
NOTA: questo rilevatore conferma la precondizione, non la vulnerabilità stessa. Un risultato
POTENTIALLY_AFFECTEDnon è un verdetto di vulnerabilità confermata — vedi sotto per maggiori informazioni.
È sicuro eseguirlo?
Sì. È progettato per l'uso in produzione e per valutazioni.
- Non viene sfruttato nulla. La sonda invia un ticket SSO non valido (
1700000000000, un valore in millisecondi sufficientemente passato da non poter mai essere presente in cache), quindi non viene mai recuperata alcuna sessione. Il server ci dice solo di cancellare i cookie che abbiamo inviato. - Nessuna modifica allo stato del target. Ogni richiesta è una semplice
GET, e gli unici cookie coinvolti sono quelli usa-e-getta inviati dallo strumento. - Nessun brute force o risoluzione di sessione. Lo strumento non tenta la risoluzione attiva del ticket-timestamp che dimostrerebbe la sfruttabilità; quella è sfruttamento piuttosto che rilevamento, ed è fuori dall'ambito qui (vedi Limitazioni).
Cosa può e cosa non può dirti
La patch di CVE-2026-11374 ha modificato solo il modo in cui viene generato il ticket (da millisecondi a UUID); non ha cambiato il percorso di cookie-replay che questa sonda esercita. Di conseguenza, un'installazione patchata risponde in modo identico byte-per-byte a una vulnerabile per qualsiasi richiesta non autenticata.
Cosa può fare lo strumento, senza autenticazione e in modo non distruttivo:
- Confermare che un prodotto in scope raggiungibile ha attivo il percorso di cookie-replay CustomSSO (cioè è integrato con AD360), che è la precondizione di sfruttamento di CVE-2026-11374.
- Identificare quale dei quattro prodotti sia, tramite il cookie di sessione specifico per prodotto.
- Leggere al meglio il numero di build di un asset come suggerimento. Questo è disponibile su ADSelfService Plus, ADAudit Plus e M365 Manager Plus; non disponibile su RecoveryManager Plus.
Cosa non può fare:
- Distinguere vulnerabile da patchato. Non esiste un segnale sicuro, passivo e non autenticato per farlo. Un risultato
POTENTIALLY_AFFECTEDsignifica che la precondizione è soddisfatta e dovresti verificare il livello di patch, non che l'host sia confermato vulnerabile. - Confermare la sfruttabilità. Dimostrare che un host è effettivamente sfruttabile richiede osservare il formato di un ticket generato (un numero a 13 cifre è vulnerabile, un UUID è patchato, entrambi richiedono visibilità autenticata o direttamente sull'host), leggere
conf/product.conflocalmente, o risolvere attivamente un ticket attivo (vera sfruttamento, volutamente non implementato qui). - Fidarsi completamente di un numero di build ADSelfService Plus inferiore alla soglia corretta. Il
?build=di ADSSP a volte è la build reale e a volte un segnaposto congelato che riporta un valore inferiore alla build corretta, quindi un valore sotto la soglia è ambiguo e lo strumento lo segna come inconcludente. Un valore pari o superiore alla build corretta è comunque un segnale affidabile di patch, poiché il segnaposto è sempre troppo basso per raggiungerlo.
Requisiti
- Python 3.7+ e la libreria
requests. Installa conpip install requests.
Utilizzo
# single host (prefer a URL or host:port; ports differ per product)
./cve_2026_11374_check.py https://adssp.example.com:8888
# multiple hosts (scheme optional: https is tried first, then http)
./cve_2026_11374_check.py host-a:8081 host-b:8365
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_11374_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_11374_check.py -f targets.txt --json > results.json
Le porte predefinite variano a seconda del prodotto (ADSelfService Plus 8888, ADAudit Plus 8081, M365 Manager Plus 8365, RecoveryManager Plus 8090), quindi passa un URL o host:port. Un host semplice usa per impostazione predefinita 8888.
Opzioni
| Flag | Descrizione |
|---|---|
targets | Uno o più host, host:port, o https://host:port |
-f, --targets-file FILE | Legge i target da un file (uno per riga; commenti #) |
--brief | Una singola riga allineata per target, utile per scansionare molti host |
--json | Emette risultati JSON strutturati |
--timeout SECS | Timeout per richiesta (predefinito: 15) |
--no-build | Salta la richiesta aggiuntiva del numero di build in caso di riscontro positivo |
--no-color | Disabilita l'output colorato (rispetta anche NO_COLOR e i non-TTY) |
Esempi
Una console integrata AD360 (verbose, l'impostazione predefinita). La seconda riga chiarisce che questa è la precondizione e non un verdetto di vulnerabilità; la terza è l'indicazione della build con il massimo sforzo possibile:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[!] https://adssp.example.com:8888: POTENTIALLY_AFFECTED
ADSelfService Plus: AD360-integrated, CustomSSO replay path active - precondition met. Not confirmed vulnerable; verify patch level (fixed build 6529).
build: 6519 (below fixed 6529 - inconclusive: ?build= may be a stale placeholder or a hotfix)
Un'installazione standalone dello stesso prodotto, dove il percorso di replay non è attivo:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[+] https://adssp.example.com:8888: UNAFFECTED
ADSelfService Plus: standalone / not AD360-integrated (no cleanup), so the replay path isn't reachable here. Verify build >= 6529 regardless.
Scansione di una lista con una riga allineata per host (--brief). Lo stato di uscita è 1 se un qualsiasi host risulta POTENTIALLY_AFFECTED, altrimenti 0, il che è comodo negli script. La nota finale mostra il prodotto identificato, più il numero di build in caso di riscontro:
$ ./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
Output leggibile da macchina (--json). Ogni risultato include il verdict, lo state e il detail sottostanti, il product identificato e — in caso di riscontro — un oggetto build: build è il numero trovato, fixed_build la soglia per quel prodotto, patch_hint la valutazione direzionale (likely_patched per valori pari o superiori alla build corretta, altrimenti inconclusive), e note una breve spiegazione: