概要
WordPress Coreに、研究者Paulos Yibelo氏(pwn.ai)によって「Click2Shell」と名付けられたCSRF(クロスサイトリクエストフォージェリ)脆弱性が発見された。ログイン中の管理者に細工したリンクをクリックさせるだけで、WordPress.org上の任意のテーマを本人の意図なく強制インストールでき、さらにそのテーマ自体に別の脆弱性が存在する場合はサーバー上での任意のPHPコード実行(RCE)にまで発展しうる。単体でのCVSSスコアは7.1(高)だが、実際の攻撃チェーンとして評価すると9.6(緊急)に達する。脆弱性は8月22日にWordPressへ報告され、9月17日リリースのWordPress 7.1.1で修正済みだ。現時点でCVE番号は未採番だが、概念実証(PoC)コードと詳細な技術情報はすでに公開されており、悪用可能な状態にある。
脆弱性の仕組み
Click2Shellの核心は、テーマのスラッグ(識別名)がサーバー側とブラウザ側で異なる方法で処理されるという「不一致」にある。管理画面がテーマプレビュー用のURLを読み込むと、WordPress.orgのAPIはテーマスラッグをサニタイズした上で実在するテーマ情報を返す一方、フロントエンドのJavaScriptは同じ文字列をサニタイズせずそのままjQueryセレクタに挿入してしまう。この処理の食い違いがセレクタインジェクションを引き起こし、攻撃者が用意したテーマの「インストール」ボタンを、閲覧中の管理者のセッション権限でJavaScript経由で自動的にクリックさせることが可能になる。インストールされたテーマは有効化されないため一見無害に見えるが、Patchstackなどの分析によれば、続けてWordPress Customizer経由でテーマを有効化し、そのテーマのAJAXハンドラの脆弱性を悪用して攻撃者のZIPファイル(プラグインを偽装)を実行させることで、最終的なコード実行に至る。研究者らは実際に「Mobile Repair Zone」という実在のテーマに存在した未認証コード実行の脆弱性と組み合わせ、このチェーン全体を実証している。攻撃の成立にはWordPressアカウントもインストール用nonceも不要で、管理者が悪意あるリンクを踏むか、あるいはサイト上にXSS脆弱性がありそれを閲覧するだけで条件が満たされる点が特徴だ。なお、テーマのインストール権限を持つのは管理者のみであるため、編集者や投稿者権限のアカウントではこの攻撃チェーンを引き起こせない。
影響範囲と対策
影響を受けるのはWordPress 6.0から7.1.1未満までの幅広いバージョンで、7.1.1では修正パッチがバージョン4.7系までさかのぼって提供されている。修正内容は、テーマ一覧の.theme要素にセレクタのスコープを限定し、$.escapeSelector()を適用してスラッグを常にリテラルなテキストとして扱うようにするというものだ。悪用に成功した場合、ファイルの改ざんやコンテンツの削除、ユーザーデータへのアクセス、wp-config.phpからのデータベース資格情報の窃取、不正な管理者アカウントの作成、悪意あるスクリプトの埋め込みなど、サイトを完全に掌握される深刻な被害につながりうる。現時点で野放しの悪用は確認されていないものの、PoCが公開済みであることから今後の攻撃増加が懸念される。Patchstackは、即時のアップデートが困難な場合の一時的な緩和策としてDISALLOW_FILE_MODS定数を有効化することを推奨しているが、根本的な対策としては全ユーザーが速やかにWordPress 7.1.1へアップデートすることが強く求められる。