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(こちらのほうが一般的でしょう)を介して使う場合も、結果は同じです。

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の課題の解き方を学びましょう。


