AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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:
- ân webhook actor allowlist ân unanchored regex gebruik het.
- ân aanvaller ân GitHub ID geregistreer het wat as ân superstring van ân vertroude ID gematch het.
- ân kwaadwillige PR CodeBuild ge-trigger het.
- 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:
EVENTfilters 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.
ACTOR_ACCOUNT_IDregex 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.
- Other regex filters are weak or missing
HEAD_REF- Sleg:
refs/heads/.* - Beter:
^refs/heads/main$(of ân eksplisiete vertroude lys)
- Sleg:
BASE_REF- Sleg:
.* - Beter:
^refs/heads/main$
- Sleg:
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
- Sleg: vertrouensmerk met lose match soos
REPOSITORY_NAME/ORGANIZATION_NAME- Sleg:
.*in org/globale webhooks - Beter: slegs eksakte repo/org matches
- Sleg:
WORKFLOW_NAME- Sleg:
.* - Beter: eksakte workflow-name matches slegs (of vermy dit as trust-kontrole)
- Sleg:
- Misbruik: aanvaller vervaardig ref/path/message/repo konteks om permissive regex te bevredig en builds te trigger.
excludeMatchedPatternis misused
- Om hierdie vlag verkeerd te stel kan die bedoelde logika omkeer.
- Sleg:
FILE_PATH '^buildspec\\.yml$'metexcludeMatchedPattern=falsewanneer die bedoeling was om buildspec-wysigings te blokkeer. - Beter: dieselfde patroon met
excludeMatchedPattern=trueom builds watbuildspec.ymlraak te weier. - Misbruik: verdedigers dink hulle weier riskante events/paaie/actors, maar laat eintlik toe.
- Multiple
filterGroupscreate 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.
- Comment approval gate disabled or too permissive
pullRequestBuildPolicy.requiresCommentApproval=DISABLEDis die minste veilig.- Te breë approver-rolle verminder kontrole.
- Sleg:
requiresCommentApproval=DISABLED. - Beter:
ALL_PULL_REQUESTSofFORK_PULL_REQUESTSmet minimale approver-rolle. - Misbruik: fork/drive-by PRs hardloop outomaties sonder vertroude maintainer-goedkeuring.
- 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_PATHbeperkings. - Misbruik: aanvaller wysig build-insette (buildspec/CI/dependencies) en kry arbitraire opdrag-uitvoering.
- Public visibility + status URL exposure
- Openbare build-/check-URLâs verbeter aanvaller-recon en iteratiewe toetsing.
- Sleg:
projectVisibility=PUBLIC_READmet 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:
Finding CodeBuild URLs in GitHub PRs
As CodeBuild commit status terugrapporteer aan GitHub, verskyn die CodeBuild build-URL gewoonlik in:
- PR page -> Checks tab (of die statusreël in Conversation/Commits).
- Commit page -> status/checks afdeling -> Details skakel.
- PR commits list -> klik die check context geheg aan ân commit.
Vir openbare projekte kan hierdie skakel build-metadata/configuratie aan ongesertifiseerde gebruikers blootstel.
Skrip: detect CodeBuild-URLs in 'n PR en toets of dit openbaar lyk
```bash #!/usr/bin/env bash set -euo pipefailUsage:
./check_pr_codebuild_urls.sh <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
Vinnige ouditkontrolelys
# 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.filterGroupscontaining PR events.ACTOR_ACCOUNT_IDpatterns that are not anchored with^...$.pullRequestBuildPolicy.requiresCommentApprovalequal toDISABLED.- Ontbrekende tak/pad-beperkings.
- Hoë-privilegie
serviceRole. - Risikovolle scope en hergebruik van source credentials.
Verstevigingsriglyne
- Vereis kommentaargoedkeuring vir PR-builds (
ALL_PULL_REQUESTSofFORK_PULL_REQUESTS). - As jy actor allowlists gebruik, anker regexes en hou dit presies.
- Voeg
FILE_PATH-beperkings by om onbetroubare wysigings aanbuildspec.ymlen CI-skripte te voorkom. - Skil vertroude release-builds van onbetroubare PR-builds in verskillende projekte/rolle.
- Gebruik fynkorrelige, minst-bevoorregte source-provider tokens (verkies toegewyde lae-bevoegdheid identiteite).
- Oudit voortdurend webhook-filters en die gebruik van source credentials.
References
- Wiz: CodeBreach - AWS CodeBuild ACTOR_ID regex bypass and token theft
- AWS CodeBuild API - WebhookFilter
- AWS CLI - codebuild create-webhook
- AWS CodeBuild User Guide - Best practices for webhooks
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

