← 목록으로

CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE

[CVE] CVE 분석 · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-20 03:11:15 · 조회 5

2022년 공개된 Spring Framework의 원격 코드 실행 취약점이다. Log4Shell만큼 광범위하게 알려졌지만, 실제 영향 범위(특정 조건이 맞아야 함)는 더 제한적이었다.

취약한 지점: 데이터 바인딩과 클래스 로더

Spring MVC는 HTTP 요청 파라미터를 자바 객체의 필드에 자동으로 매핑해주는 데이터 바인딩 기능이 있다. 이때 파라미터 이름으로 class.module.classLoader로 시작하는 중첩 프로퍼티 경로를 쓰면, Spring이 그 경로를 그대로 따라가면서 객체 내부의 ClassLoader, Tomcat의 로그 설정 객체 같은 내부 구조에까지 접근을 허용해버린다.

공격 흐름 (개념)

  1. class.module.classLoader.resources.context.parent.pipeline.first.pattern 같은 파라미터 경로로 Tomcat의 접근 로그(AccessLog) 포맷 설정에 접근한다
  2. 로그 포맷 문자열에 JSP 웹쉘 코드를 주입한다
  3. 로그 파일 저장 경로(파일 날짜 포맷, 디렉터리 등)를 웹에서 접근 가능한 경로로, 확장자를 .jsp로 지정한다
  4. Tomcat이 접근 로그를 기록할 때마다, 그 JSP 웹쉘 코드가 실제 .jsp 파일로 디스크에 써진다
  5. 그 경로로 직접 접근해서 웹쉘을 실행한다

즉 Log4Shell처럼 "로그 문자열 안에 코드가 곧바로 실행"되는 게 아니라, "설정을 조작해서 웹쉘 파일을 직접 만들게 유도"하는 방식이다.

영향받는 조건

패치

Spring Framework 5.3.18 / 5.2.20에서 위험한 프로퍼티 경로(class.* 접두사) 접근을 차단하는 패치가 나왔다. 이 사건은 프레임워크의 편의 기능(자동 바인딩)이 내부 구조까지 무분별하게 노출시킬 수 있다는 걸 보여준 사례로, 화이트리스트 방식으로 바인딩 허용 필드를 명시적으로 제한하는 게 왜 중요한지를 잘 보여준다.

CVE 분석 카테고리의 글 (8/8)

  1. CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행
  2. CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건
  3. CVE-2014-0160 (Heartbleed): OpenSSL 하트비트가 새어나간 메모리
  4. CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점
  5. CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승
  6. CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점
  7. CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득
  8. CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE
← CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득