
CVE-2024-27198 e CVE-2024-27199 PoC - RCE, Creazione account amministratore, Enumerazione utenti, Informazioni sul server
Sfruttamento di CVE-2024-27198 e CVE-2024-27199
RCity è uno script Python che interagisce con un server TeamCity vulnerabile. La CVE consente la creazione non autorizzata di account amministratore, bypassando i 403 sul dominio. Consente inoltre di ottenere RCE tramite il percorso Debug/Processes.
Per usare lo script, devi fornire l'URL del server TeamCity di destinazione come argomento da riga di comando con l'opzione -t o --target:
python3 RCity.py -t http://teamcity.com:8111
Puoi aumentare la verbosità dell'output con l'opzione -v o --verbose:
python3 RCity.py -t http://teamcity.com:8111 --verbose
Puoi inviare comandi singoli direttamente tramite l'opzione -c o --command, se vuoi una shell interattiva NON usare questa opzione. Non è adatta alle reverse shell, poiché la connessione si chiude dopo l'invio del comando:
python3 RCity.py -t http://teamcity.com:8111 -c id
Puoi assicurarti che nessuna richiesta POST venga inviata al server TeamCity usando l'opzione -s o --stealth.
python3 RCity.py -t http://teamcity.com:8111 -s
Disabilita la funzione RCE: tutto il resto rimane invariato
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Impedisce il recupero della lista utenti; può richiedere tempo su liste di utenti più grandi. Passa direttamente alla RCE con questa opzione!
python3 RCity.py -t http://teamcity.com:8111 --no-enum
Creazione di account amministratore
Remote Code Execution
Generazione di token di autorizzazione
Enumerazione degli utenti
Raccolta di tutti i token di autenticazione privati degli utenti
Raccolta dei dettagli del server



Qui esaminerò le funzioni usate in questo progetto, per darti una migliore comprensione di questo exploit e delle vulnerabilità associate.
La natura della vulnerabilità correla tra CVE-2024-27198 e CVE-2024-27199, poiché il problema deriva dallo stesso bypass di autenticazione per le route REST API nei server JetBrains TeamCity. Tuttavia, è l'impatto di questa vulnerabilità a cambiare le cose e a diventare interessante... CVE-2024-27198 è il vero peso massimo sulla carta, grazie all'impatto RCE dichiarato; sfrutta l'endpoint /app/rest/debug/processes, SOLO con i permessi necessari per effettuare le richieste a questo endpoint, tramite un Auth Token. La chiamata a questo endpoint differisce tra host Unix e Windows, ma viene manipolata in modo simile; l'unica differenza è la shell nativa che viene invocata per una richiesta.
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
Ora, come accennato prima, questo non è possibile senza autenticazione; dovrebbe essere sicuro, giusto? È qui che entra in gioco l'Auth Bypass.
Bypassare la policy della build di TeamCity apre l'opportunità di fare richieste al server e inserire il nostro Auth Token, senza nemmeno aver bisogno tecnicamente di un nostro account.
Il bypass stesso consiste nel creare un percorso alternativo alle route REST che, senza entrare troppo nei dettagli, richiede il controllo dei contenuti di una classe il cui compito è gestire le richieste, in particolare quelle che non sono 302 (redirect), il che ci consente di controllarla aggiungendo 3 parti necessarie alla nostra URL.
Un endpoint non autenticato che non triggera un 302, nel nostro caso /hax
Un parametro di query URL chiamato jsp per interrogare le route API; ad esempio, il percorso users ?jsp=/app/rest/users
Un percorso URI arbitrario che termina con .jsp. Ciò può essere ottenuto aggiungendo un segmento di parametro di percorso HTTP ;.jsp
Il payload finale per effettuare richieste non autorizzate all'endpoint users è quindi: /hax?jsp=/app/rest/users;.jsp
Ora possiamo fare richieste all'endpoint users e aggiungere i nostri utenti, persino Amministratori!
Tuttavia, prima di passare alla RCE, ci serve un token di autenticazione, come bearer per le nostre richieste RCE verso la loro REST API. Nessun problema: ora che abbiamo il nostro bypass, andiamo a crearlo!
L'endpoint del token seguiva lo stesso albero di percorsi dell'esempio precedente; si trova su /app/rest/users/id:{user_id}/tokens/{token_name}. Quindi creiamo un altro payload per bypassare l'autenticazione e creare un token!
(Per questo forniamo il nostro nome token; in questo script si tratta di una generazione casuale di caratteri ascii alfanumerici).
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
Dopo aver effettuato la nostra richiesta POST per aggiungere il token al nostro utente appena creato, possiamo iniziare a fare richieste alla route /app/rest/debug/processes!
Non c'è nulla di speciale nella creazione dei nostri payload RCE: basta codificare in HTML i payload nell'argomento params!
Buon hacking!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
Questo script è solo a scopo didattico. Usalo in modo responsabile e solo su sistemi su cui hai il permesso di accedere.