블로그

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

April 1, 2022
찰리 에릭슨
어두운 배경에서 화려한 컴퓨터 코드와 데이터 프로젝션 조명을 받고 있는 긴 머리의 여성 얼굴.

최근 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 클래스입니다. 클래스 로더에 의해 로드되기만 한다면 실제 클래스 내용은 중요하지 않다는 점을 참고하세요.

Java code defining class Foo in package spring4shell.model with private String variable Bar.

이와 같은 메서드에서 요청이 처리될 때, 클래스를 해석하기 위해 클래스 로더가 사용됩니다. 클래스 로더는 모든 가능한 타입을 메모리에 미리 로드하지 않고 런타임에 클래스를 로드하는 역할을 합니다. 새로운 클래스가 사용될 때 어떤 .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

‍

출처

‍

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

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.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

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

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.