Kafka Connect 4.3.1 - عالي - بقايا classpath في FileStream على Windows - قراءة/كتابة ملفات بدون مصادقة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · kafka-connect-filestream-win
Apache Kafka Connect 4.3.1 (26b251a) - Apache Software Foundation
KAFKA-13748 أزال FileStream من Unix Connect CLASSPATH حتى لا يتمكن REST غير المصادق من فتح الملفات المحلية. لم يحصل مشغّل Windows على هذا الاستبعاد أبدًا. لا تزال الحزمة المضغوطة تشحن connect-file إلى libs/. يقوم kafka-run-class.bat بدمج كل ملف jar هناك.
POST /connectors غير المصادق على عامل تم تشغيله عبر Windows يقرأ ويضيف ملفات يمكن لـ Connect UID الوصول إليها.
| ID | لا يوجد CVE بعد |
| CWE | CWE-552، CWE-1188 |
| CVSS | High: 9.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Product | Apache Kafka Connect |
| Affected | 4.3.1 (26b251a)؛ Windows bin/windows/kafka-run-class.bat. Unix .sh يستبعد connect-file بالفعل. |
| Auth | Connect REST غير مصادق (افتراضي listeners=http://:8083، بدون rest.extension.classes) |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 فقط |
وجّه متصفحًا أو curl إلى Connect REST على عامل تم تشغيله بملفات Windows .bat المشحونة. أنشئ مصدر FileStream. يفتح العامل أي مسار تضعه في file وينتج البايتات إلى موضوع Kafka. أنشئ مصرف FileStream. ينشئ العامل أو يضيف أي مسار تضعه في file. لا توجد قائمة سماح.
مشغّل Unix يسقط بالفعل connect-file.*.jar. نفس JSON ضد connect-distributed.sh الأصلي يعطي 400: موصل غير معروف. apache/kafka Docker الافتراضي هو وسيط Linux. هذه البقايا هي Windows CLASSPATH.
قرأت قائمة CVE الخاصة بـ Kafka أولاً: JAAS Jndi/Ldap، قائمة سماح OAUTHBEARER URL، DefaultJwtValidator، ConfigProvider، JIRA العام لـ FileStream. لا يزال kafka-run-class.sh على Unix يحتوي على الاستبعاد:
regex="(-(test|test-sources|src|scaladoc|javadoc)\.jar|jar.asc|connect-file.*\.jar)$"
cc_pkg أيضًا يحذف file. ثم فتحت نسخة Windows:
for %%p in (api runtime file json tools) do (
for %%i in ("%BASE_DIR%\connect\%%p\build\libs\connect-%%p*.jar") do (
call :concat "%%i"
)
)
rem Classpath addition for release
for %%i in ("%BASE_DIR%\libs\*") do (
call :concat "%%i"
)
لا يزال build.gradle ينسخ connect-file إلى libs/. تقول الوثائق إن FileStream ليس على CLASSPATH الافتراضي. هذه الجملة صحيحة بالنسبة لـ .sh.
كتب Doyensec هذه الفئة في 2022. كان KAFKA-13748 / PR 11908 إصلاح Unix. لم يتم تحديث .bat أبدًا.
المنعطفات الخاطئة المسجلة بالفعل: Wine؛ تنفيذ .bat على macOS؛ اعتبار plugin.path هي الثغرة (إنها فارغة على كلا العاملين)؛ الادعاء بأن Linux Docker هو هذه الثغرة؛ اعتبار 201 على Unix نجاحًا. المسرحية: reverse shell. الدليل هو Unix 400 بالإضافة إلى سطر شاهد في ملف المصرف.
cd lab
./run.sh
Unix REST 127.0.0.1:18083 هو connect-distributed.sh الأصلي. محاكاة Windows 127.0.0.1:18084 هي libs/* غير المفلترة، حلقة libs\* الخاصة بـ .bat للإصدار. ليس Wine. الوسيط هو apache/kafka:4.3.1 على شبكة compose. اربطه بـ loopback.
unix-filestream=absent unix-post=400
win-filestream=present win-source=201 win-sink=201 pwned=yes
SUCCESS kafka-connect-filestream-win ... KAFKA-CONNECT-FILESTREAM-WIN-WITNESS
أعطِ kafka-run-class.bat نفس استبعاد connect-file الذي يمتلكه .sh بالفعل. احذف file من حلقة gradle-from-source for %%p in (api runtime file json tools). استمر في شحن الـ jar للأشخاص الذين يضبطون plugin.path عن قصد.
26b251a451ce941d3d7a55e6487bcb7f16b5ad48)bin/windows/kafka-run-class.bat · bin/kafka-run-class.shFileStreamSourceTask.java · FileStreamSinkTask.java