# Pentesting CI/CD Metodologija

{{#include ../banners/hacktricks-training.md}}

<figure><img src="../images/CLOUD-logo-letters.svg" alt=""><figcaption></figcaption></figure>

## VCS

VCS označava **Sistem Kontrole Verzija**, ovaj sistem omogućava programerima da **upravljaju svojim izvorni kodom**. Najčešći je **git** i obično ćete naći kompanije koje ga koriste na jednoj od sledećih **platformi**:

- Github
- Gitlab
- Bitbucket
- Gitea
- Cloud provajderi (oni nude svoje VCS platforme)

## CI/CD Pipelines

CI/CD pipelines omogućavaju programerima da **automatizuju izvršavanje koda** za različite svrhe, uključujući izgradnju, testiranje i implementaciju aplikacija. Ovi automatizovani radni tokovi se **pokreću specifičnim akcijama**, kao što su push-ovi koda, pull zahtevi ili zakazani zadaci. Korisni su za pojednostavljenje procesa od razvoja do produkcije.

Međutim, ovi sistemi moraju biti **izvršeni negde** i obično sa **privilegovanim akreditivima za implementaciju koda ili pristup osetljivim informacijama**.

## VCS Pentesting Metodologija

> [!NOTE]
> Čak i ako neke VCS platforme omogućavaju kreiranje pipelines, u ovoj sekciji ćemo analizirati samo potencijalne napade na kontrolu izvornog koda.

Platforme koje sadrže izvorni kod vašeg projekta sadrže osetljive informacije i ljudi moraju biti veoma oprezni sa dozvolama dodeljenim unutar ove platforme. Ovo su neki uobičajeni problemi na VCS platformama koje napadači mogu zloupotrebiti:

- **Leaking**: Ako vaš kod sadrži curenja u commit-ima i napadač može pristupiti repozitorijumu (jer je javan ili jer ima pristup), mogao bi otkriti curenja.
- **Pristup**: Ako napadač može **pristupiti nalogu unutar VCS platforme**, mogao bi dobiti **veću vidljivost i dozvole**.
- **Registracija**: Neke platforme će samo omogućiti spoljnim korisnicima da kreiraju nalog.
- **SSO**: Neke platforme neće dozvoliti korisnicima da se registruju, ali će omogućiti svakome da pristupi sa važećim SSO (tako da napadač može koristiti svoj github nalog da uđe, na primer).
- **Akreditivi**: Korisničko ime+Lozinka, lični tokeni, ssh ključevi, Oauth tokeni, kolačići... postoji nekoliko vrsta tokena koje korisnik može ukrasti da bi na neki način pristupio repozitorijumu.
- **Webhook-ovi**: VCS platforme omogućavaju generisanje webhook-ova. Ako nisu **zaštićeni** nevidljivim tajnama, **napadač bi mogao da ih zloupotrebi**.
- Ako nema tajne, napadač bi mogao zloupotrebiti webhook treće strane
- Ako je tajna u URL-u, isto se dešava i napadač takođe ima tajnu
- **Kompromitovanje koda:** Ako zlonameran akter ima neku vrstu **write** pristupa nad repozitorijumima, mogao bi pokušati da **ubaci zlonamerni kod**. Da bi bio uspešan, možda će morati da **obiđe zaštite grana**. Ove akcije se mogu izvesti sa različitim ciljevima na umu:
- Kompromitovati glavnu granu da bi **kompromitovao produkciju**.
- Kompromitovati glavnu (ili druge grane) da bi **kompromitovao mašine programera** (jer obično izvršavaju testove, terraform ili druge stvari unutar repozitorijuma na svojim mašinama).
- **Kompromitovati pipeline** (proverite sledeću sekciju)

## Pipelines Pentesting Metodologija

Najčešći način da se definiše pipeline je korišćenjem **CI konfiguracione datoteke koja se hostuje u repozitorijumu** koji pipeline gradi. Ova datoteka opisuje redosled izvršenih poslova, uslove koji utiču na tok i postavke okruženja za izgradnju.\
Ove datoteke obično imaju dosledno ime i format, na primer — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), i YAML datoteke GitHub Actions smeštene pod .github/workflows. Kada se pokrene, posao pipeline-a **povlači kod** iz odabranog izvora (npr. commit / grana), i **izvršava komande navedene u CI konfiguracionoj datoteci** protiv tog koda.

Stoga je krajnji cilj napadača da na neki način **kompromituje te konfiguracione datoteke** ili **komande koje izvršavaju**.

### PPE - Izvršenje Zagađenog Pipeline-a

Putanja Izvršenja Zagađenog Pipeline-a (PPE) koristi dozvole u SCM repozitorijumu da manipuliše CI pipeline-om i izvršava štetne komande. Korisnici sa potrebnim dozvolama mogu modifikovati CI konfiguracione datoteke ili druge datoteke koje koristi posao pipeline-a da uključe zlonamerne komande. Ovo "zagađuje" CI pipeline, što dovodi do izvršenja ovih zlonamernih komandi.

Da bi zlonameran akter bio uspešan u izvođenju PPE napada, mora biti u mogućnosti da:

- Ima **write pristup VCS platformi**, jer se obično pipelines pokreću kada se izvrši push ili pull zahtev. (Proverite VCS pentesting metodologiju za sažetak načina za dobijanje pristupa).
- Imajte na umu da ponekad **spoljni PR računa kao "write pristup"**.
- Čak i ako ima write dozvole, mora biti siguran da može **modifikovati CI konfiguracionu datoteku ili druge datoteke na koje se konfiguracija oslanja**.
- Za to, možda će morati da bude u mogućnosti da **obiđe zaštite grana**.

Postoje 3 vrste PPE:

- **D-PPE**: **Direktan PPE** napad se dešava kada akter **modifikuje CI konfiguraciju** datoteku koja će biti izvršena.
- **I-DDE**: **Indirektan PPE** napad se dešava kada akter **modifikuje** **datoteku** na koju se CI konfiguraciona datoteka oslanja (kao što je make datoteka ili terraform konfiguracija).
- **Javni PPE ili 3PE**: U nekim slučajevima, pipelines mogu biti **pokrenuti od strane korisnika koji nemaju write pristup u repozitorijumu** (i koji možda čak nisu ni deo organizacije) jer mogu poslati PR.
- **3PE Injekcija Komandi**: Obično, CI/CD pipelines će **postaviti promenljive okruženja** sa **informacijama o PR-u**. Ako tu vrednost može kontrolisati napadač (kao što je naslov PR-a) i koristi se na **opasnom mestu** (kao što je izvršavanje **sh komandi**), napadač može **ubaciti komande tamo**.

### Prednosti Eksploatacije

Poznavanje 3 vrste za zagađenje pipeline-a, hajde da proverimo šta napadač može dobiti nakon uspešne eksploatacije:

- **Tajne**: Kao što je ranije pomenuto, pipelines zahtevaju **privilegije** za svoje poslove (preuzimanje koda, izgradnja, implementacija...) i te privilegije se obično **dodeljuju u tajnama**. Ove tajne su obično dostupne putem **env promenljivih ili datoteka unutar sistema**. Stoga će napadač uvek pokušati da eksfiltrira što više tajni.
- U zavisnosti od platforme pipeline-a, napadač **može morati da specificira tajne u konfiguraciji**. To znači da ako napadač ne može da modifikuje CI konfiguracioni pipeline (**I-PPE**, na primer), može **samo eksfiltrirati tajne koje taj pipeline ima**.
- **Računanje**: Kod se izvršava negde, u zavisnosti od toga gde se izvršava, napadač bi mogao biti u mogućnosti da se dalje preusmeri.
- **Na Mestu**: Ako se pipelines izvršavaju na mestu, napadač bi mogao završiti u **internoj mreži sa pristupom više resursima**.
- **Cloud**: Napadač bi mogao pristupiti **drugim mašinama u cloud-u**, ali takođe bi mogao **eksfiltrirati** IAM uloge/token-e servisnih naloga **iz njega** da bi dobio **dalji pristup unutar cloud-a**.
- **Mašine platforme**: Ponekad će poslovi biti izvršeni unutar **mašina platforme pipelines**, koje obično su unutar cloud-a sa **nema više pristupa**.
- **Izaberi to:** Ponekad će **platforma pipelines imati konfigurisanih nekoliko mašina** i ako možete **modifikovati CI konfiguracionu datoteku**, možete **naznačiti gde želite da izvršite zlonamerni kod**. U ovoj situaciji, napadač će verovatno pokrenuti reverznu ljusku na svakoj mogućoj mašini da pokuša da je dalje eksploatiše.
- **Kompromitovanje produkcije**: Ako ste unutar pipeline-a i konačna verzija se gradi i implementira iz njega, mogli biste **kompromitovati kod koji će se na kraju izvršavati u produkciji**.

## Više relevantnih informacija

### Alati & CIS Benchmark

- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) je alat otvorenog koda za reviziju vašeg softverskog lanca snabdevanja za bezbednosnu usklađenost zasnovan na novom [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). Revizija se fokusira na ceo SDLC proces, gde može otkriti rizike od vremena koda do vremena implementacije.

### Top 10 CI/CD Bezbednosnih Rizika

Proverite ovaj zanimljiv članak o top 10 CI/CD rizicima prema Cider-u: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/)

### Laboratorije

- Na svakoj platformi koju možete pokrenuti lokalno naći ćete kako da je pokrenete lokalno tako da je možete konfigurisati kako želite da je testirate
- Gitea + Jenkins laboratorija: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat)

### Automatski Alati

- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** je alat za statičku analizu koda za infrastrukturu kao kod.

## Reference

- [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422)

{{#include ../banners/hacktricks-training.md}}
