JPCERTコーディネーションセンター(Japan Computer Emergency Response Team Coordination Center:JPCERT/CC)は12月17日、公式ブログ「JPCERT/CC Eyes」の記事「Apache Log4j2のRCE脆弱性(CVE-2021-44228)を狙う攻撃観測」において、Apache Log4j 2.x(以下、Log4j 2)に報告されているリモートコード実行の脆弱性を狙った攻撃に関する観測結果を公表した。12月10日以降、JPCERT/CCが設置している観測用のハニーポットでも多数の攻撃活動が観測されているとして注意を促している。
オープンソースのJavaログングライブラリであるLog4j 2には、極めて緊急性が高いリモートコード実行の脆弱性「CVE-2021-44228」(通称「Log4Shell」が報告されている。この脆弱性はLog4j 2で提供されているJNDI Lookupと呼ばれる機能に起因するもので、Log4j 2が稼働するアプリケーションにおいて特定のパターンの文字列をログとして出力する際に、その文字列が外部のディレクトリサービスなどに配置されたJavaクラスファイルのURLを指していた場合、対象のクラスをロードして実行してしまうというもの。
攻撃への悪用が極めて容易であることから、CVE-2021-44228についてSNSなどで拡散された直後から、インターネット上ではこの脆弱性を狙った攻撃活動を観測したという報告が相次いでいる。JPCERT/CC Eyesによると、JPCERT/CCで運用しているWebサーバを模したハニーポットでも多数の攻撃活動を観測しており、今後もその数は増加することが予想されているという。
CVE-2021-44228を悪用するための攻撃は「${jndi:<;protocol>://$lt;url>} 」という形式を取る。多くのアプリケーションでは、Webサイトの入力フォームから受け取った文字列をログファイルに記録している。そのため、それらの任意の入力フォームに対して攻撃用の文字列を送信するだけで攻撃が成立してしまう可能性がある。
JPCERT/CCのハニーポットでは、「${jndi:ldap://」で始まる単純な文字列に加えて、WAF(Webアプリケーションフレームワーク)の回避を目的として難読化された文字列も観測しているという。
難読化のパターンは多数報告されており、JPCERT/CCのハニーポットで観測された以外のものもあるため、WAF等のフィルタリングによる防御には限界があることを考慮しなければならない。
Apache Software FoundationはCVE-2021-44228を回避するための修正版として12月8日にバージョン2.15.0をリリースしているが、その後の調査で対策が不十分であることが判明し、14日にバージョン2.16.0を、同17日にバージョン2.17.0をリリースしている。これらの後続で判明した問題は、いずれも特定のパターン文字列で対策が回避されてしまうというものだった。
したがって、本稿執筆時点の最新版はApache Log4j 2.17.0となっている。バージョン2.15.0から2.17.0に至るリリースの経緯については、公式サイトの脆弱性情報を参照いただきたい。
JPCERT/CCでは、自組織で用いられているソフトウェアに対して、既に不正なアクセスが行われているという想定のもとで影響を確認し、システムのアップデートまた回避策の適用を実施するように呼びかけている。