Anpwazonnen-Pipeline-Egzekisyon

Yon gwo plonje nan CI/CD PipelineVilnerabilite (I): Anpwazonnen Pipeline Ekzekisyon (PPE)

Entegrasyon Kontinyèl ak Deplwaman KontinyèlCI/CD) pipelinejwe yon wòl esansyèl nan fasilite devlopman lojisyèl senplifye. Men, kòm sa yo pipelinePandan ke yo vin pi enpòtan, li enpòtan pou pwoteje yo kont vilnerabilite yo. Envestigasyon apwofondi sa a konsantre sou adrese yon risk enpòtan idantifye nan OWASP Top-10 la. CI/CD Risk Sekirite: Anpwazonnen Pipeline Ekzekisyon (PPE).

OWASP-top-10-imaj

Ki sa ki anpwazonnen Pipeline Ekzekisyon (PPE)

Dapre OWASP Top-10 la CI/CD Risk Sekirite, "Anpwazonnen Pipeline Egzekisyon (PPE) risk refere a kapasite yon atakè ki gen aksè a sistèm kontwòl sous – epi ki pa gen aksè a anviwònman konstriksyon an – pou manipile pwosesis konstriksyon an lè w enjekte kòd/kòmand move nan konstriksyon an pipeline konfigirasyon, esansyèlman anpwazonnen pipeline epi kouri kòd move kòm yon pati nan pwosesis konstriksyon an"

Nan kèk mo, anpwazonnen Pipeline Ekzekisyon (PPE) pwodui lè atakè a ka modifye pipeline lojik.

Gen de varyant:

  • EPI dirèk (D-PPE): Nan yon senaryo D-PPE, atakè a modifye fichye konfigirasyon CI a nan yon depo yo gen aksè a, swa lè yo pouse chanjman an dirèkteman nan yon branch adistans ki pa pwoteje sou depo a, oswa lè yo soumèt yon PR ak chanjman an soti nan yon branch oswa yon fork. Depi CI a pipeline ekzekisyon an defini pa kòmand ki nan fichye konfigirasyon CI modifye a, kòmand move atakè a finalman kouri nan nœd konstriksyon an yon fwa konstriksyon an pipeline se deklanche.
  • EPI endirèk (I-PPE): Nan sèten ka, posiblite D-PPE a pa disponib pou yon advèsè ki gen aksè a yon SCM depo (pa egzanp si la pipeline configuré pou rale fichye konfigirasyon CI a soti nan yon branch separe, pwoteje nan menm depo a). Nan yon senaryo konsa, olye pou yo anpwazonnen pipeline li menm, yon atakè enjekte kòd move nan dosye referansye pa la pipeline (pa egzanp: script referansye nan andedan an pipeline fichye konfigirasyon)

Nan tou de ka yo, GitHub pral egzekite modifikasyon an pipeline san bezwen yon revizyon oswa apwobasyon anvan.

CICD-Anpwazonnen-Pipeline-Egzekisyon

Deteksyon bonè nan EPI

Ki jan nou ka detekte kalite vilnerabilite sa a? 

Ann wè egzanp sa a pipeline :

name: PR CI  on:   pull_request:     branches: [ main ]  env:   MY_SECRET: ${{ secrets.MY_SECRET }}   jobs:   pr_build_test_and_merge:     runs-on: ubuntu-latest      steps:       # checkout PR code       - name: Checkout repository         uses: actions/checkout@v4        # Simulation of a compilation       - name: Building ...         run: |           echo $MY_SECRET           mkdir ./bin           touch ./bin/mybin.exe             # Simulation of running tests       - name: Running tests ...         id : run_tests         run: |           echo Running tests..           chmod +x runtests.sh           ./runtests.sh "${{ github.event.pull_request.user.login }}" "${{ github.workflow }}"           echo Tests executed.    

Ak kontni yon script kokiy fo (runtests.sh):

#!/usr/bin/bash echo "Executing Tests script [from user $1 at $2]" >> runtests.out exit 0

The pipeline Li byen senp: objektif li se bay revizè a kèk endikasyon preliminè pou Pull Request Pwosesis akseptasyon (PR):

  • Li pral deklanche sou rale_demann (sa vle di chak fwa yo kreye yon PR)
  • Li verifye kòd PR a (sa vle di kòd kontribye a)
  • Li pral fè konstriksyon an 
  • Li pral fè tès sou kòd kontribye (pa egzanp, lè li egzekite yon script shell) 

