|
[CVE-2017-9805] Apache Struts2 REST 플러그인 취약점 침해사고분석팀 2017.09.07 |
|
|
개요2017년 9월 5일, Java기반의 웹어플리케이션을 개발하는데 사용되는 Apache Struts2에서 원격코드 실행취약점이 발견되었습니다. 웹어플리케이션을 사용하는 기업들의 50%이상이 Struts 프레임워크를 사용중인만큼 지금 발견된 취약점은 그 영향력이 심각하다고 할 수 있습니다. 몇 개월 전에도 치명적인 Struts2 취약점으로 인해서 전세계적으로 큰 이슈가 발생하기도 했습니다.
이번 취약점은 그 심각성때문에 긴급하게 패치가 되었고 또한 사용자들의 업데이트를 위한 기간를 주기위해 2~3주간의 여유를 두고 PoC를 공개하기로 했습니다. 하지만 대략적으로 설명한 취약점의 내용은 보안전문가들의 입장에서는 충분히 취약점을 유추할 수 가 있었습니다. 몇 일전에는 취약점 트리거에 성공하고 PoC를 공개한 해커들도 있었습니다. 따라서 현재 Apache Struts2를 사용중인 사용자는 각별한 주의를 필요로 필요할 것으로 보입니다.
분석내역CVE-2017-9805 취약점은 사용자로부터 전달받은 XML 페이로드를 제대로 검증하지 않아 발생합니다. 사용자가 XML 형태의 페이로드를 전달하면 <그림 1>과 같이 getHandlerForRequest는 request로 전달받은 XML의 유형을 결정하고 XStreamHandler의 toObject메소드를 호출합니다.
<그림 1 - toObject 메소드가 호출되는 과정>
toObject 메소드는 <그림 2>와 같이 첫 번째 인자(Reader in)로 사용자의 request에 있는 Body를 전달 받습니다. 이때 전달 받은 페이로드를 역직렬화 하게 되는데 이러한 과정에서 사용자가 전달한 페이로드를 제대로 검증하지 않아 취약점이 발생합니다.
<그림 2 - toObject 메소드>
대응방안1.해당 벤더사의 권고사항을 참조하여 최신버전으로 업데이트한다.
2.Struts REST 플러그인을 사용하지 않을경우 삭제한다.
3.configuration 파일에 다음 코드를 추가하여 플러그인을 서버 일반 페이지나 JSON으로 제한한다. <constant name="struts.action.extension" value="xhtml,,json" />
4.당사 IPS에서는 아래의 패턴으로 대응이 가능하다. [3676] Apache Struts2 XStreamHandler RCE
5.SNORT 패턴은 시큐어 캐스트에서 확인할 수 있다.
참고https://lgtm.com/blog/apache_struts_CVE-2017-9805_announcement https://cwiki.apache.org/confluence/display/WW/S2-052 http://bobao.360.cn/news/detail/4291.html https://struts.apache.org/docs/s2-052.html https://access.redhat.com/security/cve/cve-2017-9805
|


