Log4J 취약점은 JDNI, LDAP를 이용
•
JNDI, Java Naming and Directory Interface - Java에 추가된 인터페이스. Java 프로그램이 디렉토리를 통해 데이터를 찾을 수 있도록 하는 디렉토리 서비스
•
JNDI는 이러한 디렉토리 서비스를 위해 다양한 인터페이스가 존재하는데 그 중 하나가 LDAP.
•
Java 프로그램들은 JNDI와 LDAP를 통해 Java 객체를 찾을 수 있다.
ldap://localhost:389/o=JNDITutorial
Bash
위와 같이 접속한다면, LDAP 서버에서 JNDITutorial 객체를 찾을 수 있음.
•
이러한 접근 인터페이스가 치명적이게 된 이유는, Log4j에는 편리하게 사용하기 위해 ${prefix:name} 형식으로 Java 객체를 볼 수 있게 하는 문법이 존재하기 때문임. 예를 들어 ${java:version}은 현재 실행 중인 Java 버전을 볼 수 있음
•
해커가 로그에 기록되는 곳을 찾아 ${jndi:sndi:snd://example.com/a} 과 같은 값을 추가하기만 하면 취약점을 이용할 수 있음. 이 값을 넣는 방법은 User-Agent와 같은 일반적인 HTTP 헤더일 수 있고 여러가지 방법이 있음.
Log4J 버전을 2.17.1 이상으로 올려야 함. ← Java 8이 필요.