
CVE-2021-44228に対して脆弱な可能性があるJarファイルのスキャナー
log4jのCVE-2021-44228問題に対して脆弱なアプリケーションは、jar、war、earファイルをスキャンしてJndiLookup.classの存在を検索することで検出できる可能性があります。
調査対象のプラットフォームによって、PowerShellスクリプトまたはPython3スクリプトのどちらを実行するのが適切かが決まります。どちらの場合も、オプションの引数は検索を開始するトップレベルディレクトリです。
発見されたファイルはすべて、それを使用するアプリケーションが脆弱かどうかを判断するために調査する価値があります。存在するJndiLookup.classについて、log4jは通常、jarファイル名にバージョンを含めています。例えば、log4j-core-2.14.1.jarにヒットした場合、脆弱なアプリケーションを示しています。あるいは、log4j-core-2.16.jarでもヒットする可能性があります。これは、JndiLookupコードがlog4jのバージョン2.16にも依然として存在しますが、デフォルトで無効になっているためです。詳細はVU#930724を参照してください。
例えば、PowerShell版スキャナーの呼び出し例です:

同様に、Python3版の呼び出し例です:

最後に、Bash版の呼び出し例です:

このスクリプトのBash版とPython版は、設計上、スキャンを単一のファイルシステムに制限することに注意してください。
PowerShell版では、スキャンする場所をスクリプトにパイプで渡すことで、チェックする対象を制御できます。例えば、paths.txtファイルに含まれるパスのリストをスキャンするには:
get-content .\paths.txt | .\checkjndi.ps1
Windowsでのスキャン実行における最初のヒットを見てみましょう:
WARNING: C:\tmp\2.15\log4j-core-2.15.0.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class
jarファイル名から、これはlog4j 2.15のライブラリです。このバージョンのlog4jはCVE-2021-44228を修正していますが、CVE-2021-45046として概説される欠陥が依然として含まれています。CVE-2021-45046の影響は、log4j 2.15を使用する特定のJavaアプリケーションに対するサービス拒否です。log4j 2.15より前のバージョンを使用し、かつCVE-2021-45046の前提条件にも適合するJavaアプリケーションの場合、影響はRCEです。
2番目のヒットを見てみましょう:
C:\tmp\2.16\log4j-core-2.16.0.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class ** BUT APPEARS TO BE PATCHED **
このjarファイルにはlog4jの2.16バージョンが含まれており、CVE-2021-44228に対して脆弱ではありません。この結果は情報提供のために報告されており、ベンダーが自社製品にパッチを適用したことを示しています。
3番目のヒットを見てみましょう:
WARNING: C:\tmp\ghidra_10.0_PUBLIC\Ghidra\Framework\Generic\lib\log4j-core-2.12.1.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class
ここでは、Ghidraがlog4jバージョン2.12.1を使用していることがわかります。したがって、脆弱であると想定すべきです。実際、Ghidraのバージョン10.1以前はCVE-2021-44228に対して脆弱です。
これらのスクリプトのいずれかによって報告されたヒットはすべて調査し、log4jのバージョンが実際に修正された2.16であることを確認するか、ソフトウェアベンダーに連絡して修正版のソフトウェアを入手する必要があります。あるいは、VU#930724には、脆弱なjarファイルからJndiLookup.classを削除する方法に関する情報があります。
PowerShell版のスキャナーには、ファイルまたはディレクトリを調査できない場合の追加のエラー報告機能があります。特に、UnauthorizedAccessExceptionを報告するUnable to scanエラーは、ディレクトリやファイルへのアクセス権限の問題を示しています。InvalidDataExceptionを報告するUnable to scanエラーは、通常、アーカイブの破損が原因です。