Spring 라이브러리의 새로운 취약점: 위험에 처한 지, 무엇을 해야 하는지 파악하는 방법

게시일: Apr 01, 2022
by 찰리 에릭슨
사례 연구

Spring 라이브러리의 새로운 취약점: 위험에 처한 지, 무엇을 해야 하는지 파악하는 방법

게시일: Apr 01, 2022
by 찰리 에릭슨
리소스 보기
리소스 보기

최근 Java 커뮤니티에서 가장 인기있는 라이브러리 중 하나 인 Spring 라이브러리는 RCE (원격 코드 실행)와 관련된 2 가지 취약점을 공개했습니다. 취약점에 대한 위험이 있는지 그리고 어떤 조치를 취해야 하는지 더 쉽게 이해할 수 있도록 "Spring4Shell" 및 "Spring Cloud Function"에 대한 알려진 세부 정보를 세분화했습니다.

취약점 1 - "Spring4Shell"(CVE-2022-22965)

2022 년 3 월 29 일 커뮤니티는 가장 최근에 출시 된 버전 인 5.3.17을 포함하여 Spring Core의 모든 버전에 대한 원격 코드 실행을 허용하는 Spring Core (SC)를 대상으로 한 익스플로잇의 개념 증명 스크린 샷이 포함 된 일련의 트윗을 발견했습니다.

어떤 응용 프로그램이 위험에 처해 있습니까?

현재 Tomcat에서 호스팅되는 응용 프로그램 만이이 새로운 악용의 위험에 처한 것으로 확인되었습니다. 이 악용이 임베디드 Tomcat 서블릿 컨테이너 또는 Tomcat 호스팅되지 않은 다른 응용 프로그램에 대해 성공적으로 입증되지는 않았지만 위협이 향후 이러한 프레임 워크에 성공적으로 성공할 가능성을 배제하지는 않습니다. 

Spring은이 취약점에 대한 공식 성명서 를 발표했는데, 취약점에 대한 현재의 이해에 따라 취약하기 위해서는 다음 조건을 충족시켜야한다는 것을 분명히합니다.

  • JDK 9 이상
  • 서블릿 컨테이너로서의 아파치 톰캣
  • 전통적인 WAR로 패키지 됨 (스프링 부트 실행 항아리와 달리)
  • spring-webmvc 또는 spring-webflux 종속성
  • 스프링 프레임 워크 버전 5.3.0 ~ 5.3.17, 5.2.0 ~ 5.2.19 및 이전 버전

"Spring4Shell" 익스플로잇은 어떻게 작동하나요?

악용은 메소드 서명에서 POJO (Plain Old Java Objects)를 사용하는 요청에서 "Data Binding"(org.springframework.web.bind.WebDataBinder)을 사용하는 데 의존합니다.

여기서 Foo 클래스는 다음과 같이 정의 할 수있는 POJO 클래스입니다. 실제 클래스는 클래스 로더에 의해로드되는 한 중요하지 않습니다. 

요청이 이와 같은 메서드에 의해 처리되면 클래스 로더가 클래스를 확인하는 데 사용됩니다. 클래스 로더는 가능한 모든 유형을 메모리에 먼저 미리 로드할 필요 없이 런타임에 클래스를 로드하는 역할을 합니다. 새 클래스를 사용할 때로드 할 .jar 파일을 파악합니다. 

이 취약점에 대한 최신 정보는 Spring에서 블로그 포스트에서 직접 찾을 수 있으며 잠재적 인 수정 사항이나 해결 방법을 포함합니다.

취약점 2 - 스프링 클라우드 기능(CVE-2022-22963)

2022년 3월 27일, 사이버 켄드라는 패치가 존재하지 않는 스프링 클라우드 함수의 0일 RCE(원격 코드 실행) 취약점에 대한 세부 정보를 공개했습니다. 이 취약점에는 ID CVE-2022-22963: 스프링 표현식 리소스 액세스 취약점이 할당되었습니다.

어떤 응용 프로그램이 위험에 처해 있습니까?

이 취약점은 다음 조건에서 응용 프로그램에 영향을 미쳤습니다.

  • JDK 9 이상
  • 스프링 클라우드 함수 버전 3.1.6 (또는 그 이하), 3.2.2 (또는 그 이하) 또는 지원되지 않는 버전 

악용은 어떻게 작동합니까?

Spring Cloud Function은 개발자가 일반적으로 구성 또는 코드를 통해 수행되는 속성 spring.cloud.function.routing-expression을 통해 라우팅이 처리되는 방식을 구성할 수 있는 기능을 제공합니다. 이것은 "스프링 표현 언어"(SpEL)를 받아들이는 강력한 기능입니다. 이 0일 취약점을 통해 요청의 HTTP 헤더를 통해 이 속성을 설정할 수 있다는 사실을 알게 되었으며, 이는 공격자가 RoutingFunction 엔드포인트에 대한 HTTP 요청에 SpEL 코드를 직접 포함시켜 임의 코드를 실행할 수 있음을 의미합니다. 

사용자가 위험을 완화하기 위해 취해야 할 단계는 무엇입니까?

Spring은 HTTP 헤더를 통해이 속성을 설정하지 못하게하여이 문제를 해결하기 위해 버전 3.1.7 및 3.2.3을 출시 하여 취약점을 완화했습니다. 두 버전 중 하나로 업그레이드한 후에는 추가 단계가 필요하지 않습니다.

개발자가 더욱 안전한 코드를 작성하도록 지원하는 방법에 대해 자세히 알고 싶으신가요? 데모를 예약하거나 보안 코드 코치에서 무료 보안 코딩 가이드라인을 살펴보세요.

소스

리소스 보기
리소스 보기

저자

찰리 에릭슨

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

Spring 라이브러리의 새로운 취약점: 위험에 처한 지, 무엇을 해야 하는지 파악하는 방법

게시일: Apr 01, 2022
By 찰리 에릭슨

최근 Java 커뮤니티에서 가장 인기있는 라이브러리 중 하나 인 Spring 라이브러리는 RCE (원격 코드 실행)와 관련된 2 가지 취약점을 공개했습니다. 취약점에 대한 위험이 있는지 그리고 어떤 조치를 취해야 하는지 더 쉽게 이해할 수 있도록 "Spring4Shell" 및 "Spring Cloud Function"에 대한 알려진 세부 정보를 세분화했습니다.

취약점 1 - "Spring4Shell"(CVE-2022-22965)

2022 년 3 월 29 일 커뮤니티는 가장 최근에 출시 된 버전 인 5.3.17을 포함하여 Spring Core의 모든 버전에 대한 원격 코드 실행을 허용하는 Spring Core (SC)를 대상으로 한 익스플로잇의 개념 증명 스크린 샷이 포함 된 일련의 트윗을 발견했습니다.

어떤 응용 프로그램이 위험에 처해 있습니까?

현재 Tomcat에서 호스팅되는 응용 프로그램 만이이 새로운 악용의 위험에 처한 것으로 확인되었습니다. 이 악용이 임베디드 Tomcat 서블릿 컨테이너 또는 Tomcat 호스팅되지 않은 다른 응용 프로그램에 대해 성공적으로 입증되지는 않았지만 위협이 향후 이러한 프레임 워크에 성공적으로 성공할 가능성을 배제하지는 않습니다. 

Spring은이 취약점에 대한 공식 성명서 를 발표했는데, 취약점에 대한 현재의 이해에 따라 취약하기 위해서는 다음 조건을 충족시켜야한다는 것을 분명히합니다.

  • JDK 9 이상
  • 서블릿 컨테이너로서의 아파치 톰캣
  • 전통적인 WAR로 패키지 됨 (스프링 부트 실행 항아리와 달리)
  • spring-webmvc 또는 spring-webflux 종속성
  • 스프링 프레임 워크 버전 5.3.0 ~ 5.3.17, 5.2.0 ~ 5.2.19 및 이전 버전

"Spring4Shell" 익스플로잇은 어떻게 작동하나요?

악용은 메소드 서명에서 POJO (Plain Old Java Objects)를 사용하는 요청에서 "Data Binding"(org.springframework.web.bind.WebDataBinder)을 사용하는 데 의존합니다.

여기서 Foo 클래스는 다음과 같이 정의 할 수있는 POJO 클래스입니다. 실제 클래스는 클래스 로더에 의해로드되는 한 중요하지 않습니다. 

요청이 이와 같은 메서드에 의해 처리되면 클래스 로더가 클래스를 확인하는 데 사용됩니다. 클래스 로더는 가능한 모든 유형을 메모리에 먼저 미리 로드할 필요 없이 런타임에 클래스를 로드하는 역할을 합니다. 새 클래스를 사용할 때로드 할 .jar 파일을 파악합니다. 

이 취약점에 대한 최신 정보는 Spring에서 블로그 포스트에서 직접 찾을 수 있으며 잠재적 인 수정 사항이나 해결 방법을 포함합니다.

취약점 2 - 스프링 클라우드 기능(CVE-2022-22963)

2022년 3월 27일, 사이버 켄드라는 패치가 존재하지 않는 스프링 클라우드 함수의 0일 RCE(원격 코드 실행) 취약점에 대한 세부 정보를 공개했습니다. 이 취약점에는 ID CVE-2022-22963: 스프링 표현식 리소스 액세스 취약점이 할당되었습니다.

어떤 응용 프로그램이 위험에 처해 있습니까?

이 취약점은 다음 조건에서 응용 프로그램에 영향을 미쳤습니다.

  • JDK 9 이상
  • 스프링 클라우드 함수 버전 3.1.6 (또는 그 이하), 3.2.2 (또는 그 이하) 또는 지원되지 않는 버전 

악용은 어떻게 작동합니까?

Spring Cloud Function은 개발자가 일반적으로 구성 또는 코드를 통해 수행되는 속성 spring.cloud.function.routing-expression을 통해 라우팅이 처리되는 방식을 구성할 수 있는 기능을 제공합니다. 이것은 "스프링 표현 언어"(SpEL)를 받아들이는 강력한 기능입니다. 이 0일 취약점을 통해 요청의 HTTP 헤더를 통해 이 속성을 설정할 수 있다는 사실을 알게 되었으며, 이는 공격자가 RoutingFunction 엔드포인트에 대한 HTTP 요청에 SpEL 코드를 직접 포함시켜 임의 코드를 실행할 수 있음을 의미합니다. 

사용자가 위험을 완화하기 위해 취해야 할 단계는 무엇입니까?

Spring은 HTTP 헤더를 통해이 속성을 설정하지 못하게하여이 문제를 해결하기 위해 버전 3.1.7 및 3.2.3을 출시 하여 취약점을 완화했습니다. 두 버전 중 하나로 업그레이드한 후에는 추가 단계가 필요하지 않습니다.

개발자가 더욱 안전한 코드를 작성하도록 지원하는 방법에 대해 자세히 알고 싶으신가요? 데모를 예약하거나 보안 코드 코치에서 무료 보안 코딩 가이드라인을 살펴보세요.

소스

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.