
Apache Spark 4.2.0 - Hoch - Remote - Privilegien-Rest - proxy-user defaultExtraClassPath
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · spark-proxyuser-classpath
Klasse: Privilegien-Überbleibsel (Überbleibsel von CVE-2023-22946 / SPARK-41958) Reichweite: Remote
Apache Spark 4.2.0 (32f72996) - Apache Software Foundation
CVE-2023-22946 / SPARK-41958 setzt spark.submit.proxyUser.allowCustomClasspathInClusterMode weiterhin standardmäßig auf false und führt weiterhin childClasspath.clear() bei --proxy-user-Cluster-Submit aus. Das ist der öffentliche YARN---jars-Pfad. Spark 4.0 fügte dann spark.driver.defaultExtraClassPath hinzu. Der Launcher stellt diesen Schlüssel immer dem spark-submit-JVM--cp voran, auch im Cluster-Modus. SPARK-41958 sieht ihn nie.
Ein Mandant im Livy-Stil kann weiterhin ein bereitgestelltes Jar innerhalb der Gateway-spark-submit-JVM laden. Hadoops UserGroupInformation.doAs ändert diese Unix-UID nicht.
| ID | noch keine CVE |
| Klasse | Privilegien-Überbleibsel (Überbleibsel von CVE-2023-22946 / SPARK-41958) |
| Reichweite | Remote (Livy-artiger --proxy-user-Job-Submit über das Gateway) |
| CWE | CWE-269, CWE-427 |
| CVSS | Hoch: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Produkt | Apache Spark |
| Betroffen | Apache Spark 4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8) |
| Auth | authentifizierter Mandant eines Livy- / Kyuubi- / Oozie-artigen Gateways, das --conf und bereitgestellte --jars an spark-submit --proxy-user ... --deploy-mode cluster weiterleitet |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1:18950. Witness-Datei. Gadget der zitierten Launcher- / Submit-Pfade. |
Ein Mandantenkonto auf einem mandantenfähigen Spark-Gateway (Livy, Kyuubi, Oozie und Verwandte) besitzen, das spark-submit --proxy-user <tenant> --deploy-mode cluster als Superuser-UID ausführt. Ein Jar bereitstellen, das die Gateway-JVM öffnen kann. --conf spark.driver.defaultExtraClassPath=<staged jar> senden. Das SPARK-41958-Gate kann false bleiben. Das konstruierte spark-submit -cp beginnt weiterhin mit diesem Jar. Klassen darin werden als die Unix-UID des Gateways geladen.
--conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true ist ein zweiter Pfad: .internal() ist nur dokumentarisch, --conf schreibt den Schlüssel weiterhin, und der YARN-Cluster behält dann --jars auf childClasspath. Die öffentliche CVE-2023-22946 bleibt der YARN-Standard---jars-Pfad, den clear() bereits abdeckt. Dieses Überbleibsel ist das ungegatete defaultExtraClassPath.
Hadoop-Impersonation nach einem sauberen Submit ist weiterhin der Proxy-Benutzer für den YARN-AM / k8s-Treiber. Dieses Überbleibsel betrifft nur die Gateway-JVM.
| Methode | Sink | Recon | Integrität | Verfügbarkeit | Provenienz |
|---|---|---|---|---|---|
Livy-artiger Submit --proxy-user + yarn/k8s/standalone cluster + --conf spark.driver.defaultExtraClassPath=<staged local jar>, SPARK-41958-Flag bleibt false | SparkSubmitCommandBuilder.buildSparkSubmitCommand SparkSubmitCommandBuilder.java:317-327 -cp erster Eintrag | Dateien auflisten/lesen, die die Gateway-UID lesen kann (Keytab-Verzeichnis, spark-defaults, lokales Staging). Die Hadoop-Identität späterer RPCs ist weiterhin der Proxy-Benutzer. | Mandanten-Klassen innerhalb der spark-submit-JVM laden. Die Unix-UID bleibt das Gateway (Hadoop-Proxy-Superuser). Lab: defaultExtraClassPath-on-cp=yes childClasspath-cleared=yes lab.WitnessMain schrieb SPARK-PROXYUSER-CLASSPATH-WITNESS. Abgeleitet aus der öffentlichen CVE-Klasse: Hadoop-Configuration-Ressourcen-Overlay / FileSystem-Impl-Lookup als diese UID. | Submit-JVM-Absturz, wenn das Overlay eine Exception wirft. Nicht die Klasse. | Lab-bewiesenes Laden + Witness-Schreiben als konstruiertes -cp. Hadoop-Overlay abgeleitet. Livy/Kyuubi---conf-Passthrough abgeleitet (diese Bäume sind nicht dieser Pin). |
Derselbe Submit mit --conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true plus --jars / primäre Ressource | SparkSubmit.prepareSubmitEnvironment SparkSubmit.scala:333-336,738-743,917-924 dann runMain :980-987 | Gleiches Recon wie Pfad A, auf dem Child-URLClassLoader statt dem System-Loader. | --jars auf childClasspath behalten, damit addJarToClasspath läuft. Lab: conf-flag-keeps-jars=yes. | Gleich. | Lab-bewiesenes Beibehalten von childClasspath. Keine erneute Meldung des öffentlichen YARN---jars-Pfads, den clear() abdeckt, wenn das Flag false bleibt. |
Lab-bewiesen vs. abgeleitet: konstruiertes -cp enthält defaultExtraClassPath im Cluster-Modus; childClasspath.clear() läuft weiterhin beim Standard-Flag; spark.driver.extraClassPath wird im Cluster weggelassen; --jars mit Flag false wird geleert; eine Witness-Klasse auf diesem -cp schreibt das Orakel. Die Ausführung der Hadoop-Config-Klasse ist der öffentliche CVE-2023-22946-Mechanismus, hier nicht erneut ausgeführt. Livy/Kyuubi, die --conf weiterleiten, ist die Architektur, die diese Projekte dokumentieren.