Skip to main content

CVE-2022-42889を解説:Apache Commons Textの任意コード実行の脆弱性

2022年10月18日

0 分で読めます

まず最初に、これは新たなLog4ShellやSpring4Shellの脆弱性ではありません。リモートコード実行の問題ではありますが、2021年12月にLog4jで発生した問題ほど深刻でも、悪用が容易でもありません。

Log4jの問題と同様に、問題の本質は、ルックアップを実行でき、それが悪用される可能性があることです。しかし、Log4Shellの脆弱性は非常に簡単に悪用できました。今回は必ずしもそうとは限りません。実際、この問題は、今年の初めにCVE-2022-33980について執筆した記事と非常によく似ています。

Apache Commons Textのセキュリティ問題を解説

Apache Commons Textライブラリでは、変数の補間を実行できます。これにより、動的に評価できるプロパティを読み込めます。

問題は、ルックアップを実行するStringLookupにあります。ルックアップとは、DNSレコードを解決したり、URLから値を読み込んだり、JVMのスクリプト実行エンジンを使ってスクリプトを実行したりする式です。これらのURLやスクリプトが外部ソースに由来する場合、信頼できない値を使うことでリモートコード実行が発生する可能性があります。これはCVE-2022-42889として重大度「高」の脆弱性に分類されており、バージョン1.5.xから1.9.xで発生します。

CVE-2022-42889の例

以下に、NashornまたはJavaScriptエンジンを使ったこの種のスクリプトの例を2つ示します。interpolatorStringLookupを直接使う場合も、StringSubstitutor(こちらのほうが一般的でしょう)を介して使う場合も、結果は同じです。

スクリプトの文字列展開を介してコマンドを実行する、StringSubstitutorとStringLookupを使ったJavaコード例

Nashornスクリプトエンジンは、Java 15以降ではデフォルトで利用できなくなっている点に注意してください。そのため、独自にスクリプトエンジンを用意しない限り、これらのスクリプトは実行されません。しかし、多くの企業がJava 8のような古いバージョンに依存しているため、これは深刻な問題になり得ます。最新のLTSバージョンであるJava 17を使用している場合、JavaScriptもNashornのスクリプトも、デフォルトで利用できるエンジンがないため実行されません。

CVE-2022-42889への対処方法

改めて強調しますが、これはLog4Shellの再来ではありません。自分でStringLookupを使っていないとしても、依存関係にあるライブラリが使っているかどうかは分かりません。この問題を解決する最も簡単な方法は、commons-textをバージョン1.10以降にアップグレードすることです。これにより、URL、DNS、スクリプトのプレフィックスがデフォルトで無効になり、この経路での任意コード実行を防げます。

Snykでスキャンすると、この脆弱性が使用環境に存在するかどうかを確認できます。検出された場合は、バージョン1.10に更新し、CLIでsnyk monitorを実行して、本番環境での監視を継続してください。

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。