
Apache Struts 2.0 RCE 취약점 - 공격자가 content-type 헤더를 통해 웹 애플리케이션에 OS 명령어를 주입할 수 있습니다.
Apache Struts 2.0 RCE 취약점
이 스크립트는 CVE-2017-5638을 악용하는 스크립트입니다. 공격자가 content-type 헤더를 통해 OS 명령을 웹 애플리케이션에 주입할 수 있게 합니다. Apache Struts 2는 Java EE 웹 애플리케이션 개발을 위한 오픈 소스 웹 애플리케이션 프레임워크입니다. Java Servlet API를 사용하고 확장하여 개발자들이 모델-뷰-컨트롤러(MVC) 아키텍처를 채택하도록 장려합니다.
2017년 3월 마지막 주에 "Nike Zheng"이라는 이름으로 활동하는 Apache Struts 해커가 공개 개념 증명 익스플로잇을 게시하여 Apache Struts 2 취약 서버에서 얼마나 쉽게 원격으로 운영 체제 명령을 실행할 수 있는지 보여주었습니다.
해당 취약점, CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638, 은 HTTP 요청에서 특수하게 조작된 Content-Type 값을 통해 인증되지 않은 원격 코드 실행(RCE)을 허용합니다. 공격자는 Content-Type에 대해 유효하지 않은 값을 생성하여 취약한 소프트웨어가 예외를 발생시키도록 할 수 있습니다. 소프트웨어가 오류 메시지를 표시하기 위해 준비할 때, Apache Struts Jakarta Multipart 파서의 결함으로 인해 악성 Content-Type 값이 표시되는 대신 실행됩니다.
이 공개 익스플로잇이 공개된 이후, 취약한 Apache 서버를 찾는 대량의 스캔이 관찰되었습니다. 익스플로잇이 매우 쉽게 실행될 수 있기 때문에 누구나 취약한 머신을 원격으로 아주 쉽게 악용할 수 있습니다. 따라서 대량의 스캔에 이은 빈번한 익스플로잇이 보고되었습니다.
저희 고객 중 한 분이 모든 IP를 스캔해 달라고 요청했습니다. 고객사는 취약한 Apache Struts 2 프레임워크를 대부분 사용하고 있었고, 어떤 IP(웹 서버)가 취약한 Apache 프레임워크를 실행 중인지 정확한 기록이 없었습니다. 테스트해야 할 IP는 거의 천 개에 가까웠습니다. 고객은 Linux 서버인지 Windows 서버인지에 대한 정보와 함께 모든 취약한 도메인을 제출하도록 요구했습니다. 각 IP를 개별적으로 스캔하는 지루한 작업을 피하기 위해 작은 스크립트를 작성했습니다.
스크립트는 다음 기능/작업을 결합합니다: