• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
보안

Spring4Shell: Spring 핵심 RCE 취약점

달소 달소 4099

1

4
출처 https://www.cyberkendra.com/2022/03/springshell-rce-0-day-vulnerability.html?m=1

+++추가

https://svrforum.com/itnews/222674

앞서 오전에 설명드린 Spring4shell 취약점에 대해서 Kisa에서도 보안공지를 업데이트했습니다.   업데이트도 나온듯하니 내용참고하시면 되겠습니다. ...
달소 | 2022.03.31

https://svrforum.com/itnews/224085

어제 말씀드렸던 Spring4shell 취약점의 CVE발급이 완료되었습니다.   https://cve.mitre.org/cgi-bin/cvename.cgi?na...
달소 | 2022.04.01

 

 


Log4j 시즌 2입니다...ㅂㄷㅂㄷ

현재는 WAF를 이용한 대응방법밖에없는듯합니다. 

WAF 및 업데이트로 가능하다고합니다.

보안담당자들이 또 바빠지겠네요..

image.png.jpg

image.png.jpg

업데이트:- 우리는 Spring4Shell 취약점에 대한 몇 가지 정보를 가지고 있으며 Spring4Shell: 세부 정보 및 악용 게시물에 대한 세부 정보를 공유했습니다. 또한 Praetorian의 보안 팀은 JDK9+의 Spring Core가 CVE-2010-1622에 대한 우회로 인해 원격 코드 실행에 취약하다는 것을 확인했습니다.

 
2021년 말, Apache Log4j2에서 Log4Shell 이라고도 하는 원격 코드 실행 취약점인 Zero-day가 삭제되면서 인터넷에 불이 붙었습니다. 이 취약점은 Alibaba Cloud 보안 팀이 발견했습니다. 

 

오늘날 연구원들은 수많은 애플리케이션에 심각한 피해를 줄 수 있는 또 다른 최악의 취약점을 발견했습니다. 인터넷을 망칠 수 있습니다. 이 시점에서 이 취약점에 대한 CVE ID는 없지만  Spring4Shell 이라고 부를 수 있습니다 . 취약점은 JDK 버전이 9.0 이상인 Spring 코어에 존재합니다.

Spring Framework 및 파생된 프레임워크 spring -beans-*.jar 파일 또는 CachedIntrospectionResults.class

이 시점에서 버그에 대한 정확한 정보는 없지만 확인되지 않은 출처에서 몇 가지 흥미로운 세부 정보를 얻었습니다. 

아래의 모든 세부 정보는 이제 확인 되지 않은 출처 에서 공유됩니다  . 발생한 피해에 대해서는 책임을 지지 않습니다.

취약점 세부정보 및 조사

세계에서 가장 인기 있는 Java 경량 오픈 소스 프레임워크인 Spring은 개발자가 비즈니스 로직에 집중할 수 있도록 하고 Java 엔터프라이즈 애플리케이션의 개발 주기를 단순화합니다.
 
악용에는 DataBinder가 활성화된 엔드포인트가 필요하며(예: 요청 본문에서 데이터를 자동으로 디코딩하는 POST 요청) 애플리케이션의 서블릿 컨테이너에 크게 의존합니다. 예를 들어 Spring이 Apache Tomcat에 배포되면 WebAppClassLoader에 액세스할 수 있으므로 공격자가 getter 및 setter를 호출하여 궁극적으로 디스크에 악성 JSP 파일을 작성할 수 있습니다. 그러나 Embedded Tomcat Servlet Container를 사용하여 Spring을 배포하는 경우 클래스 로더는 액세스가 제한된 LaunchedURLClassLoader입니다.
 
그러나 Spring 프레임워크의 JDK9 버전(이상)에서는 원격 공격자가 특정 조건을 충족하는 기반으로 프레임워크의 매개변수 바인딩 기능을 통해 AccessLogValve 객체 및 악성 필드 값을 획득하여 파이프라인 메커니즘을 트리거할 수 있습니다. 임의의 필드를 작성합니다. 경로에 있는 파일.
  • 현재 이 취약점을 유발하려면 두 가지 기본 조건이 필요하다고 알려져 있습니다.
  • JDK9 이상의 Spring MVC 프레임워크 사용

(1). JDK 버전 번호 확인 

조직 시스템의 실행 중인 서버에서 " java -version " 명령을 실행하여 실행 중인 JDK 버전을 확인합니다. 버전 번호가 8 이하인 경우 취약점의 영향을 받지 않습니다.

(2). Spring 프레임워크 사용 확인

1. 조직체계 프로젝트가 전쟁패키지 형태로 전개되는 경우 아래의 순서대로 판단하여 진행한다.

 

  • war 패키지 압축 풀기: war 파일의 접미사를 .zip으로 변경하고 zip 파일의 압축을 풉니다.
  • 압축 해제 디렉토리 에서 spring-beans-*.jar 형식의 jar 파일(예: spring-beans-5.3.16.jar)을 검색합니다. 존재한다면 비즈니스 시스템이 스프링 프레임워크를 사용하여 개발되었음을 의미합니다.
  • spring-beans-*.jar 파일이 존재하지 않는다면 , 압축해제 디렉토리에서 CachedIntrospectionResuLts.class 파일 의 존재를 검색한다 . 존재한다면 Spring 프레임워크를 사용하여 비즈니스 시스템을 개발했다는 ​​의미입니다.

 

2. 조직 시스템 프로젝트가 jar 패키지 형태로 직접 독립적으로 실행되는 경우 다음 단계에 따라 판단합니다.

 

 
  • jar 패키지 압축 풀기: jar 파일의 접미사를 .zip으로 변경하고 zip 파일의 압축을 풉니다.
  • 압축 해제 디렉토리 에서 spring-beans-*.jar 형식의 jar 파일(예: spring-beans-5.3.16.jar)을 검색합니다. 존재한다면 비즈니스 시스템이 스프링 프레임워크를 사용하여 개발되었음을 의미합니다.
  • spring-beans-*.jar 파일이 존재하지 않는다면 , 압축해제 디렉토리에서 CachedIntrospectionResuLts.class 파일의 존재를 검색한다. 존재한다면 비즈니스 시스템이 스프링 프레임워크를 사용하여 개발되었음을 의미합니다.

 

 

(3) 종합조사

위의 두 가지 문제 해결 단계를 완료한 후 다음 두 가지 조건이 동시에 충족되어 이 취약점의 영향을 받는지 확인합니다.

 

  1. JDK 버전 번호는 9 이상입니다.
  2. 스프링 프레임워크 또는 파생 프레임워크를 사용합니다.

 

취약점 수정 가이드

현재 봄에 대한 공식 패치는 없습니다 . 그러나 보호를 위해 다음 두 가지 임시 솔루션을 사용하고 적시에 공식 패치 릴리스에주의를 기울이고 공식 패치에 따라 취약점을 수정하는 것이 좋습니다.

이 취약점이 Log4Shell 취약점보다 훨씬 큽니다 . 따라서 공식 패치 릴리스에 주의를 기울이고 사기꾼보다 먼저 적용하는 것이 좋습니다.

WAF 보호

WAF와 같은 네트워크 보호 장치에서 실제 트래픽 상황에 따라 "class.*", "Class.*", "*.class.*", "*.Class.*"와 같은 문자열에 대한 규칙 필터링을 구현합니다. 배포된 서비스. 규칙을 필터링한 후 비즈니스 운영을 테스트하여 추가 영향을 방지합니다.

임시 수리 조치

누출의 임시 수리는 다음 두 단계를 동시에 수행해야 합니다.
 
1. 응용 프로그램에서 전역적으로 @InitBinder 주석을 검색하여 dataBinder.setDisallowedFields 메서드가 메서드 본문에서 호출 되는지 확인합니다 . 이 코드 조각의 도입부가 발견되면 원래 블랙리스트 ","*.class.*", "*.Class.*"}에 {"class.*","Class.*를 추가하세요. (참고: 이 코드 조각을 많이 사용하는 경우 모든 곳에 추가해야 함)
 
2. 응용 시스템의 프로젝트 패키지 아래에 다음 전역 클래스를 생성하고 이 클래스가 Spring에 의해 로드되는지 확인합니다(컨트롤러가 위치한 패키지에 추가하는 것이 좋습니다). 클래스가 추가된 후에는 프로젝트를 다시 컴파일 및 패키징하고 기능 검증을 위해 테스트해야 합니다. 프로젝트를 다시 게시합니다.
org.springframework.core.annotation.Order 가져오기;

        org.springframework.web.bind.WebDataBinder 가져오기;

        org.springframework.web.bind.annotation.ControllerAdvice 가져오기;

        org.springframework.web.bind.annotation.InitBinder 가져오기;

        @ControllerAdvice

        @주문(10000)

        공개 클래스 GlobalControllerAdvice{

             @InitBinder

             공개 무효 setAllowedFields(webdataBinder 데이터 바인더){

             String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};

             dataBinder.setDisallowedFields(abd);

             }

        }

image.png.jpg

Spring 프로젝트 의 Git Repository  에서 Spring 개발자가 원격 코드 실행 취약점에 대한 수정 작업을 하고 있는 것으로 보이지만 공식 확인을 기다려야 합니다.
신고공유스크랩
4
1명이 추천

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story