Etap #3 (fè konpilasyon an) ak #4 (fè tès la) ap echwe si kòd la pa konpile oubyen si li pa reyisi tès yo. Kidonk, etap sa yo aji kòm yon kondisyon nesesè, men pa sifizan, pou aksepte PR a. Si li reyisi, administratè depo a ap kontinye revize kòd ki te kontribye a epi, dapre sa, l ap aksepte/rejte/kòmante PR a.  

Eskanè Xygeni

Xygeni bay yon CLI ("Eskanè Xygeni") ki ka entegre nan yon pipeline oubyen egzekite nan yon liy kòmand. Eskanè Xygeni a pral trete a pipelines pou tcheke vilnerabilite yo epi, si yo bay yon PAT GitHub, li pral konekte ak GitHub pou dekouvri vilnerabilite nan nivo org/repo a.

Envantè Xygeni

Lè nou egzekite Xygeni Scanner sou depo sa a, li dekouvri yon seri byen itil (la Envantè Xygeni). Envantè a pral ranpli ak anpil diferan kalite CI/CD byen, Tankou:

  • The SCM Sistèm kote depo a estoke
  • The SCM plugins enstale/itilize
  • The Repozitwa Kòd tèt li
  • The SCM Òganizasyon kote depo a fè pati
  • The CI/CD Pipelines ak Travay
  • The CI/CD Sistèm kouri a pipelines
  • IaC Resous defini nan depo a
  • Eksteryè Dependencies
  • elatriye ..

Nan egzanp nou an, nou ka filtre Envantè a pa kèk kalite byen espesifik (SCM- ak byen ki gen rapò ak CICD), kidonk nou ka wè ke:

  • SCM Sistèm nan se GitHub Cloud
  • Repo a estoke nan GitHub Cloud epi li fè pati yon òganizasyon GitHub espesifik.
  • Gen de pipelines mache ak GitHub (CI/CD sistèm)
  • Chak pipeline gen yon sèl etap espesifik
Anpwazonnen Pipeline Ekzekisyon (PPE)

Lè w chwazi sa ki anwo yo pipeline nou ka wè kèk feblès:

  • At pipeline nivo, li vilnerab a tou de dirèk ta dwe apwouve bèso tibebe w la epi EPI endirèk.

Nou ka wè detay moun ki anpwazonnen yo Pipeline Vilnerabilite ekzekisyon

Anpwazonnen Pipeline Ekzekisyon (PPE)
Anpwazonnen Pipeline Ekzekisyon (PPE)

Xygeni detekte ke li la vilnerab a D-PPE paske li deklanche sou yon Pull Request evènman an epi pa gen okenn kontwòl sekirite adisyonèl, kidonk nenpòt itilizatè depo ka modifye a pipeline epi modifikasyon sa yo pral egzekite san okenn revizyon oswa apwobasyon. 

Nan menm sans lan, Xygeni detekte tou ke li vilnerab a I-PPE akòz apèl la nan script shell la soti nan la pipelineNenpòt itilizatè depo ka modifye script shell la epi modifikasyon sa yo pral egzekite san okenn revizyon oswa apwobasyon.

Ou vle konnen plis?

Eksplwate EPI

Pou eksplwate PPE a, ann konsidere yon senaryo kote genyen de kalite itilizatè repo:

  • An itilizatè entèn (yon devlopè entèn k ap travay sou depo sa a), ak pèmisyon ekri sou depo a
  • An itilizatè ekstèn (yon devlopè ekstèn k ap travay sou depo sa a men ki gen pèmisyon lekti sou depo a), sa vle di li pa gen dwa branche depo a epi li oblije travay sou yon fork.

Ann imajine ke toulede se atakè malveyan (oswa yo se yon aktè malveyan ki fè yo pase pou moun). Repo a gen kèk sekrè ladan l epi toulede vle... pou vòlè sekrè depo a epi voye l nan yon sèvè kontwole pa yon pirata enfòmatik. Pou fè sa, y ap pwofite de anpwazonnen an Pipeline Vilnerabilite ekzekisyon nan pipeline.

cicd-demo-min

Nan tou de ka yo (itilizatè ekstèn ak entèn), yo louvri yon Pull Request avèk menm modifikasyon yo:

  • The pipeline epi yo modifye script shell la yo li sekrè a soti nan anviwònman an ak voye l nan yon sèvè kontwole pa yon pirata enfòmatik

Modifikasyon yo ta ka jan sa a:

modifikasyon cicd
cicd-exploit

Toulede itilizatè yo pral kreye yon Pull Request avèk modifikasyon yoLè yo te kreye PR a, GitHub pral egzekite tou de modifikasyon yo (san bezwen revizyon oswa apwobasyon anvan), sa ki lakòz sa ki annapre yo:

Top10-CICD-v1.0-9

Menm bagay pou itilizatè ki ekri ak li, Nan tou de ka yo, yo egzekite D-PPE ak I-PPE., avèk diferans lan ke Itilizatè ki gen dwa li a pa kapab jwenn aksè a sekrè yo. (!!!!) 

Rezon sa a se paske, Nan ka yon PR ki soti nan yon fork, GitHub pa pèmèt aksè a sekrè repo a. Malgre ke itilizatè ki li a pa ka li sekrè yo, li ka toujou egzekite nenpòt lòt pwogram. Yon egzanp atak tipik se kreye PR ki telechaje yon minè kriptografik, kidonk kourè GitHub la ap egzekite minè kriptografik la lè l ap egzekite yon pwogram anpwazonnen. pipeline.

Sa a se pa yon anviwònman ki an sekirite, natirèlman!! Kisa administratè depo a ta ka fè pou evite sa?

Apre kèk rechèch sou Google, administratè depo a deside modifye a pipeline pou yo deklanche sou yon rale_demann_sib evènman. Poukisa? Paske pipelines deklanche sou pull_request_target pa pèmèt egzekisyon pipeline modifikasyon, sa vle di malgre nenpòt modifikasyon itilizatè a fè "orijinal la" pipeline pral egzekite.

Pou nou swiv egzanp nou an, atak la ap menm jan ak anvan an. Kisa k ap rive apre sa? pipeline modifikasyon? 

PPE

Kòm espere, Yo pa egzekite D-PPE a men, paske I-PPE a toujou la, Itilizatè lekti a kapab kounye a jwenn aksè a sekrè depo a !!! 

Ki rezon ki fè itilizatè lekti a gen aksè a sekrè yo kounye a? Malgre ke pipeline pa ka modifye, li toujou posib pou modifye script shell la. Lè yon pipeline deklanche sou pull_request_target, li pral egzekite nan mòd privilejye so li pral tou script shell la, sa ki lakòz script shell la gen aksè a sekrè repo a!!

Mezi prevantif

GitHub bay kèk mezi pou pwoteje kont PR move. 

Règ pwoteksyon branch yo

Avèk GitHub ou ka defini Règ Pwoteksyon Branch sou branch yo chwazi.

Pou branch pwoteje ou yo, ou ka presize yon règleman ki mande pou yon pull request anvan fizyon (epi tou lòt kondisyon tankou yon kantite apwobasyon obligatwa, revizyon nan men pwopriyetè kòd yo, elatriye)

Gen kèk kondisyon ki merite atansyon espesyal:

  • "Pèmèt aktè espesifik yo kontoune obligatwa a pull requests". 
  • "Pa pèmèt ou kontoune paramèt ki anwo yo"

Pandan ke pifò nan kondisyon yo ajoute plis strikte nan règleman an, sa yo detann règleman an e sa ka louvri pòt pou aktivite move, pa egzanp, nan ka kote aktè "privilejye" yo vòlè kalifikasyon.

Restrenn pèmisyon GITHUB_TOKEN yo (privilèj minimòm)

Restrenn pèmisyon jeton GitHub yo sèlman pou sa ki nesesè yo; konsa, menm si atakè yo reyisi konpwomèt ou. pipeline, yo p'ap ka fè anpil bagay.

Evite entèpolasyon chèn karaktè lè w sèvi ak pipeline varyab anviwònman

