Craft CMS の RCE 脆弱性 CVE-2024-56145 (CVSS 9.3) が FIX:PoC も提供

CVE-2024-56145 (CVSS 9.3): Remote Code Execution Vulnerability in Craft CMS, PoC Published

2024/12/22 SecurityOnline — 人気の PHP ベース CMS である Craft CMS に、深刻な RCE 脆弱性 CVE-2024-56145 (CVSS 9.3) が存在することが、Assetnote により公表された。この脆弱性の悪用に成功した攻撃者は、特定のコンフィグ下において、認証無しでリモート・コード実行 (RCE) を達成し、影響を受けるインストールに深刻なリスクをもたらす可能性を手にする。

この脆弱性により、PHP の register_argc_argv コンフィグで設定される振る舞いの悪用が可能になる。デフォルトでは、この設定によりクエリー文字列の引数が $_SERVER[‘argv’]  配列に追加され、コマンドライン入力が模倣される。この振る舞いは、一部のコンテキストでは有用であるが、CLI 環境だけに特化されたオプションの Web 経由での受け渡しを、攻撃者に許してしまうことが判明した。

Assetnote の説明は、「Craft CMS の公式 Docker では、”register_argc_argv = On” に設定されている。それが、この脆弱性のトリガーとなる」というものだ。

この脆弱性は、Craft CMS の “bootstrap/bootstrap.php” ファイルに存在する。このファイルには、コードが CLI 環境で実行されているかどうかを確認せずに、コマンドライン・オプションを処理するという欠陥がある。攻撃者は、その不備を悪用して、”-templatesPath” や “-configPath” などのパスを操作し、CMS に任意のファイルを読み込ませる可能性を得る。

この脆弱性を悪用して RCE を実行する場合、PHP のファイル・インクルード・メカニズムを利用する必要がある。Assetnote の研究者たちが最初に遭遇したのは、Craft CMS の防御的な “file_exists” チェックなどの障壁である。これは、”php://filter” や HTTP ファイル・ラッパーなどの、一般的なメソッドをブロックするためのものだが、”ftp://” ラッパーがテンプレート・ファイルを読み込む際に、これらのチェックをバイパスすることが判明した。

研究者たちは、自身で管理する FTP サーバに、悪意の Twig テンプレート・ファイルをホストすることで、Craft CMS へとペイロードを注入し、実行さあせることに成功した。Twig のソート・フィルターを巧妙に利用することで、Craft CMS にビルトインされるサンドボックス・メカニズムを回避し、以下のようなシステム・コマンドを実行できたという。

{{ ['system', 'id'] | sort('call_user_func') }}

このペイロードにより、system 関数を正常に呼び出し、リモート・コード実行を達成できたという。

この脆弱性 CVE-2024-56145 に対する、Python で書かれた PoC エクスプロイト・コードが、セキュリティ研究者である Chocapikk により GitHub で公開されている。

Craft CMS は、中小企業や大企業が運用する、15万以上の Web サイトで利用されている。Assetnote は、「Craft CMS が大企業に広く普及し、当社のアタック・サーフェイス管理プラットフォームでも、多くの顧客が使用していると判明した。そのため、当社は、徹底的な調査が必要であると判断した」と述べている。

すでに Craft CMS チームは、バグの公表から24時間を待たずにパッチをリリースし、この問題に迅速に対応している。ユーザーに推奨されるのは、可能な限り早急に、修正済のバージョン 5.5.2/4.13.2 以降 へと更新することである。アップグレードが難しいユーザーに対して推奨される、一時的な緩和策として挙げられるのは、”php.ini” において、”register_argc_argv” を無効化することだ。

register_argc_argv = Off