
Apache Spark 4.2.0 - उच्च - रिमोट - विशेषाधिकार अवशेष - स्टैंडअलोन REST spark.authenticate को अनदेखा करता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · spark-rest-auth-bypass
वर्ग: विशेषाधिकार अवशेष पहुँच: रिमोट
Apache Spark 4.2.0 (32f72996) - Apache Software Foundation
Standalone Master REST डिफ़ॉल्ट रूप से चालू पोर्ट 6066 पर है और spark.authenticate को कभी नहीं पढ़ता। CVE-2018-11770 ने REST को डिफ़ॉल्ट रूप से बंद और यदि REST चालू रहते हुए RPC सीक्रेट सेट किया गया हो तो fail-closed होने का वादा किया था। इस पिन ने दोनों को उलट दिया। MASTER_REST_SERVER_ENABLED createWithDefault(true) है। फ़िल्टर केवल MASTER_REST_SERVER_FILTERS हैं, डिफ़ॉल्ट Nil। एक अनधिप्रमाणित POST /v1/submissions/create हमलावर के main को Worker UID के रूप में चलाता है। Worker _SPARK_AUTH_SECRET इंजेक्ट करता है, इसलिए 2018 की "driver without executors" सीमा लागू नहीं होती।
यह 11770 का अवशेष है, नया CVE-2020-9480 RCE नहीं। RPC 7077 अभी भी AuthServerBootstrap इंस्टॉल करता है। spark.authenticate=false वाले क्लस्टर पर जॉब सबमिट प्रलेखित डिफ़ॉल्ट है और यह इस बग का हिस्सा नहीं है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष (CVE-2018-11770 का अवशेष) |
| पहुँच | रिमोट (standalone Master 6066 पर अनधिप्रमाणित HTTP) |
| CWE | CWE-306, CWE-287 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | Apache Spark |
| प्रभावित | 4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8) standalone Master REST |
| प्रमाणीकरण | REST पर कोई नहीं। ऑपरेटर ने spark.authenticate=true सेट किया। REST डिफ़ॉल्ट पर छोड़ा गया। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18900। आधिकारिक spark:4.2.0 इमेज। |
मैंने टैग v4.2.0 पिन किया, peel 32f7299601108917fb01920a54e084595b7b3bf8 (2026-07-11, v4.2.0-rc6)। master नहीं। 4.3 RC नहीं।
6066 पर standalone Master REST तक पहुँचें। कोई Authorization हेडर नहीं। spark.authenticate चालू है। spark.master.rest.filters सेट नहीं है। कम से कम एक Worker लाइव है।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
अनधिप्रमाणित POST /v1/submissions/create | RequestSubmitDriver (Master.scala:402-420) फिर Worker DriverWrapper classForName(mainClass).main | अखंडता (लैब-प्रमाणित): हमलावर के mainClass को Worker UID के रूप में चलाएँ। लैब: driver RUNNING, witness फ़ाइल। |
वही create; Worker CommandUtils.buildLocalCommand | driver env _SPARK_AUTH_SECRET | अखंडता (लैब-प्रमाणित): driver प्रमाणीकृत RPC क्लस्टर में SASL-join कर सकता है। लैब: injected=yes। |
अनधिप्रमाणित GET /v1/submissions/status/{id} | RequestDriverStatus (Master.scala:489-503) | Recon (बनाए गए id के लिए लैब-प्रमाणित): driver स्थिति / worker होस्ट। |
अनधिप्रमाणित GET /v1/submissions/readyz | RequestReadyz | Recon (लैब-प्रमाणित): Master STANDBY नहीं है। |
अनधिप्रमाणित POST /v1/submissions/kill/{id} | RequestKillDriver (Master.scala:422-453) | अखंडता + उपलब्धता (अनुमानित): किसी अन्य टेनेंट के standalone driver को रोकें। वही अनधिप्रमाणित servlet वायरिंग; परीक्षण नहीं किया गया। |
अनधिप्रमाणित POST /v1/submissions/killall | RequestKillAllDrivers (Master.scala:455-478) | उपलब्धता (अनुमानित): प्रत्येक प्रतीक्षारत/चल रहे standalone driver को समाप्त करें। परीक्षण नहीं किया गया। |
अनधिप्रमाणित POST /v1/submissions/clear | RequestClearCompletedDriversAndApps | अखंडता (अनुमानित): पूर्ण driver/app बहीखाता हटाएँ। परीक्षण नहीं किया गया। |
लैब-प्रमाणित बनाम अनुमानित: create, secret inject, own-id status, और readyz लैब हैं। kill / killall / clear उसी अनधिप्रमाणित servlet मैप से अनुमानित हैं।
आवश्यक: standalone Master (YARN/K8s नहीं)। ऑपरेटर ने spark.authenticate=true सेट किया। REST डिफ़ॉल्ट पर छोड़ा गया (spark.master.rest.enabled true, spark.master.rest.filters सेट नहीं)। Master 6066 तक नेटवर्क पथ। कम से कम एक Worker। प्रलेखित-खुला क्लस्टर नहीं (spark.authenticate=false)।
| सतह | क्यों |
|---|---|
spark.authenticate=true के साथ RPC 7077 | AuthServerBootstrap अभी भी आवश्यक। CVE-2020-9480 receive-path बंद रहता है। नया 9480 RCE नहीं। |
| सेट होने पर JWSFilter | spark.master.rest.filters=org.apache.spark.ui.JWSFilter साथ में secretKey। JWT के बिना परीक्षण 403। Opt-in। डिफ़ॉल्ट Nil। |
UI doAs | अभी भी admin आवश्यक। REST UI फ़िल्टर विरासत में नहीं लेता। |
| CVE-2022-33891 UI shell | इस पिन पर id -Gn argv अवशेष बंद। |
| YARN / Kubernetes submit | यह REST सर्वर केवल standalone Master है। |
डिफ़ॉल्ट spark.authenticate=false जॉब सबमिट | FAQ: डिज़ाइन से। यह अवशेष नहीं। |
| Mesos REST | Spark 4.0 में हटा दिया गया। |
CLI spark-submit डिफ़ॉल्ट | अभी भी RPC 7077 का उपयोग करता है (useRest string-defaults false)। spark:// पर --kill / --status हमेशा REST का उपयोग करते हैं। अवशेष सर्वर लिसनर है। |
CVE-2018-11770 का कोड फ़िक्स (SPARK-25088) था: डिफ़ॉल्ट REST बंद, और यदि REST चालू रहते हुए spark.authenticate.secret सेट किया गया हो तो require Master fail-closed। यह पिन: