
إثبات مفهوم يوضح ثغرة حقن أوامر في أداة MS-Agent Shell، مما يتيح تنفيذ أوامر عشوائية وفتح قشرة عكسية عبر تجاوز الفحوصات الأمنية باستخدام بايثون.
تم تحديد ثغرة حرجة في حقن الأوامر (CVE-2026–2256، CVSS X.X) في مكوّن أداة Shell ضمن إطار عمل MS-Agent الإصدار 1.5.2. تنشأ الثغرة من عدم كفاية تعقيم المدخلات المتأثرة بالمستخدم والتي تُمرَّر مباشرة إلى سياق تنفيذ الأوامر، مما يتيح تقييم أوامر غير مقصودة. يمكن للمهاجم استغلال هذا الخلل عن طريق حقن محتوى مُصمَّم في مصادر البيانات التي يستهلكها الوكيل، مثل المطالبات أو المستندات أو السجلات أو مدخلات البحث، دون الحاجة إلى وصول مباشر إلى الأوامر أو إساءة استخدام صريحة من المشغّل. ونتيجة لذلك، يمكن تنفيذ أوامر عشوائية بصلاحيات عملية MS-Agent على النظام المضيف كجزء من تدفق التنفيذ الطبيعي للوكيل، مما قد يؤدي إلى اختراق كامل للنظام المضيف.
أداة Shell هي مكوّن داخلي في MS-Agent يتيح للوكلاء تنفيذ أوامر نظام التشغيل على المضيف. وهي مصممة لدعم سير عمل الوكيل مثل إدارة الملفات، والتنقل بين الدلائل، ومهام الأتمتة من خلال تفويض تنفيذ الأوامر إلى نظام التشغيل الأساسي.
يوضح هذا الإثبات المبسّط كيف يمكن تجاوز دالة check_safe() في أداة Shell الخاصة بـ ms-agent لإنشاء قشرة عكسية باستخدام Python.
nc (netcat)قم بتشغيل الإثبات للتحقق من أن الأمر يتجاوز الفحوصات الأمنية. المخرجات المتوقعة: ✓ تم التجاوز بنجاح - الأمر يجتاز جميع الفحوصات الأمنية
افتح نافذة طرفية جديدة وقم بتشغيل:
nc -l 1111
يبدأ هذا مستمعًا على المنفذ 1111. اترك هذه النافذة الطرفية مفتوحة ومنتظرة.
في طرفيتك الأصلية، قم بتشغيل:
./reverse_shell_poc.py --execute
عند المطالبة، اكتب yes واضغط Enter.
انتقل إلى الطرفية التي تحتوي على مستمع netcat (من الخطوة 2). يجب أن يكون لديك الآن موجه أوامر!
جرّب أوامر مثل:
whoami - لمعرفة اسم المستخدمpwd - لمعرفة الدليل الحاليls - لعرض الملفاتexit - لإغلاق الاتصالpython3 لتنفيذ كود عشوائيpython3 غير مدرج في قائمة الأوامر المحظورةدالة check_safe() تحظر أوامر مثل:
sudo, rm -rf /, chmod, curl | bash, إلخ.لكنها لا تحظر:
python3 (تنفيذ كود عشوائي)nc (netcat - اتصالات الشبكة)perl, ruby, node (مفسرات أخرى)يوضح هذا ثغرة حرجة:
بعد الاختبار، يمكنك إزالة دليل الاختبار:
rm -rf /tmp/test_output
هذا عرض توضيحي للـ localhost فقط (يتصل بـ 127.0.0.1). يتجنب هذا الإثبات عمدًا الاتصال عن بُعد لتقليل مخاطر سوء الاستخدام.