ورقة بيضاء تقدم تقنيات عمياء مبنية على الأخطاء والأخطاء المنطقية (Boolean) لحقن القوالب (SSTI) وحقن الأكواد، مع حمولات عالمية لست لغات برمجة وتكامل مع SSTImap.
[!NOTE] هذه هي النسخة الثانية من الورقة البيضاء بناءً على النتائج التي قدمتها قبل إصدار SSTImap الإصدار 1.3.1. سيتم تكييف التحسينات الإضافية مع هذا التنسيق كإصدار 1.2 من البحث في تاريخ لاحق.
قد تبدو بعض فئات الثغرات الأمنية للوهلة الأولى معروفة وواضحة إلى حد ما. قد يبدو أن جميع التقنيات الممكنة لهذه الثغرات معروفة، لذلك قد يتم اكتشاف حمولات للحالات غير المعتادة فقط. غالبًا ما يُنظر إلى حقن القوالب من جانب الخادم (SSTI) وحقن الأكواد على أنها تلك الفئات المعروفة.
في بعض الأحيان، تتم مواجهة تقنيات جديدة بأسماء تفسر نفسها لهذه الثغرات. قد يعتبر العديد من الباحثين هذه التقنيات معروفة أيضًا أو حتى يتذكرون استخدامها، ولكن في الواقع، قد تكون التقنية موجودة فقط كاسم مفهوم بشكل شائع دون بحث أو أوصاف أو حمولات عالمية. قد يتم ذكرها مرتين أو ثلاث مرات إلى جانب حمولات لحالات محددة جدًا، ولكن لن يتم اختبارها وقد يظل الإمكانات الحقيقية لتلك التقنية غير مكتشفة لسنوات.
يقدم هذا البحث اثنتين من هذه التقنيات لحقن الأكواد وSSTI: القائم على الخطأ والاختبار الأعمى القائم على الخطأ المنطقي. سأقدم حمولات لحقن الأكواد وSSTI في ست لغات برمجة: Python وPHP وJava وRuby وNodeJS وElixir. علاوة على ذلك، سأقدم حمولات كشف عامة، قادرة على اكتشاف الحقن الأعمى بسرعة.
سأقدم الجدول الزمني الكامل لبحثي من العثور على المؤشرات المبكرة إلى الاستنتاجات النهائية. سأستكشف أيضًا عملية إنشاء حمولات جديدة للغات برمجة وقوالب لم يتم ذكرها في هذا البحث.
في هذا البحث سأعرض أمثلة على التطبيقات العملية للتقنيات الجديدة وأشارك المجالات المحتملة للبحث الإضافي. يمكن استخدام جميع الحمولات المقدمة لاكتشاف واستغلال الثغرات في التطبيقات الحقيقية. بالإضافة إلى ذلك، تمت إضافة جميع الحمولات المقدمة إلى أداة المصدر المفتوح SSTImap، مما يسهل تطبيق نتائج هذا البحث على أهداف العالم الحقيقي.
تظهر ثغرات حقن القوالب من جانب الخادم على مواقع الويب الديناميكية التي تستخدم محركات القوالب لعرض الصفحات من جانب الخادم، عندما يتم إدخال مدخلات المستخدم غير الموثوقة في القالب قبل معالجتها بواسطة محرك القالب. يمكن للمهاجم إدخال بناء جملة قالب صالح، والذي ستتم معالجته بواسطة محرك القالب أثناء عرض الصفحة. توفر العديد من محركات القوالب شكلاً من أشكال وظائف تنفيذ الأكواد، مما يؤدي غالبًا إلى تنفيذ الأكواد عن بُعد (RCE) على الخادم المستهدف. يركز هذا البحث على محركات القوالب التي توفر مثل هذه الإمكانيات في حالة الاستغلال.
كانت ثغرات SSTI معروفة منذ عام 2015، وخلال ذلك الوقت تم اكتشاف العديد من الحمولات التي توفر تسريب المعلومات وتجاوز الفلاتر والهروب من الحاوية الآمنة. على الرغم من ذلك، فإن معظم الحمولات إما تعرض النتيجة مباشرة على الصفحة أو تركز على حقيقة تنفيذ الأكواد نفسها، متجاهلة النتائج التي تنتجها تلك الأكواد.

أسلوب SSTI المعروف الآخر هو الأعمى القائم على الوقت، والذي يتضمن إضافة تأخير إلى أمر الصدفة المنفذ. يسمح هذا الأسلوب بتحديد نجاح تنفيذ الكود المحقون ولكنه يتطلب تخمين الحمولة لتنفيذ أمر نظام التشغيل، مما يجعل اكتشاف SSTI الأعمى في محرك قوالب غير معروف للباحث أكثر صعوبة.

