AWS Codebuild - Token Leakage
Recuperar Tokens Configurados no Github/Bitbucket
Primeiro, verifique se há alguma credencial de origem configurada que você possa leak:
Via Docker Image
Se você descobrir que a autenticação para, por exemplo, Github está configurada na conta, você pode exfiltrar esse acesso (token GH ou token OAuth) fazendo com que o Codebuild use uma imagem Docker específica para executar a build do projeto.
Para esse propósito, você pode criar um novo projeto Codebuild ou alterar o ambiente de um existente para definir a imagem Docker.
A imagem Docker que você pode usar é https://github.com/carlospolop/docker-mitm. Esta é uma imagem Docker muito básica que definirá as variáveis de ambiente https_proxy
, http_proxy
e SSL_CERT_FILE
. Isso permitirá que você intercepte a maior parte do tráfego do host indicado em https_proxy
e http_proxy
e confie no CERT SSL indicado em SSL_CERT_FILE
.
Crie e faça upload da sua própria imagem Docker MitM
Siga as instruções do repositório para definir o endereço IP do seu proxy e definir seu certificado SSL e construir a imagem docker.
NÃO DEFINA
http_proxy
para não interceptar solicitações para o endpoint de metadados.Você pode usar
ngrok
comongrok tcp 4444
para definir o proxy para o seu host.Uma vez que você tenha construído a imagem Docker, faça upload para um repositório público (Dockerhub, ECR...)
Defina o ambiente
Crie um novo projeto Codebuild ou modifique o ambiente de um existente.
Defina o projeto para usar a imagem Docker gerada anteriormente.
Defina o proxy MitM no seu host
Conforme indicado no repositório Github, você pode usar algo como:
A versão do mitmproxy usada foi 9.0.1, foi relatado que com a versão 10 isso pode não funcionar.
Execute a build e capture as credenciais
Você pode ver o token no cabeçalho Authorization:
Isso também pode ser feito a partir do aws cli com algo como
Via HTTP protocol
Essa vulnerabilidade foi corrigida pela AWS em algum momento na semana do dia 20 de fevereiro de 2023 (acho que na sexta-feira). Portanto, um atacante não pode mais abusar dela :)
Um atacante com permissões elevadas sobre um CodeBuild poderia vazar o token do Github/Bitbucket configurado ou, se as permissões foram configuradas via OAuth, o token OAuth temporário usado para acessar o código.
Um atacante poderia adicionar as variáveis de ambiente http_proxy e https_proxy ao projeto CodeBuild apontando para sua máquina (por exemplo
http://5.tcp.eu.ngrok.io:14972
).
Em seguida, altere a URL do repositório github para usar HTTP em vez de HTTPS, por exemplo: **http://**github.com/carlospolop-forks/TestActions
Depois, execute o exemplo básico de https://github.com/synchronizing/mitm na porta apontada pelas variáveis de proxy (http_proxy e https_proxy)
Finalmente, clique em Build the project, as credenciais serão enviadas em texto claro (base64) para a porta mitm:
Agora um atacante poderá usar o token de sua máquina, listar todos os privilégios que ele possui e (ab)usar mais facilmente do que usando o serviço CodeBuild diretamente.
Last updated