AWS CodeBuild - Kukwepa webhook ya PR isiyoaminika (CodeBreach-style)
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na đŹ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter đŚ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Njia hii ya kushambulia inaonekana wakati workflow ya PR inayokabiliwa hadharani imeunganishwa na mradi wa CodeBuild wenye mamlaka na udhibiti dhaifu wa webhook.
Iwapo mshambuliaji wa nje anaweza kufanya CodeBuild ifanye execute ya pull request yao, kwa kawaida wanaweza kupata utekelezaji wa msimbo wowote ndani ya build (build scripts, dependency hooks, test scripts, n.k.), kisha wakageuke kupata siri, kredenshali za IAM, au kredenshali za source-provider.
Kwanini hili ni hatari
CodeBuild webhook filters zinatathminiwa kwa kutumia pattern za regex (kwa filters zisizo za EVENT). Katika filter ya ACTOR_ACCOUNT_ID, hii inamaanisha pattern dhaifu inaweza kuendana na watumiaji wengi zaidi kuliko ilivyokusudiwa.
Ikiwa PR zisizoaminika zinatengenezwa katika project ambayo ina ruhusa zenye mamlaka za AWS role au kredenshali za GitHub, hili linaweza kuwa kompromasi kamili ya supply-chain.
Wiz ilionyesha mnyororo wa vitendo ambapo:
- Orodha ya wachezaji wa webhook ilitumia regex isiyo na anchoring.
- Mshambuliaji alisajili ID ya GitHub iliyofanana kama superstring ya ID ya kuaminika.
- PR mbaya ilisababisha CodeBuild.
- Utekelezaji wa msimbo katika build ulitumiwa kuchoma memory na kupata kredenshali/vikomo vya source-provider.
Misconfigurations zinazoruhusu utekelezaji wa msimbo wa PR wa nje
Hizi ni makosa yenye hatari kubwa na jinsi mashambulizi yanavyoabusa kila moja:
EVENTfilters allow untrusted triggers
- Matukio hatari ya kawaida:
PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED,PULL_REQUEST_REOPENED. - Matukio mengine ambayo yanaweza kuwa hatari ikiwa yameunganishwa na builds zenye mamlaka:
PUSH,PULL_REQUEST_CLOSED,PULL_REQUEST_MERGED,RELEASED,PRERELEASED,WORKFLOW_JOB_QUEUED. - Mbaya:
EVENT="PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED"katika project yenye mamlaka. - Bora: tumia idhini kupitia comment ya PR na punguza matukio yanayoanzisha builds kwa miradi yenye mamlaka.
- Abuse: mshambuliaji anafungua/anasasisha PR au anasukuma kwenye tawi wanadoliza, na msimbo wao unatekelezwa ndani ya CodeBuild.
ACTOR_ACCOUNT_IDregex is weak
- Mbaya: patterns zisizo na anchoring kama
123456|7890123. - Bora: anchoring kwa exact-match
^(123456|7890123)$. - Abuse: regex inayopitiliza inaruhusu GitHub IDs wasioidhinishwa kupita kwenye allowlists.
- Other regex filters are weak or missing
HEAD_REF- Mbaya:
refs/heads/.* - Bora:
^refs/heads/main$(au orodha ya wazi ya tawi zilizoaminika)
- Mbaya:
BASE_REF- Mbaya:
.* - Bora:
^refs/heads/main$
- Mbaya:
FILE_PATH- Mbaya: hakuna vizuizi vya path
- Bora: tomee faili hatari kama
^buildspec\\.yml$,^\\.github/workflows/.*,(^|/)package(-lock)?\\.json$
COMMIT_MESSAGE- Mbaya: kuamini alama katika message ya commit kwa match mpana kama
trusted - Bora: usitumie commit message kama mipaka ya kuaminika kwa utekelezaji wa PR
- Mbaya: kuamini alama katika message ya commit kwa match mpana kama
REPOSITORY_NAME/ORGANIZATION_NAME- Mbaya:
.*katika webhooks za org/global - Bora: mechi za repo/org zilizoelezwa tu
- Mbaya:
WORKFLOW_NAME- Mbaya:
.* - Bora: mechi za workflow name tu (au acha kutumia hili kama udhibiti wa uaminifu)
- Mbaya:
- Abuse: mshambuliaji anafanya ref/path/message/repo context kukidhi regex mpole na kuanzisha builds.
excludeMatchedPatternis misused
- Kuweka flag hii kwa njia isiyo sahihi kunaweza kugeuza mantiki iliyokusudiwa.
- Mbaya:
FILE_PATH '^buildspec\\.yml$'naexcludeMatchedPattern=falsewakati nia ilikuwa kuzuia uhariri wa buildspec. - Bora: pattern ile ile na
excludeMatchedPattern=truekukataa builds zinazogusabuildspec.yml. - Abuse: wataalamu wa ulinzi wanafikiri wanazuia matukio/paths/actors hatari, lakini kwa kweli wanayaruhusu.
- Multiple
filterGroupscreate accidental bypasses
- CodeBuild huthibitisha groups kama OR (kundi moja kupita inatosha).
- Mbaya: kundi moja kali + kundi la fallback lenye upole (mfano, tu
EVENT=PULL_REQUEST_UPDATED). - Bora: toa groups za fallback ambazo hazifuatilii vikwazo vya actor/ref/path.
- Abuse: mshambuliaji anahitaji kukidhi kundi dhaifu tu.
- Comment approval gate disabled or too permissive
pullRequestBuildPolicy.requiresCommentApproval=DISABLEDni hatari kabisa.- Nafasi za waidhinishaji ambazo ni pana kupunguza udhibiti.
- Mbaya:
requiresCommentApproval=DISABLED. - Bora:
ALL_PULL_REQUESTSauFORK_PULL_REQUESTSna majukumu madogo ya waidhinishaji. - Abuse: fork/drive-by PRs zinaendeshwa bila idhini ya maintainer aliyeaminika.
- No restrictive branch/path strategy for PR builds
- Kutokuwepo kwa defense-in-depth kwa
HEAD_REF+BASE_REF+FILE_PATH. - Mbaya: tu
EVENT+ACTOR_ACCOUNT_ID, hakuna vikwazo vya ref/path. - Bora: changanya
ACTOR_ACCOUNT_IDthabiti +BASE_REF+HEAD_REF+ vizuizi vyaFILE_PATH. - Abuse: mshambuliaji anabadilisha vyanzo vya build (buildspec/CI/dependencies) na kupata uchezaji wa amri yoyote.
- Public visibility + status URL exposure
- URLs za build/checks za hadharani huongeza recon ya mshambuliaji na majaribio ya iterative.
- Mbaya:
projectVisibility=PUBLIC_READpamoja na logs/config zenye siri katika builds hadharani. - Bora: iweka projects binafsi isipokuwa kama kuna sababu zenye nguvu za kibiashara, na sanitize logs/artifacts.
- Abuse: mshambuliaji anagundua mifumo/myendo ya project, kisha anakalia payloads na majaribio ya kukwepa.
Token leakage from memory
Maandishi ya Wiz yanaelezea kwamba kredenshali za source-provider ziko katika muktadha wa runtime wa build na zinaweza kubauliwa baada ya kompromasi ya build (kwa mfano, kupitia memory dumping), kuruhusu takeover ya repository ikiwa scopes ni pana.
AWS ilitengeneza hardening baada ya uvumbuzi huo, lakini somo kuu linabaki: usimpe utekelezaji wa msimbo wa PR zisizoaminika katika muktadha wa build wenye mamlaka na assume msimbo unaodhibitiwa na mshambuliaji utajaribu wizi wa kredenshali.
Kwa mbinu zaidi za wizi wa kredenshali katika CodeBuild, angalia pia:
Kupata CodeBuild URLs katika PR za GitHub
Ikiwa CodeBuild inaripoti hali ya commit kurudi GitHub, URL ya build ya CodeBuild kawaida inaonekana katika:
- Ukurasa wa PR -> kichupo cha Checks (au mstari wa status katika Conversation/Commits).
- Ukurasa wa Commit -> sehemu ya status/checks -> kiungo cha Details.
- Orodha ya commits ya PR -> bonyeza context ya check iliyounganishwa na commit.
Kwa miradi ya umma, kiungo hiki kinaweza kufichua metadata/config ya build kwa watumiaji wasiojulikana.
Script: gundua CodeBuild URLs katika PR na jaribu kama zinaonekana kuwa za hadharani
```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â
Imethibitishwa inafanya kazi na:
```bash
bash /tmp/check_pr_codebuild_urls.sh carlospolop codebuild-codebreach-ctf-lab 1
Orodha ya ukaguzi wa haraka
# 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
Kagua kila mradi kwa:
webhook.filterGroupszinazo jumuisha matukio ya PR.- Patterni za
ACTOR_ACCOUNT_IDambazo hazijaweka anchor^...$. pullRequestBuildPolicy.requiresCommentApprovalsawa naDISABLED.- Vizuizi vya tawi/na njia za faili vinavyokosekana.
serviceRoleyenye vibali vya juu.- Wigo wa vyeti vya chanzo wenye hatari na utumiaji upya.
Mwongozo wa kuimarisha usalama
- Lazimisha idhini ya maoni kwa builds za PR (
ALL_PULL_REQUESTSauFORK_PULL_REQUESTS). - Ikiwa unatumia actor allowlists, weka anchors kwa regexes na zihakikishe ziwe sahihi kabisa.
- Ongeza vizuizi vya
FILE_PATHili kuepuka uhariri usioaminika wabuildspec.ymlna skripti za CI. - Tenganisha builds za release za kuaminika kutoka kwa builds za PR zisizoaminika katika miradi/majukumu tofauti.
- Tumia tokeni za source-provider zilizo na udhibiti wa kina na vibali vidogo (pendelea vitambulisho vilivyotengwa vyenye vibali vya chini).
- Endelea kukagua filters za webhook na matumizi ya vyeti vya chanzo.
Marejeo
- 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
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na đŹ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter đŚ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
HackTricks Cloud

