
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 افتراضيًا، ولا يزال يشغّل childClasspath.clear() عند الإرسال في وضع العنقود مع --proxy-user. هذا هو مسار YARN --jars العام. ثم أضاف Spark 4.0 المفتاح spark.driver.defaultExtraClassPath. يقوم المشغّل دائمًا بإضافة هذا المفتاح في مقدمة -cp الخاص بـ JVM في spark-submit، بما في ذلك وضع العنقود. لا يرى SPARK-41958 ذلك أبدًا.
لا يزال بإمكان مستأجر بنمط Livy تحميل jar مُجهَّز داخل JVM الخاص بـ spark-submit في البوابة. لا يغيّر Hadoop UserGroupInformation.doAs ذلك الـ Unix UID.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (متبقية من CVE-2023-22946 / SPARK-41958) |
| الوصول | عن بُعد (إرسال مهمة بنمط 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 تمرّر --conf و --jars المُجهَّزة إلى spark-submit --proxy-user ... --deploy-mode cluster |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18950 فقط. ملف الشاهد. أداة المشغّل / الإرسال المذكورة. |
امتلاك حساب مستأجر على بوابة Spark متعددة المستأجرين (Livy، Kyuubi، Oozie، وما شابهها) تشغّل spark-submit --proxy-user <tenant> --deploy-mode cluster بمعرّف مستخدم superuser. جهّز jar يمكن لـ JVM الخاص بالبوابة فتحه. أرسل --conf spark.driver.defaultExtraClassPath=<staged jar>. يمكن أن تبقى بوابة SPARK-41958 على false. لا يزال spark-submit -cp المُنشأ يبدأ بذلك الـ jar. تُحمَّل الفئات داخله بمعرّف Unix UID الخاص بالبوابة.
--conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true هو مسار ثانٍ: .internal() للتوثيق فقط، ولا يزال --conf يكتب المفتاح، ثم يحتفظ عنقود YARN بـ --jars على childClasspath. يبقى CVE-2023-22946 العام هو مسار YARN الافتراضي --jars الذي يغطيه clear() بالفعل. هذه المتبقية هي defaultExtraClassPath غير المُقيَّد.
انتحال Hadoop بعد إرسال نظيف لا يزال هو المستخدم الوكيل لـ YARN AM / مشغّل k8s. هذه المتبقية هي JVM الخاص بالبوابة فقط.
| الطريقة | المصب | الاستطلاع | السلامة | التوافر | المصدر |
|---|---|---|---|---|---|
إرسال بنمط Livy --proxy-user + عنقود yarn/k8s/standalone + --conf spark.driver.defaultExtraClassPath=<staged local jar>، مع ترك علم SPARK-41958 على false | SparkSubmitCommandBuilder.buildSparkSubmitCommand SparkSubmitCommandBuilder.java:317-327 أول مدخل في -cp | سرد/قراءة الملفات التي يمكن لـ UID الخاص بالبوابة قراءتها (مجلد keytab، spark-defaults، التجهيز المحلي). هوية Hadoop لـ RPCs اللاحقة لا تزال المستخدم الوكيل. | تحميل فئات المستأجر داخل JVM الخاص بـ spark-submit. يبقى Unix UID هو البوابة (superuser الوكيل في Hadoop). المختبر: defaultExtraClassPath-on-cp=yes childClasspath-cleared=yes lab.WitnessMain كتب SPARK-PROXYUSER-CLASSPATH-WITNESS. مُستنتَج من فئة CVE العامة: تراكب موارد Hadoop Configuration / البحث عن تنفيذ FileSystem بذلك الـ UID. | انهيار JVM الإرسال إذا رمى التراكب استثناءً. ليس الفئة. | تحميل مُثبَت مختبريًا + كتابة شاهد كـ -cp المُنشأ. تراكب Hadoop مُستنتَج. تمرير --conf في Livy/Kyuubi مُستنتَج (تلك الشجرات ليست هذا التثبيت). |
نفس الإرسال مع --conf spark.submit.proxyUser.allowCustomClasspathInClusterMode=true بالإضافة إلى --jars / المورد الأساسي | SparkSubmit.prepareSubmitEnvironment SparkSubmit.scala:333-336,738-743,917-924 ثم runMain :980-987 | نفس الاستطلاع كما في المسار A، على URLClassLoader الفرعي بدلًا من محمّل النظام. | الاحتفاظ بـ --jars على childClasspath حتى يعمل addJarToClasspath. المختبر: conf-flag-keeps-jars=yes. | نفسه. | الاحتفاظ بـ childClasspath مُثبَت مختبريًا. ليس إعادة تسجيل لمسار YARN --jars العام الذي يغطيه clear() عندما يبقى العلم على false. |
مُثبَت مختبريًا مقابل مُستنتَج: يحتوي -cp المُنشأ على defaultExtraClassPath في وضع العنقود؛ لا يزال childClasspath.clear() يعمل على العلم الافتراضي؛ يُحذف spark.driver.extraClassPath في وضع العنقود؛ يُمسح --jars مع العلم على false؛ فئة شاهد على ذلك -cp تكتب الأوراكل. تنفيذ فئة إعداد Hadoop هو آلية CVE-2023-22946 العامة، ولم يُعَد تشغيله هنا. تمرير Livy/Kyuubi لـ --conf هو البنية التي توثّقها تلك المشاريع.
| الطريقة | المصب | تبقى مغلقة |
|---|---|---|
--driver-class-path / spark.driver.extraClassPath في وضع العنقود | SparkSubmitCommandBuilder.java:318-319 | لا يُضاف إلى -cp الخاص بـ spark-submit. المختبر: extraClassPath-omitted=yes. يذهب إلى مشغّل العنقود، الذي يبدأه YARN/K8s كمستخدم وكيل. |
العنقود الافتراضي + --proxy-user + --jars دون قلب العلم ودون defaultExtraClassPath | SparkSubmit.scala:917-918 childClasspath.clear() | يُفرَّغ child classpath في عنقود YARN/standalone/k8s. المختبر: childClasspath-cleared=yes في مسار التحكم. يبقى CVE-2023-22946 العام هو هذا المسار. |
مشغّل وضع العميل --proxy-user على البوابة | قسم Proxy User في docs/security.md | موثّق: JVM مشغّل وضع العميل هو superuser. يقول المورّد إنه ليس CVE. يُطلب من Livy/Kyuubi فرض وضع العنقود. |
حاوية مشغّل وضع عنقود K8s (spark.kubernetes.submitInDriver=true) التي تضيف . إلى classpath | SparkSubmit.scala:420-431 SPARK-43540 | spark-submit ثانٍ داخل pod المشغّل، وليس مضيف Livy. UID الخاص بالـ pod هو مستخدم الحاوية. |
spark.driver.extraJavaOptions في وضع العنقود | SparkSubmitCommandBuilder.java:341-357 | لا يُطبَّق على JVM الخاص بـ spark-submit. SPARK_SUBMIT_OPTS هو بيئة البوابة، وليس --conf الخاص بالمستأجر. |
| YARN AM / مشغّل k8s للتطبيق المُرسَل | انتحال Hadoop بعد إرسال نظيف | لا يزال المستخدم الوكيل لإطلاق العنقود. هذه المتبقية هي JVM الخاص بالبوابة فقط. |
| إرسال مهمة بدون مصادقة / Connect SQL / تحميل نموذج ML | SECURITY.md FAQ / docs/ml-security.md | حسب التصميم. ليست هذه المتبقية. |