Pocket IDにメール偽装の脆弱性、2.12.0で修正
Pocket ID 2.2.0以上2.12.0未満で、一般ユーザーが任意のメールアドレスを検証済みとして公開できる脆弱性が公表されました。2.12.0へ更新し、連携アプリがメールで利用者を照合していないかも確認してください。
急ぎ度: 早めに
CVSS v3は9.6で、修正版2.12.0が公開済みのため、ログイン用の基盤として使っているなら早めの更新が必要です。
関係があるか
Pocket IDを自社運用し、社内ツールや業務アプリのログインを任せている組織が対象です。とくに、連携アプリがメールアドレスで利用者を自動的に照合・作成している環境が危険です。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Pocket ID(pocket-id) | 2.2.0以上、2.12.0未満 | 2.12.0 |
確かめ方
- 1Pocket IDの稼働中の版を確認し、2.2.0以上2.12.0未満なら対象です。コンテナ運用なら、使っているイメージのタグから版を読み取れます。
- 2設定が既定のまま(emailsVerified=false、allowOwnAccountEdit=true)かどうかを見ます。既定のままなら影響を受ける構成です。
- 3Pocket IDに連携している各アプリが、ログイン時にemailとemail_verifiedを使ってアカウントを紐づけていないかを、アプリ側の設定や仕様で確認します。stableなsubだけを使うアプリは、連携先への影響を受けません。
何が起きたか
Pocket IDが、本人確認の済んでいないメールアドレスを「検証済み」として連携アプリに伝えてしまう脆弱性です。
メール検証用のトークンはユーザーの識別子にだけ結びついており、アカウントのメールアドレスを変更しても失効しません。そのため、以前のアドレス向けに発行されたトークンで、変更後のアドレスが検証済みになります。
連携アプリがemail_verifiedを信頼してアカウントを自動で紐づけたり作成したりしていると、攻撃者の身元が別の利用者のアカウントに結びつくおそれがあります。弱点は認証そのものではなく、メールの検証状態の扱いにあります。分類はCWE-345です。
攻撃の流れ
-
1
一般ユーザーで利用
Pocket IDに自分のアカウントを持つユーザーが出発点になります。
-
2
検証トークンが残る
自分が管理するアドレスで発行された検証トークンが、アドレス変更後も有効なままです。
-
3
別アドレスが検証済みに
変更後の任意のアドレスが、email_verifiedがtrueの状態で公開されます。
-
4
連携アプリが照合
メールで利用者を照合するアプリが、他人のアカウントを攻撃者の身元と結びつけます。
どう悪用されるか
悪用には、Pocket IDにログインできる一般ユーザーの権限が要ります。ネットワーク経由で実行でき、被害を受ける側の利用者の操作は要りません。影響が出るのは、emailsVerified=false、allowOwnAccountEdit=trueという既定の構成です。また、狙うメールアドレスがすでに別のPocket IDユーザーのものであってはいけません。
成功すると、Pocket IDは攻撃者のアカウントに、他人のアドレスを検証済みとして付けます。連携アプリが検証済みメールで自動照合や自動作成をしていれば、そのアプリ上で他の利用者のアカウントに入られ、情報の閲覧や書き換えにつながります。CVSSの評価で機密性と完全性がともに高いのは、このためです。連携先のアプリまで被害が及ぶので、影響範囲の評価も広くなっています。
subだけで利用者を識別するアプリには、この被害は及びません。
今すぐやること
-
1
稼働中の版を確認する
Pocket IDが2.2.0以上2.12.0未満かどうかを確かめます。コンテナ運用なら、稼働中のイメージのタグを一覧で見られます。
docker ps --format '{{.Names}}\t{{.Image}}' -
2
2.12.0以降の修正版に更新する
更新前にデータのバックアップを取り、2.12.0以降へ上げます。更新手順と注意点は、Pocket IDのリリースノートとセキュリティ告知で確認してください。
-
3
連携アプリの照合方式を見直す
メールアドレスだけで利用者を紐づけているアプリは、subによる識別に切り替えるか、自動紐づけを止めます。
-
4
侵害の跡を調べる
公表は2026年11月4日なので、適用前の期間が短くても、Pocket IDでの不審なメールアドレス変更と、連携アプリ側の見覚えのない紐づけや新規アカウントを確認します。
すぐ更新できないとき
すぐに更新できないときは、allowOwnAccountEditを無効にして、一般ユーザーが自分でアカウントを編集できないようにする方法が考えられます。この設定が影響の条件に含まれているためです。効果の範囲はベンダーの告知で確認してください。あわせて、連携アプリのメールによる自動照合・自動作成を一時的に止めると、連携先への被害を避けられます。
背景
Pocket IDは、パスキーでサービスにログインできるOIDCプロバイダーです。社内の複数のツールのログインを一か所にまとめる役割を担うため、ここでの判断が各アプリのアカウント照合にそのまま使われます。
OIDCでは、利用者の恒久的な識別子はsub、メールアドレスは変わりうる属性です。それでも、メールが検証済みだからという理由でemailを使った自動紐づけを採用するアプリは少なくありません。今回の脆弱性は、この信頼の前提になるemail_verifiedの値が偽られる点にあります。
よくある質問
Q.パスキーの認証が破られたのでしょうか。
Q.連携アプリがsubだけで識別している場合、更新は後回しでよいですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Pocket ID is an OIDC provider that allows users to authenticate with their passkeys to services. From 2.2.0 until 2.12.0, SendEmailVerification uses the token model in backend/internal/model/email_verification_token.go to bind an email-verification token only to the user's identifier, while UpdateUser can change the account email without invalidating the outstanding token and VerifyEmail marks the current address as verified. An ordinary user can request a token for an address they control, change the account to an arbitrary unused address, and redeem the old token so Pocket ID publishes the new address with email_verified set to true. The default affected configuration uses emailsVerified=false and allowOwnAccountEdit=true; the target address must not already belong to another Pocket ID user. A relying application that trusts a verified email for automatic account matching or provisioning can link the attacker's identity to another user's account, while applications that rely exclusively on the stable OIDC sub claim are not affected by that downstream consequence. This issue is fixed in version 2.12.0.
出典: CVE.org (CVE Program・cvelistV5) NVD