원격 공격자가 영향을받는 Struts 프레임워크와 널리 사용되는 REST 통신 플러그인을 사용하여 빌드 된 응용 프로그램을 실행하는 서버에서 임의의 코드를 실행할 수 있도록 해주는 취약점이 발견되었습니다.
이 취약점은 Java에서 안전하지 않은 구조화 된 데이터를 하나의 형식에서 가져 와서 객체로 재구성하는 과정에서 발생하는 취약점입니다.
저희 큐비트 시큐리티는 공격방법이 비교적 쉽고, 공격 받을 시 시스템에 미치는 영향이 크기 떄문에 Apache Struts2취약점(CVE-2017-9805)를 분석하여 PLURA Agent가 탐지하도록 하였습니다.
영향 받는 소프트웨어
– Apache Struts 2.1.2~2.3.33
– Apache Struts 2.5~2.5.12
취약점 원리
Apache Struts 2 REST 플러그인은 JAVA XStream XML 직렬화 라이브러리를 사용하여 사용자 입력을 역직렬화합니다. Apache Struts 2 REST 플러그인이 공격자가 보낸 XML을 deserialize하려고 시도하여 결과적으로 원격 코드 실행이 발생합니다.
사용자가 제어하는 데이터가 deserialization 메서드로 전달되는 방법이 있습니다. 예를 들어, Apache Struts는 ContentTypeHandler 인터페이스를 사용합니다. 데이터를 Java 객체로 변환합니다. 이 인터페이스의 구현은 일반적으로 전달 된 데이터를 deserialize하므로 이 인터페이스를 구현하는 모든 클래스는 잠재적 위험이 있습니다.
취약점 테스트
공격자PC에서 피해자PC의 1337 Port Listen.
공개된 CVE-2017-9805 PoC code 실행
reverse connection이 된 후 공격자가 피해자PC에서 명령어 주입 성공
이러한 공개된 취약점으로 해커들은 다양한 공격을 시도하고있어 많은 피해가 예상됩니다.
저희 PLURA AGENT는 Apache Struts2취약점(CVE-2017-9805)를 아래와 같이 탐지하고 있습니다.