wpLingua 3.2.0、認証不要の格納型XSSを修正:コメント内の偽装プレースホルダーがHTML属性を突破
WordPress翻訳プラグイン wpLingua の3.1.1以前では、同梱HTMLパーサーが使うプレースホルダーキーを偽装することで、匿名のコメント投稿者が翻訳ページにスクリプトを注入できました。3.2.0へ更新してください。
WordPress用プラグイン wpLingua(「Translate and boost SEO – Automatic AI translation」)で、3.1.1以前のすべてのバージョンに影響する認証不要の格納型クロスサイトスクリプティング(XSS)が修正されました。修正版 3.2.0 は2026年11月9日に公開され、アドバイザリ(WPSEC-2026-2763)は11月10日に公表されています。
脆弱性の仕組み
wpLingua は各ページを訪問者が選んだ言語で再レンダリングします。その際、同梱のHTML DOMパーサーは <script>、<style>、<code> 要素の中身とHTMLコメントを一時的に取り除き、___noise___ NNNN という予測可能なプレースホルダーキーに置き換えます。翻訳後、元の内容を元に戻します。
問題は復元の処理です。パーサーは属性値の中にあるものも含め、一致するキーをすべて復元し、しかもエスケープせずに戻していました。これにより攻撃者は次のような手口を使えます。
- WordPressのコメントで許可されているマークアップを使い、属性の中に偽の
___noise___キーを仕込んだコメントを投稿する。 - 自分が制御できる内容を、パーサーが置き換え対象とする場所(HTMLコメントや
<code>要素など)にページ内のどこかで出現させる。 - 翻訳版ページの描画時に、パーサーがその内容を属性に流し込み、引用符を突破して有効なマークアップになる。
アカウントは不要で、注入されたスクリプトは管理者を含め、翻訳版ページを開いたすべての訪問者のブラウザで実行されます。
深刻度
アドバイザリのCVSS 3.1ベクトルは AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N で、スコアは7.2(High)。認証不要の格納型XSSとしては典型的な値です。WPSecによると、スキャン対象サイトでのプラグイン利用率、影響を受けるバージョンの割合はいずれも低く、大規模な被害につながる事案ではありません。ただし、wpLingua を使いコメントを開放しているサイトは直接の対象になります。
対応方法
- wpLingua を 3.2.0以降 に更新する。
- すぐに更新できない場合は、更新までの間、翻訳ページのコメントを閉じるか承認制にすることを検討する。
- 最近のコメントに不審なマークアップや
___noise___を含む文字列がないか確認する。
教訓
「プレースホルダーに置き換えて後で戻す」手法は、翻訳・キャッシュ・圧縮系のプラグインでよく使われます。トークンに置き換えて後で戻す場合、復元はプラグイン自身が作成した箇所だけに限定し、出力は文脈に応じてエスケープする必要があります。一致する文字列をすべて信頼したことが、無害なはずのコメントをスクリプト注入に変えてしまいました。
プラグインをきれいに更新できない古いWordPressやPHP環境を運用している場合、RescuePHPはサードパーティ製プラグインの監査、セキュリティ修正の適用やバックポート、安全なアップグレード計画の策定をお手伝いできます。