CVE-2022-21662: 投稿スラッグのStored XSS
概要
- CVE: CVE-2022-21662
- 影響バージョン: WordPress 3.7 〜 5.8.2
- CVSS: 8.0 (High)
- 認証: Author権限(投稿者権限)が必要
- 種別: Stored Cross-Site Scripting(保存型XSS)
2022年1月、WordPressの投稿スラッグ(URLスラッグ)の処理に、保存型XSS脆弱性が発見されました。3年以上にわたって発見されず、wordpress.org自体も影響を受けていた脆弱性です。
何が起きたか
WordPressでは、投稿のURLスラッグ(例: my-blog-post)をユーザーが設定できます。このスラッグは通常、サニタイズされてURLセーフな文字列に変換されます。
しかし、Author権限を持つユーザーがスラッグの値を操作した場合、特定の条件下でJavaScriptコードが保存・実行されるパスが存在しました。
問題のポイント:
- スラッグの値が管理画面の特定の場所でエスケープなしに出力されていた
- Author権限のユーザーが悪意のあるスラッグを作成すると、管理者がその投稿を閲覧した際にXSSが発火
- 保存型(Stored)のため、一度設置すれば管理者がページを開くたびに実行される
攻撃の仕組み
-
悪意のあるスラッグの作成: Author権限のユーザーが投稿を作成し、スラッグにXSSペイロードを含める
-
管理者の閲覧を待つ: 管理者が投稿一覧や編集画面で当該投稿を閲覧すると、XSSが発火
-
管理者権限の奪取: XSSにより管理者のセッションCookieを窃取、または管理者権限で任意の操作を実行:
- 新しい管理者アカウントの作成
- プラグインのインストール(バックドア付き)
- サイト設定の変更
- 他のユーザーのパスワードリセット
-
永続的なバックドア: プラグインやテーマファイルにバックドアを設置し、スラッグのXSSが修正されても侵入を維持
実際の被害
- WordPress 3.7〜5.8.2 の全バージョンが影響(約8年分のバージョン)
- 3年以上にわたり発見されなかった
- wordpress.org自体もWordPressで構築されており、潜在的に影響を受けていた
- マルチサイト環境では、一般ユーザーがAuthor権限を持つことが多く、影響範囲が拡大
- ブログプラットフォームやメディアサイトなど、外部ライターを受け入れるサイトが特に危険
修正と教訓
修正: WordPress 5.8.3で修正。スラッグの出力時に適切なエスケープ処理が追加されました。WordPress 3.7以降のすべてのサポートバージョンにバックポートされました。
教訓:
- Stored XSSの危険性: 一度保存されると、閲覧するたびに実行される
- 権限昇格のベクトル: XSSは「単なるスクリプト実行」ではなく、管理者権限の奪取に直結する
- 長期間の潜伏: 3年以上未発見 — セキュリティレビューを通過していた箇所にも脆弱性は潜む
- 出力エスケープの徹底: 信頼できるデータでも、HTML出力時は必ずエスケープが必要
- 最小権限の原則: Author権限でも管理者を攻撃可能 — 権限付与は慎重に
Nyambushでの検出
NyambushはWordPressのバージョンを検出し、この脆弱性を含むバージョンを使用している場合に警告します。特にStored XSSは攻撃者にとって高い価値があり、バージョンアップの優先度が高い脆弱性です。
定期スキャンを設定し、バージョンの監視を継続することで、このような長期間潜伏する脆弱性のリスクを軽減できます。