
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 افتراضيًا وبالفشل الآمن (fail-closed) إذا تم تعيين سر RPC بينما كان REST مفعّلًا. وقد عكس هذا الإصدار كلا الأمرين. MASTER_REST_SERVER_ENABLED هو createWithDefault(true). المرشحات هي فقط MASTER_REST_SERVER_FILTERS، والقيمة الافتراضية Nil. طلب POST /v1/submissions/create غير المُصادَق عليه يشغّل main الخاص بالمهاجم بصلاحية Worker UID. يحقن Worker المتغير _SPARK_AUTH_SECRET، لذا فإن قيد "driver بدون executors" لعام 2018 لم يعد صامدًا.
هذه بقية متبقية من 11770، وليست RCE جديدة من نوع CVE-2020-9480. لا يزال RPC 7077 يثبّت AuthServerBootstrap. إرسال المهام على عنقود بـ spark.authenticate=false هو الافتراضي الموثّق وليس هذه الثغرة.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (بقية من CVE-2018-11770) |
| الوصول | عن بُعد (HTTP غير مُصادَق عليه إلى Standalone Master 6066) |
| CWE | CWE-306، CWE-287 |
| CVSS | مرتفع: 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، والالتزام 32f7299601108917fb01920a54e084595b7b3bf8 (2026-07-11، v4.2.0-rc6). ليس master. وليس 4.3 RC.
الوصول إلى standalone Master REST على 6066. بدون ترويسة 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، ملف شاهد. |
نفس create؛ Worker CommandUtils.buildLocalCommand | بيئة driver _SPARK_AUTH_SECRET | السلامة (مُثبت مختبريًا): يمكن للـ driver الانضمام عبر SASL إلى عنقود RPC المُصادَق عليه. المختبر: injected=yes. |
GET /v1/submissions/status/{id} غير مُصادَق عليه | RequestDriverStatus (Master.scala:489-503) | استطلاع (مُثبت مختبريًا للمعرّف المُنشأ): حالة driver / مضيف worker. |
GET /v1/submissions/readyz غير مُصادَق عليه | RequestReadyz | استطلاع (مُثبت مختبريًا): Master ليس في حالة STANDBY. |
POST /v1/submissions/kill/{id} غير مُصادَق عليه | RequestKillDriver (Master.scala:422-453) | السلامة + التوافر (مُستنتج): إيقاف driver standalone لمستأجر آخر. نفس توصيلات servlet غير المُصادَق عليها؛ لم يُختبر. |
POST /v1/submissions/killall غير مُصادَق عليه | RequestKillAllDrivers (Master.scala:455-478) | التوافر (مُستنتج): إنهاء كل driver standalone في حالة انتظار/تشغيل. لم يُختبر. |
POST /v1/submissions/clear غير مُصادَق عليه | RequestClearCompletedDriversAndApps | السلامة (مُستنتج): إسقاط سجلات driver/app المكتملة. لم يُختبر. |
مُثبت مختبريًا مقابل مُستنتج: create، وحقن السر، وحالة المعرّف الخاص، وreadyz كلها مختبريًا. kill / killall / clear مُستنتجة من نفس خريطة servlet غير المُصادَق عليها.
يتطلب: standalone Master (وليس YARN/K8s). المشغّل عيّن spark.authenticate=true. تُرك REST على الافتراضي (spark.master.rest.enabled صحيح، spark.master.rest.filters غير معيّن). مسار شبكي إلى Master 6066. وجود Worker واحد على الأقل. ليس العنقود المفتوح الموثّق (spark.authenticate=false).
| السطح | السبب |
|---|---|
RPC 7077 مع spark.authenticate=true | لا يزال AuthServerBootstrap مطلوبًا. يبقى مسار الاستقبال في CVE-2020-9480 مغلقًا. ليست RCE جديدة من نوع 9480. |
| JWSFilter عند تعيينه | spark.master.rest.filters=org.apache.spark.ui.JWSFilter بالإضافة إلى secretKey. الاختبارات تُرجع 403 بدون JWT. اختياري. الافتراضي Nil. |
UI doAs | لا يزال يتطلب admin. لا يرث REST مرشحات UI. |
| CVE-2022-33891 UI shell | بقية argv الخاصة بـ id -Gn مغلقة في هذا الإصدار. |
| إرسال YARN / Kubernetes | خادم REST هذا خاص بـ standalone Master فقط. |
إرسال المهام الافتراضي بـ spark.authenticate=false | الأسئلة الشائعة: بحسب التصميم. ليست هذه البقية. |
| Mesos REST | أُزيل في Spark 4.0. |
الافتراضي في CLI spark-submit | لا يزال يستخدم RPC 7077 (useRest افتراضه النصي false). --kill / --status على spark:// يستخدمان REST دائمًا. البقية هي مستمع الخادم. |
كان الإصلاح البرمجي لـ CVE-2018-11770 (SPARK-25088) هو: REST معطّل افتراضيًا، وrequire أن يفشل Master بشكل آمن إذا تم تعيين spark.authenticate.secret بينما REST مفعّل. هذا الإصدار: