
Laravel-RCE: CVE-2017-9841
لارافيل-RCE: CVE-2017-9841
CVE-2017-9841 هي ثغرة أمنية حرجة لتنفيذ الأوامر عن بُعد (RCE) تؤثر على مكتبة PHPUnit، المستخدمة على نطاق واسع في الاختبارات الآلية بلغة PHP. تسمح هذه الثغرة للمهاجم بتنفيذ أوامر اعتباطية على الخادم إذا تمكن من الوصول إلى ملف معين من PHPUnit معروض للعامة.
📌 التفاصيل الرئيسية
🔍 كيف تعمل الثغرة
تقع المشكلة في الملف eval-stdin.php، الموجود في:
/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
(أو في مسارات مشابهة حسب هيكل المشروع).
صُمم هذا الملف للاستخدام الداخلي لـ PHPUnit، لكن في العديد من التثبيتات يظل متاحًا للعامة. يقوم كود هذا الملف ببساطة بقراءة البيانات من المدخل القياسي (php://input) وتنفيذها مباشرة باستخدام الدالة eval(). أي أن أي طلب POST يُرسل إلى هذا النقطة النهائية سيتم تقييمه ككود PHP.
مثال على الاستغلال يمكن للمهاجم إرسال طلب HTTP POST إلى الملف الضعيف يحتوي على، على سبيل المثال:
POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
الحمولة 🛡️ " <?php phpinfo(); ?> "
سينفذ الخادم الكود ويعيد الإخراج، مما يؤكد التنفيذ.
وبذلك، يمكن للمهاجم تصعيد الهجوم للحصول على شِل عكسي، أو قراءة ملفات حساسة، أو تعديل البيانات، إلخ.
🛡️ التخفيف
vendor/phpunit/ في بيئات الإنتاج، حيث لا ينبغي أن تكون مكتبات الاختبار متاحة للعامة.eval-stdin.php.📚 سياق إضافي
أصبحت هذه الثغرة معروفة جدًا لأن العديد من المشاريع تترك بطريق الخطأ المجلد vendor متاحًا للعامة. وبما أن PHPUnit هو تبعية شائعة في مشاريع PHP (بما في ذلك أطر العمل مثل Laravel و Symfony إلخ)، فإن التعرض العرضي شائع. لذلك فهو أحد نواقل الهجوم الأولى التي يتم اختبارها في عمليات المسح الأمني الآلي.
إذا كنت مطورًا أو مسؤول أنظمة، تحقق من أن مواقعك في الإنتاج لا تحتوي على الملف eval-stdin.php متاحًا من الخارج.