
JDK 9+에서 실행되는 Spring MVC 또는 Spring WebFlux 애플리케이션은 데이터 바인딩을 통해 원격 코드 실행(RCE)에 취약할 수 있습니다. 이 특정 익스플로잇은 애플리케이션이 WAR 배포 형태로 Tomcat에서 실행되어야 합니다. 애플리케이션이 기본값인 Spring Boot 실행 가능 jar로 배포된 경우에는 이 익스플로잇에 취약하지 않습니다. 그러나 이 취약점의 성격은 더 일반적이며, 이를 악용할 수 있는 다른 방법이 존재할 수 있습니다.
CVE-2022-22965 (Spring4Shell, SpringShell)는 HTTP 요청에 저장된 데이터를 애플리케이션에서 사용하는 특정 객체에 바인딩하기 위해 데이터 바인딩 기능을 사용하는 Spring 프레임워크의 취약점입니다. 버그는 getCachedIntrospectionResults 메서드에 존재하며, HTTP 요청을 통해 클래스 이름을 전달하여 해당 객체에 대한 무단 액세스를 얻는 데 사용될 수 있습니다. 특수 객체 클래스가 사용될 때 데이터 유출 및 원격 코드 실행의 위험이 발생합니다. 이 취약점은 오래전에 종료된 CVE-2010-1622와 유사하며, 여기서는 클래스 이름이 classLoader 또는 protectionDomain과 일치하지 않도록 수정으로 클래스 이름 검사가 추가되었습니다.
CVSSv3 시스템에 따르면, CRITICAL 심각도로 평가됩니다.
다음은 취약점 식별에 사용할 수 있는 CVE-2022-22965의 탐지 기회입니다.
취약점의 현재 조건(Spring의 취약점 발표에 명시된 대로)은 다음과 같이 요약할 수 있습니다.
python3 exploit.py http://10.10.10.10/
참고: 여기서 후행 슬래시는 매우 중요합니다!
연락처 양식의 "action"을 찾으십시오(사용 가능한 유일한 POST 요청).
<form id="contactForm" action="/" method="post">
action이 "/"이므로, 우리의 대상 URL은 단순히 http://10.10.10.10/이 됩니다.