تم اكتشاف فئة ثغرات SSTI وكلا الأسلوبين المعروفين للاستغلال في عام 2015 بواسطة جيمس كيتل. تم وصف هذه التقنيات بتفصيل كبير في بحثه "Server-Side Template Injection: RCE For The Modern Web App". [^1] في السنوات العشر منذ ذلك الحين، لم يتم توثيق أي تقنيات استغلال جديدة. تم اكتشاف تقنية كشف واحدة فقط في عام 2023، باستخدام حمولات متعددة اللغات لاختبار عدة محركات قوالب في وقت واحد. تم اكتشاف هذه التقنية بواسطة ماكسيميليان هيلدبراند وتم وصفها في بحثه "Improving the Detection and Identification of Template Engines for Large-Scale Template Injection Scanning". [^2] تركز هذه التقنية على تحديد محركات القوالب باستخدام أقل عدد من الطلبات، ولكنها تعمل فقط في سياقات الحقن البسيطة.

معظم محركات القوالب المبنية على لغات البرمجة المفسرة، مثل PHP وNodeJS وPython، تسمح بشكل مباشر بتقييم تعبيرات لغات البرمجة المقابلة. تسمح لنا هذه الإمكانية باستخدام حمولات لفئة أوسع من ثغرات حقن الأكواد عن طريق تغليفها بالتنسيق الصحيح لوسم القالب.
يمكن أن يحدث حقن الأكواد أيضًا بدون SSTI، عندما يمكن لمدخلات المستخدم غير الموثوقة أن تصل إلى eval() أو دالة خطيرة مماثلة.
غالبًا ما يُعتبر أن استغلال حقن الأكواد هو مجرد برمجة بلغة مقابلة،
لذلك يتم توثيق التقنيات والحمولات فقط لأمثلة محددة من الثغرات، والتي تتطلب تخصيص الكود للتطبيق الهدف.
يؤدي عدم وجود تقنيات كشف أكثر عالمية لحقن الأكواد وSSTI إلى عدم فعالية المسح الضوئي للصندوق الأسود للحقن الأعمى للقوالب والأكواد.
في هذا البحث، سيتم تقديم اثنتين من التقنيات الجديدة لحقن الأكواد وSSTI، بالإضافة إلى حمولات لست لغات برمجة وحمولات كشف عامة. ستعمل التقنيات المقدمة على توسيع قدرات استغلال SSTI الأعمى، بالإضافة إلى السماح بمسح حقن الأكواد وSSTI الأعمى دون تخمين لغة البرمجة للكود المحقون.
تهدف الحمولات المقدمة في هذا البحث إلى الاختبار العملي الاختراقي لتطبيقات الويب الحقيقية. يتم أيضًا دمج جميع الحمولات المعروضة في وحدات الأداة مفتوحة المصدر لاكتشاف SSTI وحقن الأكواد المسماة SSTImap. [^3] تمت إضافة دعم التقنيتين الجديدتين بالإضافة إلى الحمولات المقابلة في الإصدار 1.3.0. الحمولات الأقل عمومية والأكثر تحديدًا للتطبيق العملي للتقنيات الجديدة، المقدمة في هذا البحث، مدمجة في وحدات SSTImap إضافية، والتي يمكن العثور عليها في مستودع مخصص لوحدات "الإضافية". [^4]
خلال تطوير الحمولات لوحدات SSTImap، واجهت قيودًا واكتشافات كانت بمثابة مؤشرات أدت إلى التقنيات المقدمة في هذا البحث. واجهت سيناريوهات مختلفة من SSTI وحقن الأكواد، حيث كان من المستحيل الحصول على المخرجات من الكود المحقون باستخدام التقنيات الحالية. أثناء مواجهة هذه القيود، اختبرت أفكارًا مختلفة للحصول على المخرجات، والتي قادت في النهاية إلى اكتشاف التقنيتين الجديدتين الموثقتين في هذا البحث.
تمت مواجهة المؤشر الأول الذي يشير إلى قيود محتملة أثناء تحديثي للحمولات لمحرك القالب Dust.JS. يعتبر هذا المحرك قديمًا ويبدو مهجورًا، بينما كان تنفيذ الأكواد ممكنًا فقط مع الإصدارات القديمة من dustjs-helpers من عام 2015. كانت وحدة SSTImap لهذا المحرك موروثة من قاعدة كود Tplmap [^5] وكان تحسينها مهمة ذات أولوية منخفضة، لكن الوحدة تسببت في العديد من النتائج الإيجابية الخاطئة في حالة محركات القوالب البسيطة الخالية من المنطق.