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