
ローカルバイトコードスキャナ for the Log4JShell Vulnerability (CVE-2021-44228)
Log4jShell Bytecode Detector は、jar ファイルが重大な CVE-2021-44228 の影響を受けているかどうかを特定するのに役立つオープンソースツールです。このツールは jar ファイルをスキャンし、jar ファイル内のクラスを、脆弱性のあるクラスのハッシュセットと比較します。ハッシュは Maven Central 上のアーティファクト用に事前計算されています。
重要なお知らせ: Maven Central 上の影響を受けるアーティファクトのリストを拡張しました。このリストには 18.816 個のアーティファクトが含まれます。これらのアーティファクトは、宣言された依存関係として log4j-core を使用しているか、影響を受けるバージョンの log4j-core に一致する .class ファイルがアーティファクト内に存在することを確認済みです。
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JDetector <ABSOLUTE_PATH_TO_JAR_TO_CHECK> を実行します。jar が影響を受けている場合、ツールはコマンドラインに情報を出力します:
CVE-2021-44228 found declared as dependency in META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml
CVE-2021-44228 found in class file org/apache/logging/log4j/core/net/JndiManager$1.class
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JProcessDetector を実行します。log4j に深刻なリモートコード実行の脆弱性が発見され、バージョン 2.0-beta9 から 2.14 が影響を受けます。この脆弱性は、Java で最も使用されているロギングライブラリのひとつである log4j に影響を与えたため、クリティカルと分類されています。参考資料や記事は数多く存在します。
log4j は、ほとんどすべての Java プロジェクトでロギング目的に使用されてきました。現在、どのプロジェクトやライブラリが実際に影響を受けるのかを理解する必要があります。Java の依存関係メカニズムにより、アプリケーションは脆弱性のあるライブラリバージョンを transitively (推移的) に含む場合にも影響を受ける可能性があります。プロジェクト A の直接依存関係 B のいずれかが lib への依存関係を持つ場合、プロジェクト A はライブラリ lib を transitively に含むことになります。影響を受けているかどうかを確認する簡単なテストは、maven 依存関係ツリーを使用して行えます。
例: Maven プロジェクトで mvn dependency:tree コマンドを実行します。
[INFO] exampleProject:mainProject:jar:0.0.1-SNAPSHOT
[INFO] +- exampleProject:lib-using-log4j:jar:0.0.1-SNAPSHOT:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
ただし、この確認は最初の兆候にすぎず、以下の理由により十分ではありません:
Java プログラムは頻繁に:
その結果、Java プロジェクトが使用している あらゆる ライブラリが、プロジェクトに脆弱性を含める可能性があります。詳細なバイトコード分析が役立ちます。これは、このリポジトリの一部として公開しているものです。
このツールをビルドするには、次を実行します
mvn compile
実行可能な jar を組み立てるには、次を使用します
mvn clean compile assembly:single
脆弱性のあるクラスのハッシュセットは、Maven Central リポジトリ全体に対して事前計算されています。クラスのハッシュには、Fingerprinting 技術を使用してバイトコードが類似していると特定されたすべてのハッシュが含まれます。
事前計算された情報には以下が含まれます:
影響を受けるバージョン範囲として、[2.0-beta9, 2.15) を対象としました。参考
このツールは、Andreas Dann によって発明された Java 向けの新しいバイトコードフィンガープリンティング技術を使用しています。基本的な流れは次のとおりです。
注: 展開をより簡単にするために、このリポジトリには脆弱性のあるクラスの SHA ハッシュが同梱されています。この情報は Fingerprinting を使用して計算されています
ハッシュと Maven アーティファクトのリストは完全ではありません。定期的にリストを更新します。
このツールは CodeShield の共同創業者によって共同制作されました
フィードバックをお待ちしています!
影響を受けるアーティファクトのリストの拡張に取り組んでおり、常に提供内容の改善を目指しています。contribution welcome
また、このスキャナが役に立った場合は、このリポジトリに ⭐️ をお願いします!
サポートが必要な場合、または私たちの技術について知りたい場合は、[email protected] までご連絡ください。
CodeShield チーム 💚