# AWS - Codebuild Enum

{{#include ../../../banners/hacktricks-training.md}}

## CodeBuild

AWS **CodeBuild** è riconosciuto come un servizio **fully managed di continuous integration**. Lo scopo principale di questo servizio è automatizzare la sequenza di compilazione del codice sorgente, l'esecuzione dei test e il packaging del software per il deploy. Il vantaggio principale offerto da CodeBuild è la possibilità di eliminare la necessità per gli utenti di provisionare, gestire e scalare i server di build, poiché il servizio stesso si occupa di queste attività. Le funzionalità essenziali di AWS CodeBuild comprendono:

1. **Servizio gestito**: CodeBuild gestisce e scala i server di build, liberando gli utenti dalla manutenzione dei server.
2. **Integrazione continua**: Si integra con il workflow di sviluppo e deployment, automatizzando le fasi di build e test del processo di rilascio del software.
3. **Produzione di pacchetti**: Dopo le fasi di build e test, prepara i pacchetti software, rendendoli pronti per il deployment.

AWS CodeBuild si integra perfettamente con altri servizi AWS, migliorando l'efficienza e l'affidabilità della pipeline CI/CD (Continuous Integration/Continuous Deployment).

### **Credenziali Github/Gitlab/Bitbucket**

#### **Credenziali sorgente predefinite**

Questa è l'opzione legacy dove è possibile configurare alcuni **access** (come un Github token o un'app) che saranno **condivisi tra i progetti CodeBuild** così tutti i progetti possono usare questo set di credenziali configurato.

Le credenziali memorizzate (token, password...) sono **gestite da CodeBuild** e non esiste un modo pubblico per recuperarle tramite le API AWS.

#### Credenziali sorgente personalizzate

A seconda della piattaforma del repository (Github, Gitlab e Bitbucket) vengono fornite opzioni diverse. Ma in generale, qualsiasi opzione che richieda di **memorizzare un token o una password la salverà come secret in Secrets Manager**.

Questo permette a **diversi progetti CodeBuild di usare accessi configurati differenti** ai provider invece di usare soltanto quello predefinito.

### Enumerazione
```bash
# List external repo creds (such as github tokens)
## It doesn't return the token but just the ARN where it's located
aws codebuild list-source-credentials

# Projects
aws codebuild list-shared-projects
aws codebuild list-projects
aws codebuild batch-get-projects --names <project_name> # Check for creds in env vars

# Builds
aws codebuild list-builds
aws codebuild list-builds-for-project --project-name <p_name>
aws codebuild list-build-batches
aws codebuild list-build-batches-for-project --project-name <p_name>

# Reports
aws codebuild list-reports
aws codebuild describe-test-cases --report-arn <ARN>
```
> [!TIP]
> Se hai `codebuild:StartBuild`, ricordati che spesso puoi sovrascrivere gli env vars al momento della build (`--environment-variables-override`). Questo è sufficiente per alcuni attacchi anche senza i permessi `UpdateProject` o override di `buildspec` (per esempio: reindirizzare artifact/upload buckets per esfiltrare segreti, o abusare degli env vars di language/runtime per eseguire comandi).

### Privesc

Nella pagina seguente puoi vedere come **abuse codebuild permissions to escalate privileges**:

{{#ref}}
../aws-privilege-escalation/aws-codebuild-privesc/README.md
{{#endref}}

### Post Exploitation

{{#ref}}
../aws-post-exploitation/aws-codebuild-post-exploitation/
{{#endref}}

### Accesso non autenticato

{{#ref}}
../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md
{{#endref}}

## Riferimenti

- [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html)

{{#include ../../../banners/hacktricks-training.md}}
