モバイルアプリにおけるText4Shell(CVE-2022-42889):心配すべきか
CVE-2022-42889は、強力なハンドラーを悪用する文字列補間に起因するApache Commons Textライブラリの脆弱性で、Amazon Shopping、Udemy、Grammarlyなどの人気アプリにも含まれています。本記事では、この脆弱性がモバイルアプリに該当するかどうかとそのリスクを解説します。
CVE-2022-42889は、強力なハンドラーを悪用する文字列補間に起因するApache Commons Textライブラリの脆弱性で、リモートコード実行(RCE)を可能にします。
この脆弱性はText4Shellと呼ばれ、バージョン1.10がリリースされるまで7か月にわたって修正が保留されていました。
モバイルアプリにおいて、Apache Commons Textライブラリは比較的よく使われているライブラリで、次のような人気アプリに含まれています。
- 10億ダウンロードを超える
Mi Music - 5億ダウンロードを超える
Amazon shopping - いずれも数千万ダウンロードを誇る
Flo Ovulation、LG ThinQ、Fitbit、UMANG、Mi Home、Webnovel、Grammarly Keyboard、Udemy
この脆弱性は技術的には、スクリプトの実行、DNSクエリの解決、ファイルの読み取り、XMLの解析とアクセス、Java定数の読み取り、URLリクエストの送信といった機能を提供する補間ハンドラーの使用に起因します。
以下は、scriptハンドラーを悪用する例です。
String poc1 = “${script:javascript:java.lang.Runtime.getRuntime().exec(\”touch /tmp/tarlogic\”);}”;
String rce1 = StringSubstitutor.createInterpolator().replace(poc1);
String poc2 = “script:javascript:java.lang.Runtime.getRuntime().exec(\”touch /tmp/tarlogic\”)”;
String rce2 = StringLookupFactory.INSTANCE.interpolatorStringLookup().lookup(poc2);
この脆弱性は、補間をサポートする2つのクラス、StringSubstitutorとStringLookupFactoryにさかのぼることができます。
バージョン1.10で導入された修正では、スクリプト、URL、DNSのハンドラーがデフォルトから削除されました。
* 修正:https://github.com/apache/commons-text/commit/b9b40b903e2d1f9935039803c9852439576780ea
しかし、ファイルの内容、環境変数、XMLパスなどのハンドラーは残されたままであり、これらは依然としてシークレット、パスワード、ソースコードといった機密情報へのアクセスに悪用される可能性があります。
脆弱なライブラリを使用しているモバイルアプリを分析したところ、影響を受けるAPIはほとんど使われていないため、脆弱である可能性は低いことが分かりました。
たとえば、この依存関係が含まれているアプリでStringLookupFactoryクラスを検索しても、見つかったものはわずかでした。一致したものについても、メソッドのコールスタックからは危険な入力にさらされている形跡は見られませんでした。

Apache Commons Textを含む50以上のアプリをレビューした結果、StringLookupFactoryを使用していたのは1つだけで、残りはすべてこのライブラリの脆弱でないAPIを使用していました。
ただし、ライブラリを名前で検索するだけでは不十分です。多くの場合、ライブラリは難読化されており、元のクラス名が削除されているためです。以下はUdemyアプリの例です。


全体として、当社の分析では脆弱である可能性は低いと考えられます。モバイルアプリをお持ちの場合は、次の点を確認してください。
- スキャンレポートのフィンガープリントセクションを確認することで、アプリにこのライブラリが含まれているかどうかを確認できます。

- 分析環境を使って脆弱なクラスの使用状況を確認してください。ただし、難読化が施されていないかどうかの確認も忘れないでください。
- 現在実装されている修正は、リモートコード実行のリスクを取り除くだけです。ファイルの内容の読み取り、環境変数へのアクセス、Java定数の読み取りは依然として可能です。そのため、これらを有効なハンドラーのリストから削除することをお勧めします。