본문 바로가기
Stack Overflow/스프링

[스프링] Apache 보안 취약점 패치 Log4j 2.17.0 교체 개발 방법

by Lich King 2021. 12. 22.

이전에 아파치재단에서 Log4j에 대해 2.15.0 패치를 하엿으나, 신규 취약점이 발견되어 2.16.0, 2.17.0 까지 패치가 진행되었습니다.
기존 2.15.0 패치를 진행할 때는 Log4j에 대해 1.x 버전을 사용하는 시스템에는 적용하지 않아도 되었으나, 신규로 발견된 취약점에서는 1.x에도 뚫려 2.17.0(신규) 패치를 권고하고 있습니다.
이번에 발견되어 알려진 취약점은 Log4j 2.x버전에 있는 JNDI(Java Naming and Directory Interface) 인젝션 취약점으로, 이를 악용하면 해당 시스템에 침투하여 원격 코드 실행(RCE)이 가능하게 됩니다. 
패치를 하지 않을 시, 해당 취약점으로 백도어를 내장할 수 있으니 긴급 패치를 진행해야 합니다. (CVSS 스코어 10점 만점 중 10점, 매우 높은 위험도의 취약점)

보안 취약점 조건 별 영향받는 버전
□ CVE-2021-44228 (원격 코드 실행 취약점)
- 2.0-beta9 ~ 2.14.1 버전
   (Log4j 2.12.2 버전 제외)

□ CVE-2021-45046 (서비스 거부 취약점)
- 2.0-beta9 ~ 2.12.1 버전
- 2.13.0 ~ 2.15.0 버전

□ CVE-2021-4104 (원격 코드 실행 취약점)
- 1.2.x 모든 버전
   (Log4j 1.x 버전 사용자는 Log4j 2.x 버전대로 업그레이드 권장)
   
□  CVE-2021-45105 (서비스 거부 취약점)
- 2.0-beta9 ~ 2.16.0 버전 
   ( Log4j 2.12.3, Log 1.x 버전은 영향받지 않음)

업데이트 조치 방안 (제조사 공식 보안 업데이트 설치 권고)

□ Apache Log4j 최신 버전으로 업데이트 바로가기 (클릭)
(2021년 12월 18일 기준 2.17.0 최신 업데이트 이상 설치 권장)

▷ CVE-2021-45105
      · Java 8 : Log4j 2.17.0 버전 이상으로 업데이트

△  신규 업데이트가 불가할 경우 하기 임시조치 방안을 적용할 수 있습니다.
     ·  PatternLayout에서 ${ctsx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
     ·  ${ctx:loginId} 또는 $${ctx:loginId}를 제거

▷ CVE-2021-44228, CVE-2021-45046, CVE-2021-4104 업데이트 권장
      · Java 8 : Log4j 2.16.0 버전 이상으로 업데이트
      · Java 7 : Log4j 2.12.2 버전 이상으로 업데이트

△ 신규 업데이트가 불가할 경우 하기 임시 조치방안을 적용하실 수 있지만, 임시 조치방안은 게시된 취약점에 대한 단기적 대응으로 신규 버전으로 업그레이드를 권장합니다. log4j-core JAR 파일 없이 log4j-api JAR 파일만 사용하는 경우 취약점 영향을 받지는 않습니다.
      · JndiLookup 클래스를 경로에서 제거 :
         zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

출처: https://blog.alyac.co.kr/4341 [이스트시큐리티 알약 블로그]

하기 설명은 스프링에서 패치를 적용하는 방법을 서술한 것이며, 사실 매우 간단하여 서술이라고 하기에도 부끄럽습니다.
시스템에 Log4j 2.15 패치를 진행하신 분들은 동일한 루틴으로 Log4j 2.17 패치를 진행하시면 됩니다.

1. 요약
1.1 pom.xml 수정
1.2 Project -> Maven -> update project
1.3 라이브러리 적용 체크

 

2. pom.xml

<!-- log4j-core ->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.17.0</version>
</dependency>

<!-- log4j-api ->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.17.0</version>
</dependency>

<!-- log4j-slf4j-impl ->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>2.17.0</version>
</dependency>

<!-- log4j ->
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>

<!-- log4j-jcl ->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-jcl</artifactId>
	<version>2.6.2</version>
</dependency>

현재 사용하고 있는 라이브러리에 따라 필요한 부분에 pom.xml 파일에서 적용을 진행합니다.

log4j-slf4j-impl 은 slf4j를 이어주는 추상 라이브러리로 slf4j.jar을 사용하는 경우 입력해주면 됩니다.

 

3. Maven의 Update Project 진행

적용할 프로젝트 항목에 마우스 우클릭을 하고 나서 Maven -> Update Project를 클릭합니다.

그러면 pom.xml 에 설정된 값에 따라 라이브러리가 하기와 같이 재세팅이 됩니다.

 

4. Maven Dependencies 라이브러리 체크

프로젝트 내의 Maven Dependencies 항목에 라이브러리가 pom.xml 에 설정된 값에 따라 세팅된 것을 확인하실 수 있습니다.

라이브러리가 Maven에 정상적으로 내장하여 빌드되는 경우 패치가 완료됐다고 보면 됩니다.
단, 이전 버전이 있는 경우 pom.xml에서 다른 버전을 삭제하시고 다시 update project를 진행하셔야 합니다.

*적용 파일명
- log4j-api-2.17.0.jar (필수)
- log4j-core-2.17.0.jar (필수)
- log4j-slf4j-impl-2.17.0 (slf4j 를 사용하지 않는 경우 적용할 필요 없음)

참고로 한국 인터넷 진흥원(KISA)에서는 log4j-core-2.x.jar이 세팅되어 있는 것을 확인하라고 권고하고 있습니다.

 

이렇게 진행하시고 정상적으로 빌드가 완료되는 경우 log4j 버전 변경이 성공적으로 진행된 것입니다.

댓글