Log4jの脆弱性を薄く浅くまとめる
某セキュリティキャンプのリレーブログです。前回の僕の記事はZennでかきましたが、今回ははてなブログを使ってみようと思います。前回の方のブログはこちら。
今回のテーマは Log4jの脆弱性(CVE-2021-44228) Twitterでかなり騒がれていましたが、実際にどのようなものなのでしょうか? (Javaをほとんど触ったことがない人がまとめます。)
Log4gって何?
そもそも今回脆弱性が見つかったLog4jとは何者なのか。簡単に。
Log4jは、オープンソースで提供されている Javaプログラム用のロギングライブラリ。Apache Software Foundationが提供していて、正式にはApache log4jというらしい。 Log4jは、設定ファイルで設定することで、デバッグ情報やエラー情報などをプログラム内からコンソールやファイルやログサーバなどに出力することができるっぽい。
脆弱性の概要
今回の脆弱性は、任意のコード実行の脆弱性。IPAによると、「遠隔の第三者が細工したデータを送る事で、任意のコマンドを実行される可能性がある」そう。要は、任意のJavaコードをサーバーやコンピュータ上で実行されていまいかねないということ。 LunaSecは「壊滅的な割合の設計上の失敗」、Tenableは「過去10年間で最大かつ最も重大な単一の脆弱性」といっている。 ちなみに、この脆弱性にはLog4Shellという名前がついているらしい。
何が起きる(た)
今回悪用されたのは、Lookupという機能。 JavaにはJNDI(Java Naming and Directory Interface)というAPIがある。これを利用すると、実行時にデータへのパスを指定してJavaオブジェクトがLookup できるようになる。また、LDAP(Lightweight Directory Access Protocol)というものがあり、任意の場所にあるサーバーからURLとしてオブジェクトデータを取ってきてしまう。これらによって、悪意のあるコードを読み込ませることや、データを攻撃者のサーバーに送信してしまうことがあるらしい。
参考資料
Apache Log4j の脆弱性対策について(CVE-2021-44228) IPA