Log4jの脆弱性 CVE-2021-44228 のフローがわからなかったので調べた
調べたら具体的なやり方がわかったが、ここでは直接的なフローは書かないようにする
概要
Log4jのJNDI Lookup機能で外部からの入力で任意のJavaコードを実行できてしまうということ
影響を受けるバージョン
2.0 <= Apache log4j2 <= 2.14.1
JNDIとは
Java Naming and Directory Interface(JNDI)は、ディレクトリ・サービスが提供するデータやオブジェクトを名前で発見 (discover) し、参照 (lookup) するのためのAPIである。他の全てのJava APIと同様、JNDIは他システムに対するインターフェースであり、具体的な実装からは独立している。またJNDIにはサービス・プロバイダ・インターフェース (SPI) が規定されており、フレームワークにディレクトリ・サービスの実装をプラグインすることができる。ディレクトリ・サービスの実装はサーバでもフラットファイルでもデータベースでもよく、サービスの提供側が任意に選択できる。 Java Naming and Directory Interface - Wikipedia
フロー
- 脆弱性を悪用する文字列をHTTPリクエストして、それをログに書き込む
- Log4jのJNDI lookupの機能がそのログの文字列から変数化
- あることによってそれが悪意のあるJava Classをダウンロードし、それをJavaアプリが利用してしまう
関係プロジェクトでは使っていなかったのでよかった
また、今回はバージョンアップすればよいが、Javaのバージョンが古いとそのバージョンアップもできないとのことなので、定期的な言語とライブラリのアップデートは本当に大事だと思わせる出来事だった
他参考
https://piyolog.hatenadiary.jp/entry/2021/12/13/045541
https://milestone-of-se.nesuke.com/sv-advanced/sv-security/cve-2021-44228-log4shell-logjam/