[Security] Log4j 추가 취약점 발견

sania Ka·2021년 12월 16일
2
post-thumbnail

CVE-2021-44832 내용 일부 추가 : 2021/12/29
CVE-2021-45105 내용 일부 추가(2차) : 2021/12/23
CVE-2021-45105 내용 일부 추가 : 2021/12/20
CVSS Score 갱신 : 2021/12/17
최초 작성 : 2021/12/16

CVE-2021-45046

Log4j 공식 문서

CVE-2021-45046: Apache Log4j2 Thread Context Message Pattern and Context Lookup Pattern vulnerable to a denial of service attack.

Severity: Moderate
Severity: Critical

Base CVSS Score: 3.7 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L)
Base CVSS Score: 9.0 (AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H)
NVD metrics

Versions Affected: All versions from 2.0-beta9 to 2.15.0, excluding 2.12.2

지난번 글 에서 다룬 Log4Shell, CVE-2021-44228에 이어서, 추가적인 취약점이 발견되었다. 지난 글에서 간략히 다루긴 했지만, 조금 더 상세하게 적는것이 좋다고 생각했다.

최초 발견시에는 CVSS Score가 3.7로 평가되었으나, 취약점이 추가로 발견되어 9.0으로 상향 조정 되었다.

Severity is now Critical
The original severity of this CVE was rated as Moderate; since this CVE was published security experts found additional exploits against the Log4j 2.15.0 release, that could lead to information leaks, RCE (remote code execution) and LCE (local code execution) attacks.
Base CVSS Score changed from 3.7 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L) to 9.0 (AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H).


개요

이 취약점은 다음의 사항을 만족할때 발생한다.

  1. Log4j를 2.15.0으로 업데이트 하지 않고
  2. Log4j configuration 파일에서 %m{nolookups}을 설정했거나,
    시스템 설정 log4j2.formatMsgNoLookups 또는
    환경변수 LOG4J_FORMAT_MSG_NO_LOOKUPS를 true로 설정한 경우
  3. Log4j를 통해 로그를 출력할때, ThreadContext를 사용한다면

여전히 RCE 취약점에 노출되어 있다.

또한 Log4j 2.15.0 버전을 사용하더라도, ThreadContext를 사용한다면, DOS의 위험성이 존재한다.


해결방안

특정 상황에서 더이상 %m{nolookups}, 시스템 설정 log4j2.formatMsgNoLookups, 환경변수 LOG4J_FORMAT_MSG_NO_LOOKUPS 설정이 안전하지 않다. 취약점을 막기 위해서 각 버전별로 조치해야 할 사항은 아래와 같다.

CVE-2021-45105 취약점으로 인해 조치사항이 변경되었다.
CVE-2021-44832 취약점으로 인해 조치사항이 변경되었다.

Java 8 이상

Log4j 버전을 2.16.0으로 올린다.
2.16.0 버전에 추가 dos 취약점이 발견되었다.
Log4j 버전을 2.17.0으로 올린다.
Log4j 버전을 2.17.1으로 올린다.

Java 7

Log4j 버전을 2.12.2로 올린다.
Log4j 버전을 2.12.3로 올린다.
Log4j 버전을 2.12.4로 올린다.

Java 6

Log4j 버전을 2.3.1로 올린다.
Log4j 버전을 2.3.2로 올린다.

그 외

JndiLookup 클래스를 class path에서 제거한다.
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class


취약점 테스트

%m{nolookups} 설정에 대한 취약점

Log4j 2.14.0 버전을 사용했다.

log4j2.xml 파일 설정

간단한 endpoint 설정 (kotlin)

공격 코드

콘솔 출력 결과


여전히 공격이 잘 되는 것을 볼 수 있다.


시스템 / 환경변수 설정에 대한 취약점

Log4j 2.14.0 버전을 사용했다.

JVM 설정

log4j2.xml 파일 설정

간단한 endpoint 설정 (kotlin)

공격 코드

콘솔 출력 결과

마찬가지로 여전히 공격이 잘 된다.


2.15.0 버전 DOS 취약점

Log4j 2.15.0 버전을 사용했다.

log4j2.xml 파일 설정

간단한 endpoint 설정 (kotlin)

공격 코드

콘솔 출력 결과

요청 하나 보낼 때마다 jndi 조회가 60번 가량 일어난다.


참고문서

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046
https://nvd.nist.gov/vuln/detail/CVE-2021-45046
https://issues.apache.org/jira/browse/LOG4J2-3221
https://blog.cloudflare.com/protection-against-cve-2021-45046-the-additional-log4j-rce-vulnerability/
https://www.lunasec.io/docs/blog/log4j-zero-day-update-on-cve-2021-45046/

0개의 댓글