
PoC لكيفية استغلال ثغرة RCE في DAGs المثال في Apache Airflow <1.10.11
الوصف: تسمح هذه الثغرة بتنفيذ التعليمات البرمجية عن بُعد (RCE) عند تحميل أمثلة DAG الخاصة بـ Airflow، وربما دون مصادقة بالاقتران مع CVE-2020-13927
نسبة الثغرة (CVE Credit): xuxiang من DtDream security
الإصدارات المتأثرة: <1.10.11
رابط الإفصاح: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
رابط CVE من NIST: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
يستغل هذا الكود مثال DAG المعرّض لحقن الأوامر، وذلك باستخدام واجهة برمجة التطبيقات التجريبية (REST API) التي تكون عامة افتراضيًا حتى لو كان واجهة الويب مضبوطة على طلب المصادقة.
python CVE-2020-11978.py <url> <command>
إذا لم يكن example_trigger_target_dag محمّلًا وكان لديك معرفة بالـ DAG المحدد الذي تريد تشغيله، فيمكنك استخدام CVE-2020-11978-min.py كقالب لكيفية تشغيل هذا الـ DAG المحدد.
إذا كنت قد عطّلت الأمثلة بالفعل عن طريق ضبط load_examples=False في الإعدادات، فأنت لست معرضًا للثغرة.
يمكنك التحديث إلى >=1.10.11 أو إزالة الـ DAG المعرّض وهو example_trigger_target_dag للإصدارات <1.10.11
إذا قمت بتشغيل مثيل جديد من Airflow باستخدام >=1.10.11، فإن deny_all يكون مضبوطًا مسبقًا لخيار auth_backend افتراضيًا في airflow.cfg.
[api]
auth_backend = airflow.api.auth.backend.deny_all
لاحظ أن airflow.api.auth.backend.default لا يزال يسمح بالطلبات غير المصادق عليها إلى الواجهة حتى مع >=1.10.11. لذا إذا كان لديك مثيل Airflow قائم بضبط auth_backend = airflow.api.auth.backend.default، فحتى بعد الترقية إلى >=1.10.11، تظل واجهة REST API عامة.
بالنسبة للإصدارات >=2.0.0، فإن الواجهة التجريبية معطّلة، ولكنها تحتوي على واجهة مستقرة أكثر قوة.