
تطبيق مثال، عرضة لثغرة CVE-2023-32692 (حقن قواعد التحقق في إطار عمل PHP CodeIgniter)
CVE-2023-32692 هي ثغرة حقن برمجي في إطار عمل PHP CodeIgniter 4، وتؤثر على الإصدارات من 4.0.0 حتى 4.3.4. تم إصلاحها في الإصدار 4.3.5 (صدر في يونيو 2023). هذه بيئة تجريبية لمن يريد التجربة بها.
يمكن العثور على تفاصيل الثغرة في مدونة MOGWAI LABS.
يحتوي هذا المستودع على تطبيق CodeIgniter 4 بسيط يوضح الثغرة. يأتي مع إعداد Dev Container بحيث يمكنك تشغيله مباشرة من VS Code (أو أي محرر متوافق) دون الحاجة إلى تثبيت PHP محليًا.
تستخدم حاوية Docker الأساسية PHP 8.3 وتثبّت امتداد XDebug لتمكين التصحيح. يتم تثبيت وحدات PHP الإضافية المطلوبة من إطار عمل CodeIgniter كـ "ميزات Devcontainer" محلية، بشكل أساسي لأنني أردت تجربة تلك الميزة.
يتم تضمين امتدادات VS Code التالية (جميعها مثبتة داخل الحاوية، وليس في نسختك من VS Code):
| الامتداد | الغرض |
|---|---|
xdebug.php-debug | دعم PHP XDebug — تنقّل خطوة بخطوة في مسار الكود المعرض للثغرة |
bmewburn.vscode-intelephense-client | PHP Intelephense للتنقل في الكود |
humao.rest-client | عميل HTTP لإرسال قوالب الطلبات المضمنة |
composer عند بناء الحاوية، ولا حاجة للقيام بأي شيء هنا.cp env .env
تتضمن بيئة Dev Container خادم Apache، لكن خادم التطوير المدمج في PHP كافٍ لهذا الإثبات (PoC). افتح طرفية داخل VS Code ونفّذ:
./spark serve --host 0.0.0.0
سيكون التطبيق متاحًا على http://localhost:8080. يمكنك الوصول إليه من خارج الحاوية باستخدام متصفح الويب العادي.
يقوم ملف .vscode/launch.json بتهيئة XDebug للاستماع على منفذ TCP 9003 (وهو مضبوط أيضًا في Dockerfile الخاص بـ Dev Container):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
ابدأ مستمع التصحيح قبل تشغيل خادم تطوير PHP: انقر على أيقونة "Run and Debug" في الشريط الجانبي لـ VS Code واضغط على زر التشغيل بجوار "Listen for Xdebug".

تم تنفيذ نقطة النهاية المعرضة للثغرة في app/Controllers/Poc.php. وهي تكشف عن مسارين:
| المسار | الوصف |
|---|---|
POST /poc/update | نقطة نهاية معرضة للثغرة — تستخدم قواعد تحقق قائمة على السلاسل النصية |
POST /poc/updateSafe | نقطة نهاية آمنة — تستخدم قواعد تحقق قائمة على المصفوفات |
ضع نقطة توقف في Poc::update() وتتبّع كيف يتم توسيع العنصر النائب {id} إلى سلسلة القواعد داخل محرك التحقق في CodeIgniter. الكود البرمجي ذو الصلة موجود في vendor/codeigniter4/framework/system/Validation/Validation.php.
يحتوي مجلد http_requests/ على قوالب جاهزة للاستخدام لامتداد VS Code REST Client:
| الملف | الوصف |
|---|---|
reqular_request.http | طلب شرعي أساسي — لا حقن، ويمر التحقق بشكل طبيعي |
افتح أي ملف .http وانقر على Send Request أعلى كتلة الطلب لتنفيذه.
basic_poc.http | يحقن قواعد تحقق إضافية عبر معامل id |
system_call.http | يستغل الحقن لاستدعاء system() وتنفيذ أمر نظام (touch /tmp/pwn) |