Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2024-23897-jenkins-poc — Riproduzione e analisi Docker autonome di CVE-2024-23897, la lettura arbitraria di file della CLI di Jenkins tramite l'espansione degli argomenti con sintassi @ di args4j. | Kitploit
Strumenti/GitHubGitHub/rivaedoardo62-boop/cve-2024-23897-jenkins-poc
Analisi delle VulnerabilitàExploitSicurezza WebPenetration TestingPaper e RicercaApprendimento e Formazione
GitHubrivaedoardo62-boop/cve-2024-23897-jenkins-poc

cve-2024-23897-jenkins-poc

Riproduzione e analisi Docker autonome di CVE-2024-23897, la lettura arbitraria di file della CLI di Jenkins tramite l'espansione degli argomenti con sintassi @ di args4j.

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
Vedi Repository
2 mesi faNon ancora revisionato

CVE-2024-23897: Lettura arbitraria di file in Jenkins (sintassi @ di args4j)

Una riproduzione autonoma e completamente locale di CVE-2024-23897, la lettura arbitraria di file critica (punteggio base CVSS 3.1: 9.8) nella CLI di Jenkins. Il progetto avvia due stack Docker che differiscono solo per la versione minore di Jenkins, esegue lo stesso proof of concept su entrambi e mostra la vulnerabilità che si attiva sul controller non aggiornato e che rimane silente su quello aggiornato.

Tutto è gestito da un singolo programma Python, poc.py. L'harness si limita a orchestrare l'ambiente (Docker Compose, il client ufficiale jenkins-cli.jar e la cattura integrale dell'output). La vulnerabilità stessa risiede nel codice Java di Jenkins e non viene mai reimplementata qui.

Un'analisi scritta completa, inclusa la revisione della patch e la scomposizione del CVSS, si trova in report/report.pdf.

La vulnerabilità in un paragrafo

La CLI di Jenkins costruisce il suo parser degli argomenti con la libreria args4j. args4j ha una funzionalità chiamata expandAtFiles, controllata dal flag atSyntax e abilitata per impostazione predefinita, che riscrive qualsiasi argomento della forma @/path/to/file nel contenuto di quel file prima che il comando venga eseguito. Il file viene aperto con i privilegi del processo del controller Jenkins. Poiché tutti e tre i trasporti CLI (HTTP, WebSocket, SSH) confluiscono nello stesso parser, qualsiasi client che possa inviare un qualsiasi comando CLI può leggere file arbitrari dal controller. La correzione (commit 554f0378) aggiunge una costante ALLOW_AT_SYNTAX che per impostazione predefinita è false, disattivando l'espansione.

Non si tratta di path traversal classico: non c'è alcun ../ né una directory di base da cui uscire. Il percorso viene aperto direttamente. Sull'asse dell'esito è una lettura arbitraria di file; sull'asse del meccanismo è espansione di argomenti.

Struttura del repository

root@kitploit:~
cve-2024-23897-jenkins-poc/
  README.md                      # this file
  LICENSE
  poc.py                         # Python reproduction harness (all subcommands)
  Dockerfile.vuln                # jenkins/jenkins:2.426.2-lts + matrix-auth
  Dockerfile.fix                 # jenkins/jenkins:2.426.3-lts + matrix-auth
  docker-compose.vuln.yml        # jenkins-vuln + attacker-vuln
  docker-compose.fix.yml         # jenkins-fix  + attacker-fix
  init.groovy.d/
    01-create-users.groovy       # bootstraps admin + readuser via matrix-auth
  evidence/
    docker-versions.txt          # host Docker + Compose versions
    output-vulnerable.txt        # captured during `poc.py exploit`
    output-fixed.txt             # captured during `poc.py verify-fix`
  report/
    report.pdf                   # full written analysis
    report.tex                   # LaTeX source (self-contained, no external figures)

Prerequisiti

RequisitoNote

Nessun JDK è richiesto sull'host. Java viene eseguito all'interno del container dell'attaccante. I file compose impostano platform: linux/amd64 così le immagini si comportano in modo identico su Apple Silicon; questa è una scelta operativa e non tocca la vulnerabilità, che è indipendente dalla piattaforma.

Come eseguire

Dall'interno del repository:

root@kitploit:~
python3 poc.py up-vuln       # build and start the vulnerable stack, fetch the CLI jar
python3 poc.py place-proof   # write the harmless marker file inside the controller
python3 poc.py exploit       # run the PoC, writes evidence/output-vulnerable.txt
python3 poc.py up-fix        # tear down vuln, build and start the patched stack
python3 poc.py verify-fix    # run the same PoC, writes evidence/output-fixed.txt
python3 poc.py teardown      # stop and remove both stacks

La prima esecuzione richiede alcuni minuti (pull delle immagini più installazione del plugin). Le esecuzioni successive sono molto più veloci.

poc.py exploit ha esito positivo quando la stringa marcatore POC-PROOF-LINE appare nell'output catturato (la fuga è avvenuta). poc.py verify-fix ha esito positivo nella condizione opposta: il marcatore deve essere assente. Entrambi i sottocomandi escono con codice non zero in caso di fallimento, quindi i due file di evidenza insieme al loro stato di uscita costituiscono essi stessi il risultato del test.

Architettura

Entrambi i file compose eseguono gli stessi due servizi su una rete Docker: un Jenkins controller (la vittima) e un piccolo container attaccante eclipse-temurin:17-jre. poc.py viene eseguito sull'host e pilota Docker tramite subprocess, ma l'invocazione vera e propria java -jar jenkins-cli.jar ... viene eseguita all'interno del container attaccante. L'attaccante non ha accesso al volume dati di Jenkins; raggiunge il controller solo tramite la rete, come farebbe un attaccante remoto.

Modello di autorizzazione

init.groovy.d/01-create-users.groovy usa il plugin matrix-auth per creare due account con permessi volutamente diversi:

Questo riproduce esattamente la suddivisione dell'avviso ufficiale, Overall/Read contro anonymous, invece della più generica "qualsiasi utente autenticato contro anonymous" che l'impostazione predefinita del core di Jenkins avrebbe prodotto. La fuga completa del file è quindi attribuibile alla sola CVE, non alle prerogative amministrative.

Risultati

Il PoC esegue quattro contesti contro ciascun controller. La tabella seguente riassume il confronto A/B; le catture complete sono in evidence/.

L'unica variabile che cambia tra le due colonne è la versione minore di Jenkins e, attraverso essa, l'impostazione predefinita di atSyntax successiva alla patch. I risultati opposti attribuiscono quindi il cambiamento di comportamento alla correzione del parser nel commit 554f0378.

Perché Docker non risolve il bug

Eseguire Jenkins in un container non è una mitigazione. Il parser legge i file con i privilegi della JVM di Jenkins e questi file risiedono nello stesso filesystem del container che contiene l'archivio delle credenziali. Il confine del container protegge l'host dal processo Jenkins, non il processo Jenkins da se stesso. La configurazione Docker qui presente è una sandbox dimostrativa, nient'altro.

Mitigazione

Aggiornare a una release con patch: 2.442 (weekly), oppure 2.426.3 o 2.440.1 (LTS), tutte pubblicate il 24 gennaio 2024. Se un aggiornamento immediato non è possibile, lasciare la proprietà di sistema hudson.cli.CLICommand.allowAtSyntax non impostata (il suo valore predefinito), che mantiene ALLOW_AT_SYNTAX su false e disabilita l'espansione. Disabilitare i singoli trasporti CLI è solo una misura parziale, poiché tutti e tre convergono sullo stesso parser.

Nota sulla sicurezza

Tutto il lavoro si svolge in un ambiente Docker locale contro un innocuo file marcatore di tre righe (/tmp/poc-proof.txt) che l'harness crea da sé. Nessuna istanza Jenkins pubblica viene scansionata o contattata, e nessun segreto reale come secrets/master.key o credentials.xml viene mai letto.

Riferimenti

  • Avviso di sicurezza Jenkins 2024-01-24 (SECURITY-3314, SECURITY-3315): https://www.jenkins.io/security/advisory/2024-01-24/
  • Voce NVD per CVE-2024-23897: https://nvd.nist.gov/vuln/detail/CVE-2024-23897
  • Commit di correzione 554f0378 su jenkinsci/jenkins: https://github.com/jenkinsci/jenkins/commit/554f03782057c499c49bbb06575f0d28b5200edb
  • args4j (ParserProperties.withAtSyntax): https://github.com/kohsuke/args4j
  • Analisi di Zscaler ThreatLabz (da lettura di file a RCE): https://www.zscaler.com/blogs/security-research/jenkins-arbitrary-file-leak-vulnerability-cve-2024-23897-can-lead-rce
Scarica lo strumento
Docker Engine 24 o successivola versione esatta utilizzata è registrata in evidence/docker-versions.txt
Docker Compose v2fornito come plugin integrato docker compose
Python 3.8 o successivosolo libreria standard, nessuna necessità di pip install
Spazio su discocirca 1,5 GB per due immagini Jenkins, l'immagine temurin e il plugin matrix-auth
AccountPermessiRuolo nel PoC
adminJenkins.ADMINISTEResiste solo per soddisfare "almeno un admin", mai usato per attaccare
readusersolo Jenkins.READ (Overall/Read)l'attaccante autenticato
anonymousnessunol'attaccante non autenticato
OsservazioneVulnerabile 2.426.2Aggiornato 2.426.3
gestione del token @espanso nel contenuto del filetrattato come stringa letterale
readuser + connect-nodedivulgazione completa del file (3 righe su 3)nessuna divulgazione
anonymous + who-am-i / helpfuga parziale (prima riga) tramite errore del parser prima del gate di autenticazionenessuna divulgazione
marcatore POC-PROOF-LINE nell'outputpresenteassente