
Spring4Shell 취약점 RCE - CVE-2022-22965
Spring4Shell 취약점은 2022년 초 공격자들이 발견하고 널리 악용한 2개의 취약점 때문에 이렇게 명명되었습니다. 이 취약점 중 하나는 "Spring Cloud Functions"라는 프레임워크 구성 요소(덜 중요)에 있으며, 두 번째이자 더 중요한 구성 요소는 "Spring Core"라는 프레임워크의 핵심에 있습니다. 이 2개의 중요한 취약점으로 인해 2021년에 공개된 또 다른 중요한 취약점인 Log4shell과 관련하여 커뮤니티에서 농담이 생겼습니다.
Spring MVC의 기능 중 하나는 엔드포인트로 전송된 매개변수를 기반으로 요청이 이루어질 때 지정된 클래스의 객체를 자동으로 인스턴스화하고 채우는 것입니다. 간단히 말해, 이것은 부모 클래스의 중요한 속성을 덮어쓰는 데 악용되어 원격 코드 실행으로 이어질 수 있습니다. Spring4Shell 취약점에 대한 대부분의 익스플로잇은 애플리케이션이 웹 서버에 악성 .jsp 파일을 쓰도록 강제하여 작동합니다. 그런 다음 이 웹쉘을 실행하여 대상에 대한 원격 명령 실행을 얻을 수 있습니다.
이 익스플로잇이 발생하려면 환경을 이 jsp 파일의 가져오기에 취약하게 만드는 일련의 요소가 필요합니다. 그 요소는 다음과 같습니다.
spring-webmvc 및/또는 spring-webflux 구성 요소에 대한 의존성.이 탐색을 위해 이 저장소에 포함된 poc.py라는 이미 생성된 스크립트를 사용하겠습니다.
[!note]
이 POC를 위한 스크립트(poc.py)는 동일한 저장소에서 사용할 수 있습니다. 위에서 확인하세요.
스크립트 도움말이 있으면 항상 사용하세요. 이해하기 더 쉬울 것입니다.
이 공격은 파일을 서버로 전송할 수 있도록 http POST 메서드가 필요합니다. 공격을 위해 실행 중인 서버에는 페이지의 view-source에서 찾을 수 있는 POST가 있습니다.
이것은 알림을 위해 이메일이 등록되는 간단한 페이지입니다.
view-source에서 우리는 action이 /인 이 양식의 POST를 찾았습니다.
이 웹 서버를 탐색하기 위해 스크립트를 사용해 보겠습니다. POST 작업, 즉 이 경우 루트 /에서 공격을 실행해야 한다는 점을 기억하세요.
웹쉘이 성공적으로 전송되었습니다! 탐색을 확인하기 위해 스크립트가 생성한 링크에 접속해 보겠습니다.
완료! 웹 서버에 웹쉘을 전송하여 취약점을 성공적으로 익스플로잇했습니다.
Spring4Shell을 수정하려면 마이너 릴리스 5.3의 패치 18 이후(즉, 5.3.18 이후) 또는 마이너 릴리스 5.2를 사용하는 경우 패치 20 이후(즉, 5.2.20 이후)에 릴리스된 Spring 버전을 사용 중인지 확인하십시오. 프레임워크 버전을 업그레이드하면 애플리케이션에서 취약점을 제거할 수 있습니다.