すでに認証済みの管理者がリンクを開くだけで、ボタンを押すことなくWordPressにテーマをインストールさせられる――そんな事態を、攻撃者の手にした1本のリンクが引き起こします。9月17日、WordPressはCMSコアの欠陥を修正するバージョン7.1.1をリリースしました。pwn.aiチームは、あるテーマに存在する別の脆弱性と組み合わせることで、Click2Shellと呼ばれる攻撃チェーンがサーバー上でのPHPコード実行にまで到達することを示しています。WordPressは7.1.1メンテナンス・セキュリティリリースの発表でこのパッチについて詳しく説明しています。
公式カタログからの強制テーマインストール
専門家たちは、コア部分の欠陥を「WordPress.org公式ディレクトリからのテーマ強制インストール」と説明しています。この脆弱性単体では、任意のZIPアーカイブをアップロードすることはできません。攻撃者は既存のテーマを選択し、その後WordPressが通常の方法でそれをダウンロードするという流れです。pwn.aiはこの段階をCVSS 3.1で7.1と評価しており、RCEに至るチェーン全体では9.3としています。研究者らはClick2Shellの分析記事でこの手法を詳しく解説しています。
この問題は、サーバーとブラウザが同じテーマパラメータを異なる方法で解析することに起因します。WordPressカタログAPIは値を正規化し、通常のテーマ名を取得します。一方、管理画面のJavaScriptは元の文字列をそのまま保持し、jQueryセレクターに埋め込みます。特殊文字を使うことでこのセレクターを改変でき、標準コード自身が実際のインストールボタンを押してしまう状態を作り出せるのです。
管理者による確認は不要
管理者による確認は一切必要ありません。アクティブなセッションにはすでにinstall_themes権限と保護用のnonceが含まれているため、被害者のブラウザがユーザーに代わって必要な情報をすべてWordPressに渡してしまいます。攻撃者はそのサイトのアカウントを持つ必要はなく、必要なのは管理者がログインした状態で、用意されたリンクやそのリンクを含むページを開くことだけです。
インストールされたテーマは非アクティブのままなので、サイトの見た目は変化せず、サイト所有者に気づかれるような明確な兆候も現れません。しかしWordPressは、カスタマイザーによるプレビューの際に、まだ有効化されていないテーマのPHPコードを読み込んでしまうことがあります。まさにこの仕組みが、隠れたインストールを単なる問題にとどめず、さらなる攻撃チェーンの土台へと変えているのです。
隠れたインストールから実際のシェル奪取へ
実証実験でpwn.aiはMobile Repair Zone 2.5.4を使用しました。このテーマには、プラグインパッケージのアドレスを受け取り、アーカイブをダウンロードして展開し、nonceチェックや必要な権限の確認なしにPHPファイルをインクルードするAJAXハンドラーが存在していました。強制的なテーマインストール後、カスタマイザーがそのコードを読み込み、続く2回目のリクエストによって攻撃者が選んだPHPコードがWebサーバーのアカウント権限で実行されてしまいます。
このチェーン全体が完了すると、WordPressの乗っ取りに典型的な様々な権限が手に入ります。wp-config.phpの読み取りやデータベース認証情報の取得、プラグインおよびWooCommerceデータへのアクセス、ユーザーやコンテンツの改変、PHPプロセスの機密情報の読み取り、アプリケーションファイルの編集などです。pwn.aiは、こうした結果はあくまでテスト実証で示されたものであり、実際の攻撃キャンペーンが確認されたわけではないと強調しています。
WordPressはどのように修正したか
WordPressの開発者は、問題の根本原因であるテーマインストーラーのJavaScriptを修正しました。現在のコードでは検索範囲をdiv.themeカードに限定し、URLから取得したテーマ名をescapeSelector()でエスケープします。この結果、引用符やコンビネーター、その他の制御文字がCSSセレクターの構造を改変することはできなくなり、インストールボタンへ誘導することも不可能になりました。
WordPress 7.1.1には、通常のコアおよびブロックエディタの修正に加えて11件のセキュリティ修正が含まれています。プロジェクト側はサイトを直ちに更新するよう推奨しており、サポート対象の旧バージョン系列についても、4.7系までさかのぼって修正を反映した個別バージョンをリリースしています。自動バックグラウンド更新が有効なサイトでは自動的にインストールが始まるはずですが、バージョンは手動でも確認しておく価値があります。
タイムラインと背景
Click2Shellについては、本稿執筆時点でCVE番号は割り当てられておらず、WordPressも独自の最終的な深刻度評価をまだ公表していません。pwn.aiは8月22日にこの欠陥を報告し、9月1日にチェーン全体の詳細を伝え、修正版のリリース後である9月18日に技術的な詳細を公開しました。現時点でオープンソースの情報として、Click2Shellが実際の攻撃で悪用されたという公開データは確認されていません。
この新たなチェーンは、WordPressコアにおける一連の発見の流れをくんでいます。8月には、pwn.aiがすでにXSS2Shellを示しており、これはログインページの欠陥が特定の条件下でPHPコード実行につながるというものでした。Click2Shellは異なる仕組みを利用しており、攻撃にはサイト上でアクティブなセッションを持つ認証済み管理者が用意されたリソースを開くことが必要です。
Click2Shellは、7月に報告されたwp2shellチェーンとは関連がありません。ただし、両方の問題ともWordPressコアに存在し、コード実行に至り得るという点は共通しています。wp2shellの場合、攻撃者はアカウントや管理者の操作を一切必要とせず、未更新のサイトを乗っ取ることができ、CISAはこれを実際の攻撃で悪用されたものとしてリストに掲載しています。Click2Shellについては、9月18日時点でそうした活動は公には確認されていません。
サイト運営者が取るべき対応
WordPressとpwn.aiはいずれも、個別の回避策を提示していません。サイト運営者は、WordPress 7.1.1または自身のバージョン系列に対応するリリースをインストールし、更新が確実に適用されたことを確認するよう推奨されています。この対応を行えば、インストール済みのテーマにかかわらずコアの欠陥が塞がれ、実証されたチェーンをその最初の段階で断ち切ることができます。
翻訳元: https://meterpreter.org/wordpress-click2shell-7-1-1/