Java에서 가장 많이 사용되는 프레임워크 중 하나인 Spring Framework, 수 년에 걸친 Spring의 보고서에 따르면 Java 프레임워크의 개발자 인기도는 상위 3위에 올랐으며 커뮤니티에서 Spring을 수용하는 정도는 Log4j 와 비슷합니다. 이는 잠재적으로 영향을 받을 수 있는 배포가 많이 이뤄졌다는 것으로도 해석할 수 있습니다.
Spring4shell은 3월 30일 발표된 Spring Framework의 세 가지 취약점 중 하나입니다. 중국의 한 보안 전문가가 올린 Spring Core 프레임워크 취약점 POC 화면이 발단이 되어 여러 POC가 웹 상에 올라왔습니다. 해당 취약점은 "Spring4Shell" 또는 "SpringShell"로 불리며 2022년 03월 31일 Spring 개발자에 의해 'CVE-2022-22965' 취약점으로 추가되었습니다.
Check Point의 원격 측정 데이터 기반 보고서에 따르면, 취약점이 발견된 뒤 Spring4shell 취약점을 이용하려는 시도는 약 37,000번 이뤄졌고, 취약점이 발생한 후 첫 4일 동안 전 세계 조직의 16%가 악용 시도의 영향을 받았습니다.
취약 조건
- Java 9 이상
- Apache Tomcat 서버
- Spring Framework 버전 5.3.0 ~ 5.3.17, 5.2.0 ~ 5.2.19 및 이전 버전
- spring-webmvc 또는 spring-webflux 종속성
- WAR 형태로 패키징
Spring4shell과 비교되고 있는 Log4j에 비해서는 취약 조건이 까다로운 편이긴 하지만, 취약점 공격 방법이 매우 쉽기 때문에 주의해야 합니다. 현재까지 발견된 Spring Framework의 취약점은 아래 3가지입니다.
- Spring Core RCE(중요): CVE-2022-22965 또는 Spring4Shell 또는 SpringShell
영향을 받는 라이브러리:org.springframework:spring-bean - Spring Cloud Function의 정보 노출: CVE-2022-22963
영향을 받는 라이브러리:org.springframework.cloud:spring-cloud-function-context - Spring 표현식의 서비스 거부: CVE-2022-22950
영향을 받는 라이브러리:org.springframework:spring-expression
Spring4shell의 CVSS 점수는 9.8 입니다. Spring4shell은 원격 코드 실행에 애플리케이션을 노출하기 때문에 공격자는 연결되어 있는 데이터베이스를 포함해 모든 웹사이트 내부 데이터에 액세스할 수 있습니다. 또, 공격자가 내부 리소스에 액세스하여 더 많은 권한을 얻을 수 있습니다.
Spring4shell 취약점 해결 방법
Spring은 해당 취약점을 해결하기 위한 방법들을 제안하고 있습니다.
취약점을 해결하기 위한 기본 응답은 Spring Framework 5.3.18 및 5.2.20 이상으로 업데이트하는 것입니다. 이 작업을 수행한 이후에는 다른 해결방법이 필요하진 않으나, 다양한 이유로 업그레이드가 신속히 시행될 수 없다면 Apache Tomcat 10.0.20 , 9.0.62 또는 8.5.78 로 업그레이드, JAVA 8로 다운그레이드 등을 할 수 있습니다.
출처
(1) https://dzone.com/articles/java-survey-results-part-ii-web-frameworks
(4) https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement