

(Goで書かれています。なぜなら、「一度書けば、どこでも動く」からです。)
これは、WebアプリケーションなどのJavaソフトウェアのインストール環境において、log4j 1.xおよび2.xの脆弱性を持つインスタンスを発見するために使用できるシンプルなツールです。JARおよびWARアーカイブが検査され、脆弱性があることが知られているクラスファイルがフラグ付けされます。スキャンは再帰的に行われます: WARファイルの中にWARファイル、その中にJARファイル、その中に脆弱なクラスファイルが含まれている場合も適切にフラグ付けされるはずです。
現在認識されている脆弱性は以下の通りです:
このスキャンツールは現在、Mavenを通じて取得された既知のビルド成果物をチェックします。Linuxディストリビューションで行われるようなソースからの再ビルドは認識されない場合があります。
また、ZIPアーカイブ構造を書き換えることでJARファイルから悪質なクラスをパッチ除去するために使用できる、シンプルなパッチツールも含まれています。
タグ付きリリース向けのx86_64 Windows、Linux、MacOSX用バイナリは、Releasesページから提供されています。
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /path/to/exclude …] \
[--scan-network] \
[--log /path/to/file.log] \
/path/to/app1 /path/to/app2 …
--verboseフラグは、問題が見つからなくても、チェックされたすべての.jarおよび.warファイルを表示します。
--quietフラグは、既知の脆弱性の指標を除いて出力を抑制します。
--ignore-v1フラグは、log4j 1.xの脆弱性のチェックを_除外_します。
--ignore-vulnsフラグは、特定の脆弱性のチェックを_除外_することができます。例: -ignore-vulns=CVE-2021-45046,CVE-2021-44832。すべての既知の脆弱性をチェックするには、次のように空のリストを渡します: -ignore-vulns=
--logフラグは、すべてをstdout/stderrの代わりにログファイルに書き込むことを可能にします。
--excludeフラグを使用して、スキャン対象からサブディレクトリを除外します。複数回使用できます。
--scan-networkフラグは、スキャナーにネットワークファイルシステムを検索するように指示します(デフォルトでは無効)。これはWindowsでは実装されていません。
いずれかの脆弱性を示すクラスファイルが見つかった場合、次のようなメッセージが標準出力に出力されます:
./local-log4j-vuln-scanner - a simple local log4j vulnerability scanner
Checking for vulnerabilities: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
examining /path/to/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
indicator for vulnerable component found in /path/to/vuln/Downloads/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war::WEB-INF/lib/log4j-core-2.14.1.jar (org/apache/logging/log4j/core/net/JndiManager.class): JndiManager.class log4j 2.14.0-2.14.1 CVE-2021-44228, CVE-2021-45105
Scan finished
注意: これは自己責任で使用し、元のJARファイルは保管してください。
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtering out org/apache/logging/log4j/core/pattern/MessagePatternConverter.class (log4j 2.14)
Filtering out org/apache/logging/log4j/core/net/JndiManager.class (log4j 2.14.0-2.14.1)
Writing to log4j-core-2.14.1-patched.jar done
Goコンパイラをインストールします。
チェックアウトしたリポジトリで次のコマンドを実行します:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Windowsシステムでは、もちろん適切な.exe拡張子を追加してください。)
GNU General Public License, version 3
Hilko Bengen <[email protected]>