Chak fwa ou itilize kèk varyab antre nan ou pipeline, konnen byen ke yo ta dwe konsidere yo pa default kòm done "ki pa fyab" (kontni yo kontwole pa itilizatè final la). Gade Aksyon ak Workflow ki pa fyab an sekirite ta dwe apwouve bèso tibebe w la epi Aprann Aksyon Github yo.

Ou ta dwe toujou itilize varyab anviwònman pou mete varyab antre andedan script yo olye pou w itilize entèpolasyon chèn karaktè.

Koule travay ak kondisyon apwobasyon

Pou piblik repozitwa, GitHub pèmèt ou presize kijan pou travay avèk PR "ekstèn" yo

Paramèt òganizasyon GitHub yo ("Òg >> Paramèt >> Aksyon >> Jeneral") pèmèt ou presize kijan pou jere PR ekstèn yo:

fouchèt-rale-min

Pa default, GitHub ap mande apwobasyon PR pou premye kontribitè yo, sa ki rann atak demann move yo pi konplike. Menm si sa, atakè a ta ka genyen konfyans moun k ap kenbe pwojè a, pa egzanp, lè li kontribye kèk enfòmasyon inosan. pull request anvan vrè atak la. 

Nan sans sa a, la 3yèm opsyon an (ki mande apwobasyon pou tout kolaboratè ekstèn yo) ajoute yon pi gwo nivo kontwòl. 

Pou prive Pou repozitwa yo, GitHub bay tou kontwòl itil ni nan nivo òganizasyon an ni nan nivo repozitwa a. 

Fouchèt-rale2

"Kouri workflows yo soti nan Pull Requests" (pa tcheke pa default) pèmèt itilizatè yo egzekite workflows soti nan PR fork (lè l sèvi avèk yon GITHUB_TOKEN ak pèmisyon lekti sèlman epi san aksè a sekrè yo). Lè w chwazi opsyon sa a ansanm ak dènye a ("Mande apwobasyon pou workflows PR fork yo"), ou ka rive jwenn yon règleman menm jan ak depo prive yo (jan yo montre pi wo a). 

Jan nou te wè nan eksplwate PPE a ki soti nan yon itilizatè lekti, pèmèt kouri workflows soti nan fork la pull requests pa an sekirite!!

Opsyon ki rete yo ("Voye jeton ekriti nan workflows yo soti nan fork la pull requests"Ak"Voye sekrè ak varyab nan workflows soti nan pou pull requests") diminye nivo sekirite a aplike nan PR fouchèt. 

Ou ka defini règleman fork sa a swa nan nivo òganizasyon an oswa nan nivo depo a. Si règleman an enfim nan nivo òganizasyon an, li pa ka aktive nan nivo depo a. Men, si règleman an aktive nan nivo òganizasyon an, li ka enfim nan nivo depo a.

OWASP-defi

Rezume

Nou espere ou te wè konsekans ki genyen nan gen kèk pipeline vilnerab a anpwazonman Pipeline Ekzekisyon. Li twò fasil pou commit yon vilnerab pipeline, epi li difisil pou ekri youn ki an sekirite. 

Se poutèt sa, li trè enpòtan pou itilize Xygeni Scanner a pou okouran de vilnerabilite sa yo.

Ou pa ka rezoud yon pwoblèm vilnerabilite si ou pa okouran de egzistans li!! 

Men... Gen yon kesyon ki poko fini... Kijan pou evite I-PPE a? 

Sa a pral sijè pwochen pòs nou an 🙂 … Anpwazonnen endirèkteman Pipeline Ekzekisyon (I-PPE) !!

Anpwazonnen endirèkteman Pipeline Ekzekisyon (I-PPE)

Yon gwo plonje nan CI/CD PipelineVilnerabilite yo (II)

Anpwazònman ak Atifak ak Enjeksyon Kòd

Yon gwo plonje nan CI/CD PipelineVilnerabilite yo (III)

Pwoteksyon kont anpwazònman atifak atravè atestasyon lojisyèl

Yon gwo plonje nan CI/CD PipelineVilnerabilite (IV)
zouti-lojisyèl-sca-tools-konpozisyon-analiz-zouti
Priyorize, korije, epi pwoteje risk lojisyèl ou yo
Jwenn Kont Gratui ou.
Pa gen kat kredi obligatwa.

Pwoteje Devlopman ak Livrezon Lojisyèl ou

avèk Xygeni Product Suite