Assentの脆弱性、Appleログインでなりすまし、修正版あり
Elixir向け認証ライブラリAssentのSign in with Apple対応に、他のユーザーになりすませる脆弱性が公表されました。Appleログインを提供しているアプリの開発チームは、修正版への更新と、アカウント連携の確認を進めてください。
急ぎ度: 早めに
CVSS v4が9.3の重大な脆弱性で、認証なしにネットワークから悪用でき、修正版0.3.2がすでに公開されています。
関係があるか
ElixirアプリにAssentを組み込み、Sign in with Appleでログインやアカウント連携を提供している組織が対象です。Assentを直接使っていなくても、別の認証ライブラリ経由で依存している場合は同じ扱いになります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| assent(Hexパッケージ) | 0.1.25以上、0.3.2未満 | 0.3.2 |
| assent(pow-authのソースをコミット指定で取り込んでいる場合) | コミットa2d331e8c51376d6c0b04a81aad31e0b4d4d64a3以降、18898bde0296152165ae470078490e5798329b1bより前 | コミット18898bde0296152165ae470078490e5798329b1b |
確かめ方
- 1プロジェクトのmix.lockにassentが入っているか、入っていれば版がいくつかを確認します。
- 2コード内でAssent.Strategy.Appleを呼び出しているか、認証ライブラリの設定にAppleのプロバイダーがあるかを確認します。Appleを使っていなければ、この脆弱性の影響は受けません。
- 3Assentを別のライブラリ経由で使っている場合は、
mix depsで解決された版を見ます。
何が起きたか
AssentのSign in with Apple対応に、ログインした本人とは別のユーザーになりすませる脆弱性が見つかりました。Appleが署名して保証した本人情報より、ブラウザー側から送られた未検証の値が優先されてしまうためです。
Appleは認証後のコールバックで、ユーザー名をuserというフォームパラメーターに入れてブラウザー経由で送ります。この値はクライアントが書き換えられます。Assent.Strategy.Apple.callback/2がこれを読み込み、fetch_user/2が検証済みのIDトークンのクレームの上に重ねて統合するので、未検証の値のほうが勝ちます。結果として、sub、emailなどのクレームが差し替わります。
アプリがsubやemailでアカウントを検索・連携・認可している場合、差し替えられた値をそのまま信用して処理を進めます。2026年10月30日に公表され、0.3.2で修正されました。
攻撃の流れ
-
1
Appleでログイン
攻撃者が自分のApple IDで、対象アプリのSign in with Appleを完了させます。
-
2
未検証値を改変
コールバックに付く`user`パラメーターの内容が、攻撃者の手元で書き換えられます。
-
3
検証済み情報を上書き
Assentが改変された値を、検証済みのIDトークンの内容より優先して取り込みます。
-
4
別ユーザーとして認識
アプリは差し替えられたsubやemailを信用し、他人のアカウントとして扱います。
どう悪用されるか
認証は不要で、ネットワーク越しに実行できます。攻撃者に必要なのは、自分のApple IDでSign in with Appleのログインを完了させることです。被害者側の操作も要りません。
成功すると、攻撃者はアプリ上で他のユーザーとして扱われます。アカウントの機密情報の閲覧や、そのユーザーとしての操作が可能になるおそれがあります。影響の大きさは、アプリがsubやemailをどこまで信用してアカウントの紐付けや権限判断に使っているかで変わります。
今すぐやること
-
1
assentを0.3.2に更新する
mix.exsの制約が0.3.2を許す範囲になっていることを確認して更新し、mix.lockを反映した版でデプロイし直します。別のライブラリ経由で依存している場合は、そのライブラリ側の更新も確認します。
mix deps.update assent -
2
解決された版を確認する
更新後に、本番にデプロイされる版が0.3.2以上になっているかを見ます。
mix deps | grep assent -
3
Apple経由のアカウントを点検する
公表前から稼働していたアプリでは、Appleログインで連携されたアカウントについて、不自然なメールアドレスの変更や新規連携、見覚えのないログインがないかをログで調べます。
-
4
アカウント連携の判断材料を見直す
メールアドレスだけで既存アカウントと自動連携していないかを確認します。検証済みの識別子を基準にする設計にしておくと、同種の問題の影響を抑えられます。
-
5
ベンダーの告知を確認する
pow-authのセキュリティアドバイザリで、影響範囲や追加の注意事項を確認します。
すぐ更新できないとき
すぐに更新できない場合は、修正版を当てるまでSign in with Appleのログインを一時的に無効にするのが確実です。無効にできないときは、Appleログイン経由でのアカウント連携や権限付与を止め、ベンダーの告知に追加の回避策がないかも確認してください。
背景
Assentは、外部の認証基盤を使ったログインをElixirアプリに組み込むための多プロバイダー対応クライアントです。アプリは、Appleなどが返す署名付きのIDトークンのクレームから、利用者を一意に識別するsubやメールアドレスを受け取り、自社のアカウントと結び付けます。つまり、ここで受け取る値は、そのまま誰のアカウントとして扱うかの根拠になります。
今回の問題は、その根拠になる署名付きの値に、署名のない値を重ねてしまった点にあります。Appleはユーザー名だけを別のフォームパラメーターで渡す仕様のため、その追加情報が検証済みの情報と同じ扱いで統合されました。ログイン基盤では、署名で守られた情報と、ブラウザーを通る情報を分けて扱う必要があります。
よくある質問
Q.Googleや他のプロバイダーでのログインも影響を受けますか。
Q.PowのようなAssentを内部で使うライブラリ経由でも対象ですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| pow-auth | assent |
a2d331e8c51376d6c0b04a81aad31e0b4d4d64a3 以上 18898bde0296152165ae470078490e5798329b1b 未満 |
18898bde0296152165ae470078490e5798329b1b |
| Hex | assent |
0.1.25 以上 0.3.2 未満 |
0.3.2 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Acceptance of Extraneous Untrusted Data With Trusted Data vulnerability in the Sign in with Apple strategy in pow-auth Assent allows an unauthenticated remote attacker to impersonate another user via the user parameter of the authorization callback.
Apple posts the user's name to the callback endpoint in a user form parameter that the browser submits and the client controls. Assent.Strategy.Apple.callback/2 in lib/assent/strategies/apple.ex decodes that parameter, and fetch_user/2 merges it over the claims of the verified ID token, so the unverified map wins. An attacker who completes a Sign in with Apple login with their own Apple ID and edits the user parameter can replace sub, email, and any other claim. Applications that look up, link, or authorize accounts by the returned subject or email then act on the attacker's values.
This issue affects assent: from 0.1.25 before 0.3.2.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- package hex.pm
- package github.com
- patch github.com
- patch github.com
- web cna.erlef.org
- web osv.dev
- web github.com
- web repo.hex.pm