Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
text4shell-tools — JavaのJAR/WARアーティファクト内の脆弱なApache Commons Textを検出・パッチ適用し、クラスのフィンガープリントを作成して、CVE-2022-42889(Text4Shell)の呼び出し箇所をバイトコードスキャンで特定します。 | Kitploit
ツール/GitHubGitHub/jfrog/text4shell-tools
防御ツール静的分析脆弱性分析コード分析バイナリ解析サプライチェーンセキュリティ
GitHubjfrog/text4shell-tools

text4shell-tools

JavaのJAR/WARアーティファクト内の脆弱なApache Commons Textを検出・パッチ適用し、クラスのフィンガープリントを作成して、CVE-2022-42889(Text4Shell)の呼び出し箇所をバイトコードスキャンで特定します。

リポジトリを見る
104203年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

commons-text-tools

クイックリンク

クリックして確認:

  • commons-text の .jar ファイルとそのバージョンを見つける

  • commons-text の脆弱性のある関数への呼び出し

  • commons-text の .jar ファイルへのホットパッチで脆弱な動作を無効化する

  • スキャンとパッチの例

概要

CVE-2022-42889 は、広範囲の Java ベースのアプリケーションに深刻な脅威をもたらす可能性があります。この文脈で開発者が問うべき重要な質問は次のとおりです。

1. 私のコードに commons-text は含まれていますか? どのバージョンですか?

リリースしたコードに commons-text は含まれていますか? そのライブラリのどのバージョンが含まれていますか? これらの質問への回答は、2つの要因によりすぐには得られない場合があります。

  1. 推移的依存関係: commons-text がプロジェクトの直接の依存関係リストにない場合でも、他の依存関係によって間接的に使用されている可能性があります。

  2. このライブラリのコードは、独立したファイルとして直接現れるのではなく、他のコード jar ファイルにバンドルされている場合があります。

JFrog はこの問題の解決を支援するツールを公開しています: scan_commons_text_versions。このツールは StringLookupFactory のクラスコードを探し(含まれる .jar ファイル名や pom.xml ファイルの内容に関係なく)、オブジェクトのバージョンのフィンガープリントを取得しようとし、含まれている commons-text のバージョンが脆弱かどうかを報告します。

2. 私のコードは脆弱性のある commons-text 関数を使用していますか?

この質問は、開発者がコードベース内の commons-text への呼び出しが、攻撃者によって制御される可能性のあるデータを渡すかどうかを確認したい場合に関連します。アドバイザリで議論されているように、脆弱性を修正する最も安全な方法は適切なパッチを適用することですが、パッチが適用されていない commons-text を前提とした場合の潜在的な影響を管理し、検証することは、多くの状況で価値があります。

scan_commons_text_calls_jar.py は、コンパイル済み .jar 内の脆弱性のある関数への呼び出しを特定し、各呼び出しが出現するクラス名とメソッド名として結果を報告します。

3. システムに脆弱性のある commons-text jar ファイルがあります。危険な動作をすばやく無効化するにはどうすればよいですか?

  • 更新が最善の解決策であり、このソリューションは迅速なホットパッチを目的としています。

  • CVE-2022-42889 の脆弱性の文脈では、commons-text 内のクラス org/apache/commons/text/lookup/ScriptStringLookup により、攻撃者が制御するソースから ${script} を通じて受け取った文字列に埋め込まれたスクリプトの実行が可能になります。したがって、ScriptStringLookup.lookup 関数の呼び出しは、その機能が有効化されていることを示します。

  • 私たちは、この特定の呼び出しにパッチを適用して、スクリプト実行機能を利用できないようにするツール Text4ShellPatch を提供します。パッチを適用すると、ライブラリは(攻撃者によって制御される可能性のあるコードの代わりに)警告メッセージを返すスクリプトを常に実行します。

  • 同様に、DNS および URL ルックアップは、攻撃者によって ${dns} と ${url} を通じて制御される場合、信頼できないコンテンツをロードする可能性があります。したがって、それぞれのルックアップである DnsStringLookup と UrlStringLookup は、パッチによって無効化され、警告メッセージを返すようにできます。

  • パッチは特定の jar ファイルに適用でき、script ルックアップのみ、またはアプリケーションでの使用が想定されていない場合のより良い保護のために script、dns、 を対象に適用できます。

4. 脆弱性のある commons-text jar のスキャンとパッチ適用を自動化できますか?

私たちの2つのツールを組み合わせることで、脆弱性のある commons-text jar ファイルをスキャンしてパッチを適用することができます。

この Github リポジトリには、scan_and_patch.sh という名前のサンプル bash スクリプトがあります。基本的には、scan_commons_text_versions.py スクリプトを使用して、特定の root-folder の下で脆弱なバージョンの commons-text jar ファイルを見つけ、それらに対して Text4ShellPatch ツールを次のように実行します。

自動化の例


scan_commons_text_versions.py

使用法
root@kitploit:~
python scan_commons_text_versions.py root-folder [-quiet] [-exclude folder1 folder2 ..]

このツールは root_folder を再帰的にスキャンして .jar および .war ファイルを探します。各ファイル内で、ツールは StringLookupFactory.class を探します(各 .jar ファイル内を再帰的に)。クラスが少なくとも1つ見つかった場合、ツールはそのバージョンのフィンガープリントを取得しようとし(パッチやバックポートパッチに見られるいくつかのバリエーションを含む)、コードが脆弱かどうかを報告します。

-quiet フラグを指定すると、バージョンの結論のみが出力され、その他のメッセージ(ファイルが見つからない/アーカイブを開けなかった/パスワードで保護されたアーカイブ)は抑制されます。

-exclude(オプション)の後に指定されたフォルダはスキップされます。


scan_commons_text_calls_jar.py

このツールには Python 3 と以下のサードパーティライブラリが必要です: jawa、tqdm、easyargs、colorama

依存関係のインストール
root@kitploit:~
pip install -r requirements.txt
使用法

デフォルトの使用例:

root@kitploit:~
python scan_commons_text_calls_jar.py root-folder

root-folder 内のすべての .jar ファイルを再帰的にスキャンし、それぞれについて StringSubstitutor/StringLookup の lookup/replace/replaceIn メソッドへの呼び出しの場所(クラス名とメソッド名)を出力します。

ツールは、次のコマンドライン フラグを使用して追加のユースケース向けに設定できます。


text_4_shell_patch

使用法
root@kitploit:~
java -jar Text4ShellPatch.jar TARGET_JAR [PATCHING_MODE]
  Where TARGET_JAR is the application to patch and PATCHING_MODE is
    0 (default): Patch Script lookup
    1:           Patch Script + DNS + URL lookups
  [Note: The original Jar will be kept in the same folder with the .orig.jar extension]  

このツールは、指定された commons-text jar 内の org/apache/commons/text/lookup/ScriptStringLookup クラスを探し、lookup() 関数の内容を警告メッセージに置き換えて関数から戻ります。これにより、新しい ScriptStringLookup クラスには eval が存在しなくなります。

また、PATCHING_MODE オプションを 1 に設定すると、DnsStringLookup および URLStringLookup クラスにもパッチを適用し、lookup() 関数を無効化できます。

処理中にバックアップファイルが同じパスに .orig.jar 拡張子で生成されます。

コードソースからの生成

Text4ShellPatch は、Maven で次の簡単なコマンドを使用して編集およびコンパイルできます: mvn clean assembly:single。target/ フォルダに Text4ShellPatch.jar ファイルが作成されます。

ツールをダウンロード
url
  • 元の jar がパッチ適用版に置き換えられる前に、同じ場所にバックアップが生成されます。バックアップファイル名は次のパターンに従います: <original_jar_name>_YYYY.MM.DD_HH.mm.ss.orig.jar。ここで YYYY、MM、DD はそれぞれ年、月、日であり、HH、mm、ss はそれぞれ時、分、秒です。

  • 次の質問で答えられるように、脆弱性のある commons-text のバージョンを見つけて自動的にパッチを適用することも可能です。

  • フラグデフォルト値用途
    --class_regex(.*StringSubstitutor|.*StringLookup)必須クラス名の正規表現
    --method_regex(lookup|replace|replaceIn)必須メソッド名の正規表現
    --quickmatch_string(StringLookup|StringSubstitutor)ファイル分析の事前条件: 指定された正規表現を含まない .jar ファイルは無視されます
    --class_existence未設定未設定の場合、正規表現で指定された class::method への呼び出しを探します。設定すると、--method_regex は無視され、jar 内の --class_regex で指定されたクラスの存在を探します。
    --no_quickmatch未設定設定すると、--quickmatch_string の値は無視され、すべての jar ファイルが分析されます
    --caller_block.*org/apache/commons/text呼び出し元クラスがこの正規表現に一致する場合、表示されません