Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-11374-check — Script di rilevamento per CVE-2026-11374 | Kitploit
Strumenti/GitHubGitHub/bishopfox/cve-2026-11374-check
Strumenti DifensiviScanner di VulnerabilitàExploitSicurezza WebPenetration TestingThreat Intelligence
GitHubbishopfox/cve-2026-11374-check

CVE-2026-11374-check

Script di rilevamento per CVE-2026-11374

Vedi Repository
11603 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
# 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_AFFECTED` non è 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](#limitations)).

## 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_AFFECTED` significa 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.conf` localmente, 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`](https://pypi.org/project/requests/). Installa con `pip install requests`.

## Utilizzo

```bash
# 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:

```console
$ ./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:

```console
$ ./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:

```console
$ ./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:

```console
$ ./cve_2026_11374_check.py https://host-b:8081 --json
[
  {
    "target": "https://host-b:8081",
    "state": "potentially_affected",
    "detail": "ADAudit Plus: AD360-integrated, CustomSSO replay path active - precondition met ...",
    "product": "ADAudit Plus",
    "build": { "build": "8530", "fixed_build": "8703", "patch_hint": "inconclusive", "note": "below fixed 8703 - inconclusive: may be a hotfix" },
    "verdict": "POTENTIALLY_AFFECTED"
  }
]
```

## Verdetti

| Verdetto | Significato |
|---------|-------------|
| `POTENTIALLY_AFFECTED` | Prodotto in scope integrato con AD360; il percorso di cookie-replay CustomSSO è attivo, quindi la precondizione di sfruttamento di CVE-2026-11374 è soddisfatta. Non è un verdetto di vulnerabilità confermata; verifica il livello di patch (vedi i passaggi successivi). |
| `UNAFFECTED` | Il percorso di replay non è raggiungibile. Uno qualsiasi dei seguenti: un prodotto in scope standalone (non integrato con AD360 — anche se diventerebbe raggiungibile se integrato in seguito, quindi verifica comunque la build); un prodotto ManageEngine del framework ADS che non è uno dei quattro in scope; oppure nessun prodotto in scope nella risposta (non uno dei quattro prodotti CVE-2026-11374, o un proxy che rimuove il cookie di sessione). |
| `INCONCLUSIVE` | Un `HTTP 400` — probabilmente il blocco del rate-limit IAM che maschera il segnale; riprova dopo ~60 s. |
| `ERROR` | Errore di connessione/timeout/TLS. |

## Codici di uscita

| Codice | Significato |
|------|-------------|
| `0` | Nessun target ha restituito `POTENTIALLY_AFFECTED` |
| `1` | Almeno un target risulta `POTENTIALLY_AFFECTED` |
| `2` | Errore di utilizzo (argomenti non validi / file dei target illeggibile) |

## Come funziona

Invia un ticket non valido più un tag applicazione a qualsiasi URL CustomSSO (`*.do`):

```text
GET /AppsHome.do
Cookie: CUSTOM_SSO_TICKET=1700000000000; CUSTOM_SSO_APP_TAG_NAME=AD360
```

Su un'installazione integrata AD360, la catena `ADSFilter → CustomSSOFilter → CookieSSOImpl` esegue il suo ramo di risoluzione (il tag indica un prodotto diverso, quindi `appName != prodName`), non riesce a risolvere il ticket fittizio e emette header di risposta di pulizia dei cookie:

```text
Set-Cookie: CUSTOM_SSO_TICKET=removed; Max-Age=0; ...
Set-Cookie: CUSTOM_SSO_APP_NAME=removed; Max-Age=0; ...
Set-Cookie: CUSTOM_SSO_APP_TAG_NAME=removed; Max-Age=0; ...
```

Un'installazione standalone non esegue mai quel percorso e non emette alcuna pulizia. Il prodotto viene identificato dal suo cookie di sessione Tomcat fisso per prodotto (`JSESSIONIDADSSP` per ADSelfService Plus, e così via), che viene impostato in ogni risposta. Il controllo si basa sugli header piuttosto che sul codice di stato, poiché un ADSSP integrato restituisce un `302` mentre ADAudit, M365 e RMP restituiscono `200` alla stessa sonda.

| Risposta della sonda | Verdetto |
|----------------|---------|
| header di pulizia e cookie di un prodotto in scope noto | `POTENTIALLY_AFFECTED` |
| cookie di prodotto, nessuna pulizia, stato ≠ 400 | `UNAFFECTED` (standalone / non integrato) |
| nessun cookie di prodotto in scope, stato ≠ 400 | `UNAFFECTED` (non uno dei quattro prodotti) |
| header di pulizia ma cookie di prodotto non riconosciuto | `UNAFFECTED` (ManageEngine, non in scope) |
| `HTTP 400` | `INCONCLUSIVE` (probabilmente il blocco rate-limit IAM; vedi Limitazioni) |

## Limitazioni

