Apache Log4j CVE-2021-44228

Apache Log4j란?

  • 자바 기반 소프트웨어에서 사용되는 로깅 유틸리티이다.
  • Apache Software Foundation에서 개발하여 많은 소프트웨어에 사용되어진다.
  • 특히 아파치 진형의 오픈소스나, 자바 기반 오픈소스에서 많이 채택되어진다.

취약점 요약

  • Log4j 2에는 로그 메시지 기록 시 JNDI 조회한 값을 포함할 수 있는 기능이 있다.

  • 일반적으로는 조회 키에 대한 값이 반환되어 기록하는 것이지만, javax.naming.Reference 상속하는 객체가 반환되면 자바 URLClassLoader가 이 객체의 classFactory와 classFactoryLocation 속성을 조회하여 팩토리 바이트코드를 로드하여 실행하게 된다.

  • 대부분의 웹 애플리케이션은 웹 로그를 기록하는데, 현재 인터넷에서 User-Agent 자리에 JNDI 표현식을 삽입하는 등의 형태로 실제 공격이 발생하고 있다.

  • User-Agent를 로그에 남기려고 시도하다가 공격자가 제어하는 원격 LDAP 서버에 접속하여 원격으로 코드를 받아서 실행하여 공격을 당할 수 있다.

  • 결론적으로 JNDI(Java Naming and Directory Interface) 인젝션을 통해 RCE(Remote Code Execution) 취약점이 발견되었다.

조치 사항

  • JndLookup 클래스를 경로에서 제거 (2.0-beta9~2.10.0)
    • zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  • log4j2.formatMsgNoLookups 속성을 True로 설정 (log4j 2.10.0 이상)
  • log4j를 2.15.0 버전 이상 유지하기

Exploit Code

레퍼런스

이 시리즈의 게시물

댓글