Apache Log4j 사태의 포문을 연 CVE-2021-44228 취약점은 2013년 Log4j2 version 2.0-beta9부터 도입된 ‘JNDILookup plugin(LOG4J2-313)’기능을 활용해 JNDI가 ‘${jndi}’명령에 특정 서식이 포함된 로그 메시지를 받게되면 JNDI Injection이 발생되는 취약점이다.
JNDI는 자바에서 디렉토리를 이용하여 데이터를 호출할 수 있게 해주는 디렉토리 서비스(Directory Service)다. JNDI는 다양한 디렉토리 서비스를 이용할 수 있게 하는 CORBA COS, Java RMI Registry, LDAP등의 SPI를 제공한다. 공격자는 LDAP URL을 컨트롤하여 자신의 통제 하에 Java 프로그램을 실행시켜 오브젝트를 로드할 수 있게 되는데 CVE-2021-44228 취약점은 이점을 공격에 활용하게 된다.
JNDI(Java Naming and Directory Interface)
· Java프로그램이 디렉토리를 통해 데이터(Java객체형태)를 찾을 수 있도록 하는 디렉토리 서비스
· Java 애플리케이션이 조회를 수행하고 LDAP, RMI, DNS 등과 같은 프로토콜을 사용하여 Java 객체를 검색할 수 있도록 하는 Java API
· 애플리케이션이 RMI 레지스트리에 등록된 원격 객체 또는 LDAP와 같은 디렉토리 서비스와 상호 작용할 수 있는 API를 제공
예를 들어 하나의 Java 프로그램에서 JNDI와 LDAP을 사용해 Java 오브젝트를 호출하는 경우 [그림 4]와 같이 ‘ldap://localhost:389/o=JNDITutorial’라는 구문을 통해 LDAP서버에서 JNDITutorial 오브젝트를 찾아 속성을 읽어들이게 된다.