
ثاني CVE لا يزال تنفيذًا عن بُعد للتعليمات البرمجية
CVE-2026-35196 · Chamilo LMS · حقن أوامر نظام التشغيل → RCE
الباحث: K
نوع الإفصاح: إفصاح مسؤول
الحالة: تم الإصلاح المنتج المتأثر: Chamilo LMS< 2.0(تم التأكيد على الإصدارv1.11.32)
| الخاصية | التفاصيل |
|---|---|
| المنتج | Chamilo LMS |
| الإصدار المتأثر | < 2.0 (تم التأكيد على الإصدار v1.11.32) |
| الثغرة | حقن أوامر نظام التشغيل |
| CWE | CWE-78 — تحييد غير سليم للعناصر الخاصة المستخدمة في أوامر نظام التشغيل |
| درجة CVSSv3.1 | 8.8 (عالية) |
| المتجه | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| المصادقة المطلوبة | نعم (أي مستخدم مصادق بجلسة مسمومة) |
| نوع الاستغلال | تنفيذ تعليمات برمجية عن بُعد بعد المصادقة |
| الملف المصاب | main/inc/ajax/gradebook.ajax.php |
توجد ثغرة خطيرة من نوع حقن أوامر نظام التشغيل في إجراء export_all_certificates داخل الملف main/inc/ajax/gradebook.ajax.php في Chamilo LMS الإصدار v1.11.32.
يسترد التطبيق رمز المقرر الدراسي عبر api_get_course_id()، والذي يقرأ مباشرة من $_SESSION['_cid']. يتم ربط هذه القيمة المشتقة من الجلسة دون تطهير في استدعاء shell_exec() — دون استخدام escapeshellarg()، ودون تحقق من القائمة البيضاء، ودون فرض نوع البيانات.
يمكن للمهاجم الذي يتمكن من التلاعب أو تسميم متغير _cid في جلسته (عبر تسميم الجلسة، أو سلسلة IDOR، أو بدائيات أخرى للتلاعب بالجلسة) حقن محارف شل وصفية عشوائية وتحقيق تنفيذ تعليمات برمجية عن بُعد كامل بصلاحيات مستخدم خادم الويب (www-data).
الملف المصاب: main/inc/ajax/gradebook.ajax.php
الدالة المصابة: export_all_certificates
عندما يشغّل المستخدم إجراء export_all_certificates، يحاول السكربت تشغيل عملية في الخلفية لمعالجة الشهادات:
$courseCode = api_get_course_id(); // Retrieves the value from $_SESSION['_cid']
$sessionId = api_get_session_id();
// ...
$commandScript = api_get_path(SYS_CODE_PATH).'gradebook/cli/export_all_certificates.php';
$userList = implode(',', $userList);
// Flaw: Variables like $courseCode are passed directly to the shell without escapeshellarg()
shell_exec("php $commandScript $courseCode $sessionId $categoryId $userList > /dev/null &");
نظرًا لأن التطبيق يثق ضمنيًا بمحتويات متغيرات الجلسة ويفشل في تهريبها بشكل صحيح قبل إرسالها إلى شل النظام، يمكن للمهاجم الذي يملك جلسة مُتلاعب بها إلحاق أوامر خبيثة وتنفيذها. على سبيل المثال، إذا احتوى _cid على "; touch /tmp/remote_code_by_k; #"، يصبح الأمر الذي يفسّره شل bash/sh:
php /var/www/chamilo/main/gradebook/cli/export_all_certificates.php ; touch /tmp/remote_code_by_k; # ... > /dev/null &
ينفّذ الشل سكربت CLI ثم الحمولة المُحقنة، ويتجاهل بقية سلسلة الأمر المقصودة.
$_SESSION['_cid']. يمكن تحقيق ذلك بربط هذه الثغرة بثغرة تسميم جلسة، أو بالتلاعب بقيمة رمز المقرر الدراسي عبر IDOR أو معالجة غير آمنة للمعلمات في مكان آخر من التطبيق لتحديث سياق الجلسة._cid على القيمة: "; [MALICIOUS_COMMAND]; #"GET إلى: /main/inc/ajax/gradebook.ajax.php?a=export_all_certificates&cat_id=1 مع ملف تعريف ارتباط الجلسة المسمومة.www-data).| البُعد | الأثر |
|---|---|
| السرية | وصول كامل للقراءة — الكود المصدري، الإعدادات، بيانات اعتماد قاعدة البيانات، /etc/passwd |
| السلامة | كتابة ملفات عشوائية، نشر ويب شيل، التلاعب بقاعدة البيانات |
| التوافر | تعطيل الخدمة، تدمير نظام الملفات، نشر برمجيات الفدية |
| النطاق | عملية خادم الويب (www-data)؛ إمكانية الحركة الجانبية عبر كشف بيانات الاعتماد |
escapeshellarg(): قم بتغليف جميع المتغيرات المشتقة من المستخدم (مثل $courseCode و $sessionId و $userList) بدالة escapeshellarg() في PHP قبل تمريرها إلى shell_exec() لتحييد محارف نظام التشغيل الوصفية العشوائية.$_SESSION['_cid']) مقيّدة النوع ومُطهّرة بحيث تُحجب هجمات "تسميم الجلسة" أو سلاسل IDOR المحتملة عند نقطة الدخول.www-data) بصلاحيات كتابة مقيدة على نظام الملفات، وقلّل وصول التطبيق إلى ثنائيات شل Linux الأساسية للتخفيف من قدرات ما بعد الاستغلال.| المكوّن | التفاصيل |
|---|---|
| نظام التشغيل | Ubuntu Server (Docker) |
| خادم الويب | Apache / Nginx |
| PHP | 7.x / 8.x |
| التطبيق | Chamilo LMS v1.11.32-v2.0 |
| الشل | /bin/sh → bash |
Handle : K
GitHub : https://github.com/kx00007
Focus : Server-Side Vulnerability RCE, CVE Hunting, Vulnerability Research, Exploit Development
Prior : CVE-2026-29041 (Chamilo LMS — Authenticated RCE via File Upload)
⚡حاول بجدية أكبر.