緊急レベルのJava「Log4j」脆弱性、多くのシステムに影響する恐れ
米国時間の12月9日ごろから、Java用のログ出力ライブラリ「Apache Log4j」におけるリモートコード実行の脆弱性が話題になっています。広く普及しているライブラリに致命的な問題が見つかったことで、影響範囲の大きさが心配されます。
Log4jはJavaプログラムからログを出力するときに使われる定番のライブラリです。開発者がLog4jを使ってログを出力していれば、運用担当者は設定ファイルを利用してログの出力先をファイルからメール送信に変えるといったことが可能になります。
最初のバージョンがリリースされたのは2001年となっており、筆者の記憶では少なくとも2004年くらいにはJavaによる業務システムの案件で使っていました。他のプログラミング言語にも似たような名前で移植されています。
今回の脆弱性(CVE-2021-44228)は2014年に出たバージョン2以降が対象となっており、現在稼働している多くのJava製ソフトウェアが影響を受ける恐れがあります。直接は使っていない場合でも、Javaの主要なフレームワークが使っている場合があります。深刻度はCVSS v3のスコアとして最大値となる10.0(緊急)としています。
具体的には、Log4jが特定の文字列をログに出力する際に、リモートに配置された任意のコードを実行してしまうというものです。バッファオーバーフローのような攻撃とは異なり、Log4jに存在していた機能を悪用していることから、より簡単に攻撃を受ける恐れがあります。
これが問題になるのは、ユーザーが入力した文字列をそのままログに出力している場合です。この影響が大規模に表れた「マインクラフト」では、サーバーとクライアントの両方で対策が必要になっています。12月10日には国内のマインクラフトコミュニティにおいて、バージョンアップを呼びかける動きが広がりました。
ほかにも、Webサイトのログイン画面や検索用のテキストボックスが狙われており、入力値をLog4jでログに出力しているサイトが影響を受けています。主要なWebサイトのフロントエンドはバックエンドから分離されていることが多いとはいえ、迅速な対応が求められる状況といえます。
また、この脆弱性を利用する攻撃手法をインターネット上などで見かけたとしても、実際に試してみると罪に問われる恐れがあるため、一切手を出さないことをおすすめします。
突発的なメンテナンスなどに注意
Java言語は、Androidアプリのようなクライアント側だけでなく、オンプレミスやクラウド環境などサーバーサイドでも使われており、金融やインフラなど社会の重要なサービスを支えています。
そうした用途では、ユーザー入力をそのままログに出力するような場面は考えにくいものの、いったんサービスを停止してログ周りを確認し、必要に応じて改修する作業に入る可能性があります。しばらくは突発的なメンテナンスに注意したほうがよいでしょう。
ソフトウェア開発者向けの対処方法としては、Log4j自体のバージョンを最新化するほか、ソースコードに手を加えずに対処する方法など、さまざまな対策が案内されています。
今回の脆弱性を抱えたLog4jは7年前から提供されており、多くのシステムに組み込まれてきたと考えられます。その中には開発者の不在などで保守が難しいものも少なくないとみられ、どこまで被害が拡大するかは予測困難といえます。