Spring 라이브러리의 새로운 취약점: 위험 여부 확인 및 대응 방법

최근 Java 커뮤니티에서 가장 널리 사용되는 라이브러리 중 하나인 Spring 라이브러리에서 원격 코드 실행(RCE)과 관련된 2가지 취약점이 발견되었습니다. 귀하의 애플리케이션이 해당 취약점에 노출되어 있는지, 그리고 어떤 조치를 취해야 하는지 쉽게 이해하실 수 있도록 "Spring4Shell" 및 "Spring Cloud Function"에 대한 상세 내용을 정리했습니다.
취약점 1 - "Spring4Shell" (CVE-2022-22965)
2022년 3월 29일, Spring Core(SC)를 대상으로 하는 익스플로잇의 개념 증명(PoC) 스크린샷이 포함된 트윗들이 커뮤니티에 공유되었습니다. 이 취약점은 최신 버전인 5.3.17을 포함한 모든 Spring Core 버전에서 원격 코드 실행을 가능하게 합니다.
어떤 애플리케이션이 위험한가요?
현재까지는 Tomcat에서 호스팅되는 애플리케이션만이 이 새로운 익스플로잇에 취약한 것으로 확인되었습니다. 내장형 Tomcat 서블릿 컨테이너나 Tomcat 이외의 환경에서 호스팅되는 애플리케이션에 대해서는 아직 성공적인 공격 사례가 보고되지 않았으나, 향후 이러한 프레임워크에서도 위협이 성공할 가능성을 배제할 수는 없습니다.
Spring은 해당 취약점에 대한 공식 성명서를 발표했습니다. 현재까지 파악된 바에 따르면, 다음 조건이 모두 충족될 경우 취약점이 발생할 수 있습니다.
- JDK 9 이상
- 서블릿 컨테이너로 Apache Tomcat 사용
- Spring Boot 실행 가능 jar가 아닌 전통적인 WAR 방식으로 패키징
- spring-webmvc 또는 spring-webflux 의존성 포함
- Spring Framework 버전 5.3.0~5.3.17, 5.2.0~5.2.19 및 이전 버전
"Spring4Shell" 익스플로잇은 어떻게 작동하나요?
이 익스플로잇은 메서드 시그니처에서 POJO(Plain Old Java Objects)를 사용하는 요청 시 "데이터 바인딩"(org.springframework.web.bind.WebDataBinder) 기능을 악용합니다.

여기서 Foo 클래스는 다음과 같이 정의될 수 있는 POJO 클래스입니다. 클래스 로더에 의해 로드되기만 한다면 실제 클래스 내용은 중요하지 않다는 점을 참고하세요.

이와 같은 메서드에서 요청이 처리될 때, 클래스를 해석하기 위해 클래스 로더가 사용됩니다. 클래스 로더는 모든 가능한 타입을 메모리에 미리 로드하지 않고 런타임에 클래스를 로드하는 역할을 합니다. 새로운 클래스가 사용될 때 어떤 .jar 파일을 로드할지 결정하는 것입니다.
이 취약점에 대한 가장 최신의 상세 정보와 잠재적인 수정 사항 또는 우회 방법은 Spring의 블로그 게시물에서 직접 확인하실 수 있습니다.
취약점 2 - Spring Cloud Function (CVE-2022-22963)
2022년 3월 27일, Cyber Kendra는 패치가 존재하지 않는 Spring Cloud Function의 제로데이 원격 코드 실행(RCE) 취약점에 대한 세부 정보를 공개했습니다. 이 취약점에는 CVE-2022-22963: Spring Expression 리소스 접근 취약점이라는 ID가 할당되었습니다.
어떤 애플리케이션이 위험한가요?
해당 취약점은 다음 조건에 해당하는 애플리케이션에 영향을 미칩니다.
- JDK 9 이상
- Spring Cloud Functions 3.1.6 이하, 3.2.2 이하 또는 지원되지 않는 모든 버전
공격은 어떻게 이루어지나요?
Spring Cloud Function은 개발자가 spring.cloud.function.routing-expression 속성을 통해 라우팅 처리 방식을 구성할 수 있는 기능을 제공하며, 이는 주로 설정이나 코드를 통해 수행됩니다. 이 강력한 기능은 'Spring Expression Language(SpEL)'를 허용합니다. 이번 제로데이 취약점을 통해 확인된 바에 따르면, 해당 속성을 HTTP 요청 헤더를 통해 설정할 수 있었습니다. 즉, 공격자가 RoutingFunction 엔드포인트로 보내는 HTTP 요청에 SpEL 코드를 직접 삽입하여 임의의 코드를 실행할 수 있게 된 것입니다.
위험을 완화하기 위해 사용자는 어떤 조치를 취해야 하나요?
Spring은 버전 3.1.7 및 3.2.3을 출시하여 HTTP 헤더를 통한 해당 속성 설정을 차단함으로써 이 문제를 해결하고 취약점을 완화했습니다. 해당 버전으로 업그레이드한 후에는 별도의 추가 조치가 필요하지 않습니다.
개발자가 더 안전한 코드를 작성하도록 돕는 방법에 대해 더 알고 싶으신가요? 데모를 예약하거나에서 무료 보안 코딩 가이드를 살펴보세요.secure code coach
출처
- https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
배포 전 AI 기반 개발 거버넌스 확보
AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.
더 많은 블로그 살펴보기
보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
배포 전 AI 기반 개발 보안 확보
소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.



.avif)