
Apache Spark 4.2.0 - उच्च - रिमोट - विशेषाधिकार अवशेष - proxy-user defaultExtraClassPath
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · spark-proxyuser-classpath
वर्ग: विशेषाधिकार अवशेष (CVE-2023-22946 / SPARK-41958 का अवशेष) पहुँच: रिमोट
Apache Spark 4.2.0 (32f72996) - Apache Software Foundation
CVE-2023-22946 / SPARK-41958 अभी भी spark.submit.proxyUser.allowCustomClasspathInClusterMode को डिफ़ॉल्ट रूप से false रखता है और --proxy-user क्लस्टर सबमिट पर अभी भी childClasspath.clear() चलाता है। यह सार्वजनिक YARN --jars पथ है। फिर Spark 4.0 ने spark.driver.defaultExtraClassPath जोड़ा। लॉन्चर हमेशा उस key को spark-submit JVM -cp में पहले जोड़ता है, क्लस्टर मोड सहित। SPARK-41958 इसे कभी नहीं देखता।
Livy-शैली का tenant अभी भी gateway spark-submit JVM के अंदर एक staged jar लोड कर सकता है। Hadoop UserGroupInformation.doAs उस Unix UID को नहीं बदलता।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष (CVE-2023-22946 / SPARK-41958 का अवशेष) |
| पहुँच | रिमोट (gateway पर Livy-शैली --proxy-user जॉब सबमिट) |
| CWE | CWE-269, CWE-427 |
| CVSS | उच्च: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | Apache Spark |
| प्रभावित | Apache Spark 4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8) |
| प्रमाणीकरण | Livy / Kyuubi / Oozie-शैली gateway का प्रमाणीकृत tenant जो --conf और staged --jars को spark-submit --proxy-user ... --deploy-mode cluster में अग्रेषित करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18950। Witness फ़ाइल। उद्धृत लॉन्चर / सबमिट वॉक का गैजेट। |
एक multi-tenant Spark gateway (Livy, Kyuubi, Oozie, और साथी) पर tenant खाता रखें जो superuser UID के रूप में spark-submit --proxy-user <tenant> --deploy-mode cluster चलाता है। एक jar stage करें जिसे gateway JVM खोल सके। --conf spark.driver.defaultExtraClassPath=<staged jar> भेजें। SPARK-41958 गेट false रह सकता है। निर्मित spark-submit -cp अभी भी उस jar से शुरू होता है। इसमें मौजूद क्लासें gateway Unix UID के रूप में लोड होती हैं।
--conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true एक दूसरा रास्ता है: .internal() केवल docs के लिए है, --conf अभी भी key लिखता है, और तब YARN क्लस्टर --jars को childClasspath पर रखता है। सार्वजनिक CVE-2023-22946 YARN डिफ़ॉल्ट --jars पथ बना हुआ है जिसे clear() पहले से कवर करता है। यह अवशेष ungated defaultExtraClassPath है।
स्वच्छ सबमिट के बाद Hadoop impersonation अभी भी YARN AM / k8s driver के लिए proxy user है। यह अवशेष केवल gateway JVM है।
| विधि | सिंक | रेकॉन | अखंडता | उपलब्धता | उद्गम |
|---|---|---|---|---|---|
Livy-शैली सबमिट --proxy-user + yarn/k8s/standalone क्लस्टर + --conf spark.driver.defaultExtraClassPath=<staged local jar>, SPARK-41958 फ़्लैग false छोड़ा गया | SparkSubmitCommandBuilder.buildSparkSubmitCommand SparkSubmitCommandBuilder.java:317-327 -cp पहली प्रविष्टि | gateway UID जिन फ़ाइलों को पढ़ सकता है उन्हें सूचीबद्ध/पढ़ें (keytab dir, spark-defaults, local staging)। बाद के RPC का Hadoop identity अभी भी proxy user है। | spark-submit JVM के अंदर tenant क्लासें लोड करें। Unix UID gateway (Hadoop proxy superuser) ही रहता है। लैब: defaultExtraClassPath-on-cp=yes childClasspath-cleared=yes lab.WitnessMain ने SPARK-PROXYUSER-CLASSPATH-WITNESS लिखा। सार्वजनिक CVE वर्ग से अनुमानित: उस UID के रूप में Hadoop Configuration resource overlay / FileSystem impl lookup। | overlay फेंकने पर सबमिट JVM क्रैश। क्लास नहीं। | लैब-प्रमाणित लोड + निर्मित -cp के रूप में witness लेखन। Hadoop overlay अनुमानित। Livy/Kyuubi --conf passthrough अनुमानित (वे ट्री इस pin के नहीं हैं)। |
वही सबमिट --conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true के साथ और --jars / प्राथमिक resource | SparkSubmit.prepareSubmitEnvironment SparkSubmit.scala:333-336,738-743,917-924 फिर runMain :980-987 | walk A जैसा ही रेकॉन, system loader के बजाय child URLClassLoader पर। | --jars को childClasspath पर रखें ताकि addJarToClasspath चले। लैब: conf-flag-keeps-jars=yes। | वही। | लैब-प्रमाणित childClasspath keep। सार्वजनिक YARN --jars पथ की पुनः-फाइलिंग नहीं जिसे फ़्लैग false रहने पर clear() कवर करता है। |
लैब-प्रमाणित बनाम अनुमानित: निर्मित -cp में क्लस्टर मोड में defaultExtraClassPath शामिल है; डिफ़ॉल्ट फ़्लैग पर childClasspath.clear() अभी भी चलता है; क्लस्टर में spark.driver.extraClassPath छोड़ा गया है; फ़्लैग false के साथ --jars साफ़ किया जाता है; उस -cp पर एक witness क्लास oracle लिखती है। Hadoop config-class निष्पादन सार्वजनिक CVE-2023-22946 तंत्र है, यहाँ पुनः नहीं चलाया गया। Livy/Kyuubi द्वारा --conf अग्रेषित करना वह आर्किटेक्चर है जिसे वे प्रोजेक्ट दस्तावेज़ित करते हैं।
| विधि | सिंक | बंद रहता है |
|---|---|---|
क्लस्टर मोड में --driver-class-path / spark.driver.extraClassPath | SparkSubmitCommandBuilder.java:318-319 | spark-submit -cp में नहीं जोड़ा जाता। लैब: extraClassPath-omitted=yes। क्लस्टर driver को जाता है, जिसे YARN/K8s proxy user के रूप में शुरू करते हैं। |
डिफ़ॉल्ट क्लस्टर + --proxy-user + --jars बिना फ़्लैग पलटे और बिना defaultExtraClassPath | SparkSubmit.scala:917-918 childClasspath.clear() | YARN/standalone/k8s क्लस्टर child classpath खाली। लैब: नियंत्रण walk पर childClasspath-cleared=yes। सार्वजनिक CVE-2023-22946 यही पथ बना हुआ है। |
gateway पर --proxy-user client mode driver | docs/security.md Proxy User अनुभाग | दस्तावेज़ित: client-mode driver JVM superuser है। विक्रेता कहता है यह CVE नहीं है। Livy/Kyuubi को cluster mode बाध्य करने के लिए कहा जाता है। |
K8s cluster-mode driver container (spark.kubernetes.submitInDriver=true) classpath में . जोड़ना | SparkSubmit.scala:420-431 SPARK-43540 | driver pod के अंदर दूसरा spark-submit, Livy host नहीं। Pod UID container user है। |
क्लस्टर मोड में spark.driver.extraJavaOptions | SparkSubmitCommandBuilder.java:341-357 | spark-submit JVM पर लागू नहीं। SPARK_SUBMIT_OPTS gateway env है, tenant --conf नहीं। |
| सबमिट किए गए ऐप का YARN AM / k8s driver | स्वच्छ सबमिट के बाद Hadoop impersonation | क्लस्टर लॉन्च के लिए अभी भी proxy user। यह अवशेष केवल gateway JVM है। |
| Unauth जॉब सबमिट / Connect SQL / ML मॉडल लोड | SECURITY.md FAQ / docs/ml-security.md | डिज़ाइन से। यह अवशेष नहीं। |