- `POTENTIALLY_AFFECTED` non è "vulnerabilità confermata". È la precondizione di sfruttamento. Poiché la patch non ha toccato questo percorso di codice, una build patchata risponde in modo identico, quindi devi confermare il livello di patch fuori banda (vedi i passaggi successivi). Questo è il limite massimo di ciò che un osservatore non autenticato può sapere.
- Nessuna conferma attiva. Lo strumento non tenta mai di risolvere un ticket reale, al tempo corrente. Questa tecnica può dimostrare positivamente che un host è vulnerabile, ma è uno sfruttamento attivo (dirotta una sessione live), è limitata dal throttling ed è probabilistica, e richiede una sessione attiva della vittima, quindi è esclusa da questo rilevatore.
- `HTTP 400` può essere un blocco rate-limit piuttosto che una risposta reale. Zoho IAM applica un throttle scorrevole per URL che limita un IP sorgente a circa 40 richieste per 60 s, quindi blocca quel percorso per ~60 s. Durante un blocco, le richieste restituiscono `HTTP 400` e il segnale di integrazione è mascherato. Lo strumento segnala questi casi come `INCONCLUSIVE`; riprova da quell'IP dopo circa un minuto.
- Dietro un proxy inverso, una console che rimuove o riscrive il cookie di sessione può essere segnalata erroneamente come `UNAFFECTED`. Conferma direttamente se ti aspetti un prodotto ManageEngine lì.
- I numeri di build sono suggerimenti, non verdetti. ADAudit (`?v=`) e M365 (`?bN=`) espongono sempre la build reale; il `?build=` di ADSSP a volte è reale e a volte un segnaposto congelato che riporta un valore inferiore alla build corretta, quindi un valore ADSSP sotto la soglia è ambiguo; RMP non ne espone nessuno. In ogni caso, una build pari o superiore alla build corretta indica fortemente che la patch è applicata, mentre un valore inferiore è inconcludente.

## Passaggi successivi per i difensori

Se un target risulta `POTENTIALLY_AFFECTED`, trattalo come esposto e meritevole di conferma, poi:

1. Conferma direttamente il livello di patch (lo strumento non può). Leggi `conf/product.conf` (`build_number`) sull'host e confrontalo con la build corretta per quel prodotto (ADSelfService Plus 6529, RecoveryManager Plus 6321, M365 Manager Plus 4817, ADAudit Plus 8703). Interpretalo in modo direzionale: una build pari o superiore alla build corretta è un forte indicatore che l'host è patchato, poiché la correzione UUID è in quel ramo. Una build inferiore alla build corretta è inconcludente piuttosto che prova di vulnerabilità, perché hotfix e backport fuori banda possono applicare la correzione UUID senza aumentare il numero di build; in tal caso, affidati al controllo del formato del ticket descritto sotto.
2. Controlla il formato del ticket generato se puoi accedere. Il cookie `CUSTOM_SSO_TICKET` non è `HttpOnly`, quindi dopo l'autenticazione puoi leggerne il valore: un numero a 13 cifre significa vulnerabile, un UUID significa patchato. Questo è il controllo positivo più chiaro.
3. Aggiorna alla build corretta (o successiva) su qualsiasi host vulnerabile o di cui non puoi confermare la patch. La correzione sostituisce il ticket prevedibile con un UUID casuale.
4. Cerca tentativi di sfruttamento. Sull'host, `serverOut_<date>.txt` registra il throttling come raffiche di:

   ```text
   IAMSecurityException ErrorCode: URL_ROLLING_THROTTLES_LIMIT_EXCEEDED,
   RequestURI: "/showLogin.cc", RemoteAddr: <source IP>
   ```

   Un picco di `URL_ROLLING_THROTTLES_LIMIT_EXCEEDED` sui percorsi di dispatch SSO/login da un singolo IP sorgente è un forte indicatore di brute force sui ticket. Inoltre, esamina i login riusciti recenti e l'attività delle sessioni per individuare segni di takeover.
5. Riduci l'esposizione nel frattempo. Limita l'accesso di rete alla suite AD360 (non dovrebbe essere esposta a internet) e, se il percorso di replay non è necessario, disabilitare l'integrazione CustomSSO rimuove completamente la precondizione.

## Rimedio

Aggiorna il prodotto interessato almeno alla build corretta (ADSelfService Plus 6529, RecoveryManager Plus 6321, M365 Manager Plus 4817, ADAudit Plus 8703) o successiva. La correzione sostituisce il ticket SSO prevedibile `System.currentTimeMillis()` con `UUID.randomUUID()`.

## Licenza

Questo codice è distribuito sotto una [licenza MIT](https://github.com/bishopfox/cve-2026-11374-check/blob/main/LICENSE).

## Disclaimer legale

L'uso di questo strumento per attaccare target senza previo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo programma.

## Vedi anche

- [NVD: CVE-2026-11374](https://nvd.nist.gov/vuln/detail/CVE-2026-11374)
- Service pack di ManageEngine:
  [ADSelfService Plus](https://www.manageengine.com/products/self-service-password/service-pack.html) ·
  [RecoveryManager Plus](https://www.manageengine.com/ad-recovery-manager/service-pack.html) ·
  [M365 Manager Plus](https://www.manageengine.com/microsoft-365-management-reporting/service-pack.html) ·
  [ADAudit Plus](https://www.manageengine.com/products/active-directory-audit/service-pack.html)
- [Blog di Bishop Fox: Analisi tecnica completa](https://bishopfox.com/blog/millisecond-of-predictability-why-cve-2026-11374-hard-to-exploit)
Scarica lo strumento