
CVE-2026-12227 の概念実証および技術分析。これは WordPress Visual Composer プラグインにおける vcv-template パラメータを介した未認証の LFI/RCE です。
CVE-2026-12227 は、WordPress 用 Visual Composer Website Builder プラグインにおける深刻な (CVSS 9.8) 認証不要のローカルファイルインクルージョン (LFI) 脆弱性であり、バージョン 45.16.0 以下を含むすべてのバージョンに影響します。この欠陥は vcv-template パラメータにあり、攻撃者がサーバー上の任意のファイルをインクルードして実行できるようにします。これにより、機密データの漏洩、アクセス制御のバイパス、さらにはサーバー環境が誤設定されている場合は完全なリモートコード実行 (RCE) につながる可能性があります。
CVE-2026-12227
9.8/10
Visual Composer Website Builder プラグイン (バージョン 45.16.0 まで)
根本原因: この脆弱性は CWE-98: PHP プログラムにおける include/require 文のファイル名の不適切な制御 (しばしば PHP リモートファイルインクルージョンと呼ばれる) に分類されます。これは PageTemplatesController.php ファイル内の、特に viewPageTemplate() 関数におけるロジックの欠陥に起因し、この関数は認証チェックなしで優先度 11 で WordPress の template_include フィルターにフックします。
核心的な問題は「検証してから変更する」という欠陥です:
検証 (生の入力に対して): コードはまず、ユーザーが指定した vcv-template パラメータの生の値に対して WordPress の validate_file() 関数を呼び出します。この関数は、... のようなリテラルのディレクトリトラバーサルシーケンスを含むパスを拒否するように設計されています。この段階では、悪意のある入力 theme:.theme:./.theme:./.theme:./wp-links-opml.php にはリテラルの .. が含まれていないため、検証を通過します。
変更 (検証後): 検証直後に、コードはテンプレートタイプが vc-custom-layout であるかどうか、および値に文字列 theme: が含まれているかどうかをチェックします。含まれている場合、str_replace('theme:', '', $current['value']) を実行し、値から theme: のすべての出現箇所を削除します。
シンク: 変更された値はその後 locate_template() に渡され、パスを解決してファイルをインクルードします。theme: 文字列が削除されたため、断片化されたトラバーサルシーケンスが融合され、../../../../wp-links-opml.php のような有効なパスが生成されますが、これは最終的な形では一度も検証されていませんでした。
攻撃対象領域: 攻撃ベクトル: ネットワーク (AV:N) — この脆弱性は HTTP/HTTPS 経由で直接到達可能です。
認証: 不要 (PR:N) — これは認証不要の脆弱性です。有効なアカウントなしで、任意のリモート攻撃者がトリガーできます。
ユーザーインタラクション: 不要 (UI:N)。
影響を受けるコンポーネント: WordPress 用 Visual Composer Website Builder プラグイン。
脆弱なパラメータ: vcv-template パラメータ。vcv-template-type パラメータと組み合わせて使用されます。
トリガー条件: プラグインが WordPress サイトにインストールされ有効化されている必要があり、フロントエンドページが Visual Composer で構築されている (つまり、通常のパーマリンクが存在する) 必要があります。
悪用に関する注意: 影響: この欠陥により、認証されていない攻撃者がサーバー上の任意のローカルファイルをインクルードして実行できます。インクルードされた PHP ファイルは実行されるため、リモートコード実行 (RCE) につながる可能性があり、サーバーの機密性、完全性、可用性が完全に侵害される可能性があります。
悪用技術: 攻撃者は、根本原因で説明したように、theme: プレフィックスを使用して検証をバイパスする悪意のある vcv-template 値を細工することでこれを悪用できます。例えば、リクエストは次のようになります: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
RCE エスカレーション: LFI 自体は深刻ですが、RCE の達成はしばしばサーバー環境に依存します。一般的な方法は、すでにサーバーにアップロードされているファイル (例えば、PHP コードが埋め込まれた一見無害な画像ファイル) をインクルードするか、他のサーバー誤設定を利用することです。
PoC の可用性: Python スクリプトや Nuclei テンプレートを含む複数の概念実証エクスプロイトが公開されており、認可されたラボ環境での検証に使用できます
[*] 上記の Python コード
パッチバージョン: 45.16.1