Pentesting CI/CD Methodology

Reading time: 8 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

VCS

VCS inamaanisha Version Control System, mfumo huu unawawezesha waendelezaji kusimamia source code yao. Ile inayotumika sana ni git na kawaida utapata makampuni wakitumia moja ya platforms zifuatazo:

  • Github
  • Gitlab
  • Bitbucket
  • Gitea
  • Gitblit
  • Cloud providers (wanatoa VCS platforms zao wenyewe)

CI/CD Pipelines

CI/CD pipelines zinawezesha waendelezaji ku-automate utekelezaji wa code kwa madhumuni mbalimbali, ikiwa ni pamoja na ku-build, ku-test, na ku-deploy applications. Hizi workflows zilizo-automated huanzishwa kwa vitendo maalum, kama vile code pushes, pull requests, au tasks zilizopangwa. Zinasaidia kurahisisha mchakato kutoka development hadi production.

Hata hivyo, systems hizi zinahitaji kuendeshwa mahali fulani na kawaida kwa credentials zenye privileges ili ku-deploy code au kupata taarifa nyeti.

VCS Pentesting Methodology

note

Even if some VCS platforms allow to create pipelines for this section we are going to analyze only potential attacks to the control of the source code.

Platforms ambazo zina source code ya project yako zina taarifa nyeti na watu wanapaswa kuwa waangalifu sana na permissions zinazotolewa ndani ya platform hiyo. Hizi ni baadhi ya matatizo ya kawaida kwenye VCS platforms ambayo mshambuliaji anaweza kuyatumia:

  • Leaks: Ikiwa code yako ina leaks katika commits na mshambuliaji anaweza kufikia repo (kwa sababu ni public au kwa sababu ana access), anaweza kugundua leaks hizo.
  • Access: Ikiwa mshambuliaji anaweza kupata account ndani ya VCS platform anaweza kupata uwazi zaidi na permissions.
  • Register: Baadhi ya platforms zinaruhusu watumiaji wa nje tu kuunda account.
  • SSO: Baadhi ya platforms hazitaruhusu watumiaji kujisajili, lakini zitaruhusu mtu yeyote kuingia kwa SSO halali (kwa hivyo mshambuliaji anaweza kutumia github account yake kuingia kwa mfano).
  • Credentials: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies... kuna aina kadhaa za tokens mtumiaji anaweza kuiba ili kupata access kwa repo kwa njia fulani.
  • Webhooks: VCS platforms zinaweza kuunda webhooks. Ikiwa hazilindwa kwa secrets ambazo hazioniwi, mshambuliaji anaweza kuzitumia.
  • Ikiwa hakuna secret iliyowekwa, mshambuliaji anaweza kutumia webhook ya platform ya tatu
  • Ikiwa secret iko kwenye URL, hivyo ndivyo na mshambuliaji pia atakuwa na secret
  • Code compromise: Ikiwa mtu mbaya ana aina ya access ya write juu ya repos, anaweza kujaribu kuingiza malicious code. Ili kufanikiwa anaweza kuhitaji kupitisha branch protections. Vitendo hivi vinaweza kufanywa kwa malengo mbalimbali:
  • Kufanya compromise main branch ili kudanganya production.
  • Kufanya compromise main (au matawi mengine) ili kudanganya machines za developers (kwa kuwa mara nyingi wanatekeleza tests, terraform au vitu vingine ndani ya repo kwenye machines zao).
  • Compromise the pipeline (angalia sehemu inayofuata)

Pipelines Pentesting Methodology

Njia ya kawaida ya kuielezea pipeline ni kwa kutumia CI configuration file iliyohifadhiwa kwenye repository ambayo pipeline inajenga. File hii inaeleza mfuatano wa jobs zinazotekelezwa, masharti yanayoathiri flow, na settings za build environment.
Files hizi kawaida zina jina na format thabiti, kwa mfano — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), na GitHub Actions YAML files ziko chini ya .github/workflows. Wakati zinapoanzishwa, pipeline job inavuta code kutoka kwenye source iliyochaguliwa (mfano commit / branch), na inaendesha amri zilizobainishwa kwenye CI configuration file dhidi ya code hiyo.

Kwa hivyo lengo la mwisho la mshambuliaji ni kwa namna fulani kuharibu configuration files hizo au amri wanazotekeleza.

tip

Some hosted builders let contributors choose the Docker build context and Dockerfile path. If the context is attacker-controlled, you may set it outside the repo (e.g., "..") to ingest host files during build and exfiltrate secrets. See:

