أظهرت RunSybil تنفيذ تعليمات برمجية من خلال قالب نموذج خبيث. ويشير بايثون إلى أن تجاوزات بيئات الحماية تقع خارج نموذج تهديد الأمان الخاص به.
وفقاً لباحثي الأمن في RunSybil، يمكن لثغرة في سلامة الذاكرة في CPython أن تسمح لقوالب نماذج الذكاء الاصطناعي الخبيثة بتجاوز بيئات حماية التعليمات البرمجية وتنفيذ تعليمات برمجية عشوائية داخل خوادم الاستدلال.
كتب داريوس هول، باحث أمني في RunSybil، في منشور مدونة: "باستغلال هذه الثغرة الأمنية، يمكن للمهاجمين الحصول على موطئ قدم داخل الخوادم المسؤولة عن معالجة ملايين طلبات المستخدمين." وأضاف هول: "كما يمكنهم ضرب البنية التحتية السحابية الأساسية التي تستضيف أعباء العمل هذه مباشرةً."
أوضح الباحثون كيف يمكن لنموذج مصمم خصيصاً استغلال الثغرة لتجاوز حماية Jinja، وهو محرك قوالب يعتمد على بايثون ويُستخدم لهيكلة التفاعلات بين المستخدمين ونماذج اللغات الكبيرة (LLMs)، وتنفيذ تعليمات برمجية أثناء عملية خدمة النموذج. وأضاف المنشور أن الهجوم قد يعرض مزودي استضافة الذكاء الاصطناعي الذين يسمحون للعملاء بتحميل وتشغيل نماذجهم الخاصة للخطر، مما قد يمنح المهاجمين موطئ قدم داخل البنية التحتية التي تعالج الطلبات لعدة عملاء.
ومع ذلك، اعترض فريق استجابة أمان بايثون (PSRT)، الذي يتعامل مع تقارير الأمان المتعلقة بـ CPython، على الآثار الأمنية للعرض التوضيحي في رده على CSO. وقال الفريق: "نحن نقر بوجود خطأ CPython الأساسي الذي أبلغت عنه RunSybil ونقدر مساهمتهم في إصلاحه. ومع ذلك، لا نعتبر تجاوز بيئة الحماية الذي تم إثباته ثغرة أمنية في CPython."
يدور الخلاف حول ما إذا كان المفسّر يجب أن يكون مسؤولاً عن منع تجاوزات بيئات الحماية. فبينما تجادل RunSybil بأن الثغرة تخلق مخاطر على بنية تحتية استدلال الذكاء الاصطناعي، يرى PSRT أن تنفيذ تعليمات بايثون غير الموثوق بها ضمن بيئة حماية يقع خارج نموذج تهديد الأمان الخاص بـ CPython.
كيف يتم استغلال آلية معالجة الأنواع في بايثون؟
كتب هول: "الخطأ الذي اكتشفناه يستغل طريقة تعامل CPython مع الأنواع العامة لتحقيق اختراق." وأضاف هول: "لقد استغللناه باستخدام كائنات تتيحها بيئات الحماية في كل قالب، حتى في سياقات بيئات الحماية الفارغة."
وجد الباحثون أن CPython يمكنه استخدام قائمة مخبأة من المعلمات حتى بعد تعديل كائن من خلال وظيفة استدعاء. عندما يبحث المفسّر لاحقاً عن معلمة تم تقديمها حديثاً في القائمة الأصلية، يمكنه تلقي فهرس غير صالح. يتم تعطيل تأكيد مصمم لاكتشاف هذه الحالة في إصدارات الإنتاج العادية، مما يسمح للمفسّر بالوصول إلى الذاكرة خارج الحدود المتوقعة.
استخدمت RunSybil هذا السلوك لاسترداد مراجع لكائنات بايثون التي كان من المفترض أن تبقيها بيئة الحماية غير قابلة للوصول.
كتب هول: "بينما يؤدي العنوان غير الصالح عادةً إلى تعطل المفسّر، فإن العنوان الذي يشير إلى كائن Python حي ومفيد يمنح وظيفة الاستدعاء الخاصة بنا مرجعاً لذلك الكائن (حتى عندما لا تنوي بيئة الحماية كشفه أبداً)."
ثم استخدم الباحثون مراجع الكائنات المستردة للوصول إلى فئات ووظائف بايثون اللازمة لبناء تعليمات برمجية قابلة للتنفيذ.
كيف تمكنت قوالب النماذج الخبيثة من تنفيذ التعليمات البرمجية؟
لإثبات الهجوم، عدلت RunSybil نموذج Qwen2.5-0.5B-Instruct عن طريق إدخال ملف chat_template.jinja مخترق. عندما تم تحميل النموذج واستخدامه من خلال محرك خدمة استدلال مثل vLLM، أتاح القالب تنفيذ تعليمات برمجية عشوائية في عملية الخدمة.
كتب هول: "الخروج من بيئة حماية قالب الدردشة وتنفيذ التعليمات البرمجية يمثل خطراً على سلسلة التوريد يعرض مزودي الاستدلال ومطوري المكتبات ومستخدمي النماذج للخطر."
قال الباحثون إنهم شاركوا أدلة إثبات المفهوم للاستغلال مع العديد من مزودي الاستدلال الذين يدعمون ميزات "أحضر نموذجك الخاص" (BYOM)، والتي تسمح للعملاء بتحميل النماذج من مصادر خارجية.
تجادل بايثون حول تصنيف الثغرة الأمنية.
كشفت RunSybil عن المشكلة لـ CPython، ومشروع Pallets Project الذي يدير Jinja، و Hugging Face. وقال الباحثون إنهم واجهوا آراء متضاربة حول أي مشروع يجب أن يعالج المشكلة الأساسية.
تؤكد CPython أن المفسّر لا يدعم حماية تعليمات بايثون غير الموثوق بها كحد أمني. وفي رده على CSO، أشار PSRT إلى سياسة الأمان الخاصة بالمشروع، والتي تنص على أن تجاوز بيئات الحماية يجب أن يعالجه القائمون على صيانة برامج بيئات الحماية المتأثرة.
وقال فريق استجابة أمان بايثون (PSRT): "لذلك، فإن تجاوزات بيئات الحماية هذه تقع خارج نموذج تهديد الأمان الخاص بنا ويجب أن يعالجها القائمون على صيانة برامج بيئات الحماية المتأثرة."
كما اعترض الفريق على اقتراح RunSybil بأنه لا توجد عملية معالجة منسقة. وقال الفريق إن الباحثين قدموا التقرير عبر البريد الإلكتروني بدلاً من قناة الإبلاغ عن الثغرات الأمنية الخاصة بـ CPython على GitHub.
تم نقل الإصلاح إلى ثلاثة فروع من بايثون.
قدمت RunSybil تصحيحاً لـ CPython، والذي تم دمجه في فرع التطوير الرئيسي في 14 أغسطس. ووفقاً لـ PSRT، تم نقل الإصلاح أيضاً إلى الفروع 3.13 و 3.14 و 3.15 كإصلاح أخطاء عادي بدلاً من إصلاح أمني.
يعد هذا التمييز مهماً لأن RunSybil أثارت مخاوف من أن الإصلاح لن يصل إلى جميع إصدارات بايثون المدعومة.
قال الباحثون إن عدم نقل الإصلاح إلى Python 3.12 قد يؤخر اعتماد الإصلاح عبر عمليات نشر البنية التحتية للذكاء الاصطناعي.
ظهر المقال في الأصل على CSO.




