
#CVE-2022-31630 – استغلال إثبات المفهوم
تحذير: أنشئ هذا الكود لأغراض تعليمية والاختبار في بيئة معملية معزولة فقط. استخدامه على أنظمة أخرى دون إذن غير قانوني وغير مسؤول.
📌 الوصف
CVE-2022-31630 هي ثغرة قراءة خارج الحدود (Out-of-Bounds - OOB) في امتداد GD الخاص بـ PHP، وتحديدًا في الدالة imageloadfont(). تتيح هذه الثغرة للمهاجم الذي يتحكم في ملف الخط الذي يحمّله تطبيق PHP قراءة بيانات خارج حدود المخزن المؤقت المخصص. الآثار المحتملة:
· حجب الخدمة (تعطل) – يتوقف التطبيق عن الاستجابة. · كشف المعلومات – يمكن قراءة بيانات حساسة من الذاكرة (مثل المفاتيح أو الرموز أو أجزاء بيانات أخرى).
إصدارات PHP المتأثرة
· PHP 7.4.x قبل 7.4.33 · PHP 8.0.x قبل 8.0.25 · PHP 8.1.x قبل 8.1.12
PHP 7.4.33 هي أول إصدار تلقى تصحيحًا لهذه الثغرة. يوفر هذا المستودع إثبات المفهوم (PoC) لإظهار الفرق في السلوك بين الإصدار المعرض (≤ 7.4.32) والإصدار المُصحح (≥ 7.4.33).
🔍 التفاصيل الفنية
يعود جذر الثغرة إلى نقص التحقق من المدخلات عند قراءة ملف خطوط GD (تنسيق .gdf). يحتوي ملف الخط على بنية ترويسة كما يلي:
إزاحة البايت الحجم (بايت) الوصف 0 2 الرقم السحري (0x01BE) 2 2 عدد الأحرف (nchars) 4 2 عرض الحرف (width) (بالبكسل) 6 2 ارتفاع الحرف (height) 8 2 عدد البايتات لكل حرف (char_offset)
إذا كانت قيمة width كبيرة جدًا (مثل 65535)، يصبح حساب حجم المخزن المؤقت لتخزين صورة الحرف النقطية خاطئًا. ونتيجةً لذلك، يكون المخزن المؤقت المخصص أصغر من اللازم. عند قيام الدالة imagechar() لاحقًا بقراءة حرف من هذا الخط، فإنها تصل إلى ذاكرة خارج حدود المخزن المؤقت – وهذا ما يُسمى قراءة خارج الحدود (Out-of-Bounds Read).
🧪 متطلبات الاختبار
· Docker (لتشغيل بيئة معزولة) · PHP الإصدار 7.4.32 أو 7.4.33 (يمكن استخدام صورة Docker php:7.4.32-cli / php:7.4.33-cli) · امتداد GD (سيتم تثبيته داخل الحاوية)
🚀 طريقة استخدام PoC
git clone https://github.com/sepkascurty-cpu/php-exploit_cve-2022-31630.git
cd exploit_cve-2022-31630
لاختبار الإصدار المعرض (7.4.32):
docker run -it --rm -v $(pwd):/app php:7.4.32-cli bash
لاختبار الإصدار المُصحح (7.4.33):
docker run -it --rm -v $(pwd):/app php:7.4.33-cli bash
cd /app
apt-get update
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install gd
php exploit_cve-2022-31630.php
📊 مثال على المخرجات
إصدار PHP النتيجة المتوقعة 7.4.32 (معرض) يتعطل البرنامج مع Segmentation Fault أو يحدث تسرب للذاكرة (تظهر بيانات اختبارية من الذاكرة). 7.4.33 (مُصحح) اكتمل التنفيذ بشكل طبيعي، وحُفظ ملف الصورة output.png، دون أي تعطل.
🛡️ التخفيف
· حدّث PHP إلى أحدث إصدار يحتوي على التصحيح: · PHP 7.4.33 أو أحدث · PHP 8.0.25 أو أحدث · PHP 8.1.12 أو أحدث · إذا تعذر التحديث فورًا، فعطّل امتداد GD أو الدالة imageloadfont() إذا لم تكن ضرورية فعلًا. · طبّق مبدأ الامتيازات الأقل على التطبيق لتقليل التأثير في حالة حدوث تسرب للذاكرة.
📚 المراجع
· CVE-2022-31630 في NVD · Commit التصحيح في php-src · إعلانات إصدارات PHP
⚠️ إخلاء المسؤولية
هذا المستودع مُقدَّم لأغراض تعليمية وبحث أمني. الكاتب غير مسؤول عن إساءة استخدام هذا الكود. تأكد من الاختبار فقط في بيئة تملكها أو حصلت على إذن كتابي لاستخدامها.
أُنشئ لمجتمع الأمن السيبراني الإندونيسي.