{{#ref}} docker-build-context-abuse.md {{#endref}}

PPE - Poisoned Pipeline Execution

The Poisoned Pipeline Execution (PPE) path inatumia permissions katika SCM repository kuharibu CI pipeline na kuendesha amri zenye madhara. Watumiaji walio na permissions zinazohitajika wanaweza kubadilisha CI configuration files au files nyingine zinazotumika na pipeline job ili kujumuisha amri hatarishi. Hii "inafanya pipeline kuwa poisonous", ikisababisha utekelezaji wa amri hizi hatarishi.

Ili mshambuliaji afanikiwe kufanya shambulio la PPE anatakiwa:

  • Kuwa na write access kwenye VCS platform, kwa kawaida pipelines huanzishwa wakati push au pull request inafanywa. (Angalia VCS pentesting methodology kwa muhtasari wa njia za kupata access).
  • Kumbuka kwamba wakati mwingine external PR inaweza kuhesabiwa kama "write access".
  • Hata kama ana write permissions, anatakiwa kuhakikisha anaweza kubadilisha CI config file au files nyingine ambazo config inategemea.
  • Kwa hili, anaweza kuhitaji kuwa anaweza kupitisha branch protections.

Kuna aina 3 za PPE:

  • D-PPE: A Direct PPE attack hutokea wakati mshambuliaji anabadilisha CI config file ambayo itatekelezwa.
  • I-DDE: An Indirect PPE attack hutokea wakati mshambuliaji anabadilisha file ambayo CI config inategemea (kama make file au terraform config).
  • Public PPE or 3PE: Katika baadhi ya matukio pipelines zinaweza kuanzishwa na watumiaji wasiokuwa na write access kwenye repo (na ambao huenda hata sio sehemu ya org) kwa sababu wanaweza kutuma PR.
  • 3PE Command Injection: Kawaida, CI/CD pipelines zitaweka environment variables zenye tafsiri kuhusu PR. Ikiwa thamani hiyo inaweza kudhibitiwa na mshambuliaji (kama title ya PR) na inatumiwa katika sehemu hatari (kama kutekeleza sh commands), mshambuliaji anaweza kuingiza amri ndani yake.

Exploitation Benefits

Ukijua aina 3 za kuosha pipeline, tuchunguze kile mshambuliaji anaweza kupata baada ya exploitation yenye mafanikio:

  • Secrets: Kama ilivyotajwa awali, pipelines zinahitaji privileges kwa jobs zao (kuvuta code, kuijenga, ku-deploy...) na privileges hizi kawaida hutolewa kama secrets. Secrets hizi kwa kawaida zinapatikana kupitia env variables au files ndani ya system. Kwa hivyo mshambuliaji ataendelea kujaribu kutoa secrets nyingi iwezekanavyo.
  • Kulingana na pipeline platform mshambuliaji anaweza kuhitaji kueleza secrets kwenye config. Hii inamaanisha ikiwa mshambuliaji hawezi kubadilisha CI configuration pipeline (I-PPE kwa mfano), anaweza kutoa tu secrets ambazo pipeline ina.
  • Computation: Code inaendeshwa mahali fulani, kutegemea wapi inatekelezwa mshambuliaji anaweza kuweza pivot zaidi.
  • On-Premises: Ikiwa pipelines zinaendeshwa on premises, mshambuliaji anaweza kuingia kwenye internal network yenye access kwa rasilimali zaidi.
  • Cloud: Mshambuliaji anaweza kufikia machines nyingine katika cloud lakini pia anaweza kutoa IAM roles/service accounts tokens kutoka humo ili kupata access zaidi ndani ya cloud.
  • Platforms machine: Wakati mwingine jobs zitaendeshwa ndani ya machines za pipelines platform, ambazo kwa kawaida ziko ndani ya cloud na hazina access zaidi.
  • Select it: Wakati mwingine pipelines platform itakuwa ime-configure machines kadhaa na ikiwa unaweza kubadilisha CI configuration file unaweza onyesha wapi ungependa kuendesha malicious code. Katika hali hii, mshambuliaji huenda akaendesha reverse shell kwenye kila machine inayowezekana ili kujaribu kuizidisha.
  • Compromise production: Ukiwa ndani ya pipeline na version ya mwisho inajaribiwa na ku-deploy kutoka kwake, unaweza kuharibu code itakayokwenda kuendesha production.

More relevant info

Tools & CIS Benchmark

  • Chain-bench ni zana ya open-source ya kufanya auditing ya software supply chain stack yako kwa security compliance kulingana na mpya CIS Software Supply Chain benchmark. Auditing inazingatia mchakato mzima wa SDLC, ambapo inaweza kufichua hatari kutoka wakati wa code hadi wakati wa deploy.

Top 10 CI/CD Security Risk

Tazama makala hii ya kuvutia kuhusu top 10 CI/CD risks kulingana na Cider: https://www.cidersecurity.io/top-10-cicd-security-risks/

Labs

Automatic Tools

  • Checkov: Checkov ni zana ya static code analysis kwa infrastructure-as-code.

References

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks