WPO365 LOGINに認証回避の脆弱性、45.2で修正
WordPressのMicrosoft連携プラグインWPO365 LOGINに、盗まれたSAML応答の再送で管理者を含む他人としてログインされる脆弱性があります。SAMLログインを使うサイトは、版を確認して修正版に更新してください。
急ぎ度: 早めに
CVSS v3は7.4、CVSS v4は9.1で、認証なしにネットワークから悪用でき、管理者権限の乗っ取りにつながる一方、修正版は公開済みで更新だけで解消できるためです。
関係があるか
WordPressにWPO365 | LOGINを入れ、SAMLでシングルサインオンを受け付けている組織が対象です。社内ポータルや会員サイトを、Microsoftアカウントでログインさせる構成が典型です。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| WPO365 | SEAMLESS WORDPRESS + MICROSOFT INTEGRATION(WPO365 | LOGIN、スラッグはwpo365-login) | 45.2より前の全ての版 | 45.2 |
確かめ方
- 1WordPressの管理画面でプラグインの一覧を開き、WPO365 | LOGINの版が45.2より前でないかを見ます。
- 2WP-CLIが使える環境では、次のコマンドで版を確認できます。
- 3複数のWordPressサイトを運用している場合は、サイトごとにプラグインの有無と版を洗い出します。SAMLログインを有効にしているかどうかも、あわせて確認してください。
何が起きたか
WPO365 | LOGINは、SAMLで受け取ったログイン応答を一度しか使えないようにする仕組みが、実際には働いていません。そのため、正規の署名が付いたSAML応答を手に入れた第三者は、応答の有効期間内であれば同じものを繰り返し送り、応答の持ち主としてログインできます。持ち主が管理者であれば、管理者としてログインされます。
原因は、処理済みのメッセージIDを記録するSaml2_Service::check_message_id()の論理エラーです。IDをwpo365_saml_message_idsというtransientに保存する前に処理が終わってしまい、同じIDが二度届いても重複として検出されません。再送されたログインは、正規のログインと区別がつかない形で通ります。
公表は2026年11月4日で、修正版は45.2です。
攻撃の流れ
-
1
応答を入手
署名が有効なSAML応答を、攻撃者が何らかの形で手に入れる。
-
2
ACSへ再送
入手した応答を、WordPress側のログイン受付先(ACSエンドポイント)へ送る。
-
3
重複を見逃す
メッセージIDが保存されていないため、再送が重複として検出されない。
-
4
他人として侵入
有効期間内なら繰り返し成功し、管理者を含む被害者としてログインされる。
どう悪用されるか
認証は不要で、利用者の操作も要りません。ネットワーク越しにログイン受付先へ応答を送れれば足ります。ただし、有効な署名が付いたSAML応答を事前に入手している必要があり、CVSS v3で攻撃の複雑さが高と評価されているのはこの前提のためです。
成功すると、応答の持ち主として認証されます。持ち主が管理者なら、サイトの設定変更、コンテンツの書き換え、情報の閲覧が可能になります。再送は有効期間内なら何度でも通り、重複チェックも働かないため、ログ上は正規のログインと見分けにくくなります。可用性への影響は評価されていません。
今すぐやること
-
1
導入している版を確認する
全てのWordPressサイトで、WPO365 | LOGINの有無と版を洗い出します。SAMLログインを有効にしているサイトを優先して見ます。
wp plugin get wpo365-login --field=version -
2
修正版に更新する
WPO365 | LOGINを修正版に更新します。本番に当てる前に、テスト環境でMicrosoftアカウントによるログインが通ることを確かめておくと安心です。
-
3
不審なログインがないか調べる
更新前の期間について、WordPress側のログインログと、認証基盤側のサインイン履歴を突き合わせます。認証基盤に記録がないのに、WordPressに管理者ログインが残っていないかを確認してください。
-
4
ベンダーの告知を確認する
プラグイン配布ページの更新履歴やベンダーのアドバイザリで、回避策、追加の設定変更、ほかに影響する製品の有無を確かめます。
すぐ更新できないとき
更新がすぐにできない間は、WordPressの管理画面(wp-admin)へのアクセスを社内ネットワークやVPNからに絞ると、管理者としての侵入を難しくできます。これは一般的な緩和策で、脆弱性そのものは残ります。ベンダーが案内している回避策があれば、そちらを優先してください。
背景
WPO365 | LOGINは、WordPressのログインをMicrosoftのアカウントに任せるためのプラグインです。社内ポータルやイントラネットを、従業員のMicrosoftアカウントだけで開けるようにする用途で使われます。パスワードをWordPress側で持たずに済む反面、SAMLの応答を受け取る側の検証に不備があれば、そのサイトの入口がそのまま破られます。
SAMLの応答は、署名があれば中身は本物だと確かめられますが、一度使われたかどうかは署名からは分かりません。そのため受け取る側が、処理済みのメッセージIDを記録して再利用を拒む必要があります。入場券の半券を回収しない改札のように、記録が残らなければ同じ券で何度でも入れてしまいます。今回の脆弱性は、この記録を残す処理が実際には完了していなかったというものです。
よくある質問
Q.CVSS v3が7.4でv4が9.1と、評価が分かれているのはなぜですか。
Q.SAMLログインを使っていないサイトでも更新が必要ですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| wpo365 | WPO365 | SEAMLESS WORDPRESS + MICROSOFT INTEGRATION (WPO365 | LOGIN) |
45.2 未満 |
45.2 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
WPO365 | LOGIN (wpo365-login) plugin before version 45.2 contains an authentication bypass by capture-replay vulnerability caused by a non-functional anti-replay check in Saml2_Service::check_message_id(), which never persists processed SAML message IDs to the wpo365_saml_message_ids transient due to a logic error that returns before saving. Attackers who capture a validly-signed SAMLResponse can replay it to the ACS endpoint repeatedly within its assertion validity window to log in as the victim, including administrators, without detection since the duplicate message ID check never triggers.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory