
Exploit di lettura arbitraria di file non autenticata per Jenkins CVE-2024-23897, con supporto HTTPS e CSRF-crumb per bypassare le istanze rinforzate.
cve-2024-23897-crumb.py — lettura arbitraria di file non autenticata su
Jenkins <= 2.441 / LTS <= 2.426.2 (corretta in 2.442 / LTS 2.426.3).
I PoC più diffusi — exploit-db 51993, xaitax/CVE-2024-23897 e il template nuclei di ProjectDiscovery — sono solo HTTP e non inviano alcun CSRF crumb. Contro un'istanza Jenkins che:
falliscono con 403 No valid crumb was included in the request, che è
indistinguibile da "corretta" e produce un falso negativo.
Questa variante:
--httpJSESSIONID dalla pagina
di errore /cli non autenticata, quindi li riutilizza sul canale duplex;Effetto netto: rileva e sfrutta istanze indurite ma non corrette che gli strumenti pubblici segnalano come sicure.
python3 cve-2024-23897-crumb.py <host> [file] [--http] [--port N]
python3 cve-2024-23897-crumb.py jenkins.example.com
python3 cve-2024-23897-crumb.py jenkins.example.com /etc/shells
python3 cve-2024-23897-crumb.py 10.0.0.5 /etc/passwd --http --port 8080
Solo libreria standard di Python 3. Sola lettura: invia help "@<file>"; nulla
viene scritto, caricato o eseguito.
help restituisce la/le prima/e riga/e di un file — la prima riga nel messaggio
Too many arguments: più le righe successive nel campo (default: ...).
Funziona bene su file la cui prima riga contiene più campi o è lunga:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (IP interni, gateway, MAC)/proc/mounts (layout di container/storage)I file con una prima riga molto corta (es. /etc/hostname) ricadono in un
percorso di errore di autenticazione e non restituiscono nulla tramite help.
L'estrazione dell'intero file usa invece il comando connect-node, ma ciò
richiede che l'utente anonimo abbia Overall/Read — spesso non concesso, nel
qual caso la primitiva di lettura funziona comunque ma vengono restituite solo
le prime righe.
Puntalo solo verso host che sei autorizzato a testare. Lo stesso canale espone
comandi CLI che modificano lo stato (enable-job, reload-configuration, …);
questo script usa deliberatamente solo il percorso di sola lettura help.