概要
- (MFA) を強制する条件付きロジックを含むカスタムRuleコードでは、特にサイレント認証を使用している場合に、MFAを完全に回避できてしまう可能性があります。
- 適切なロジックを伴わずに、特定の部分文字列に基づく認可制御を実装するカスタムRuleコードは、権限昇格につながる可能性があります。
- Auth0に組み込まれたデバッグ機能を使用せずに診断情報をサードパーティのサービスへ送信するカスタムRuleコードは、機密情報の漏えいにつながる可能性があります。
- 有料サービスをトリガーするカスタムRuleコードでは、攻撃者によって意図しない課金が発生させられる可能性があります。
- 検証されていないメールアドレスに基づいて認可を付与するカスタムRuleコードでは、攻撃者が別の接続タイプを通じてその権限を取得できる可能性があります。
- グローバルな
configurationオブジェクトを使用せず、APIキーなどのシークレットをハードコードしたカスタムRuleコードは、それらのシークレットが露出するリスクを高めます。
不適切な MFA Rules 設定
サイレント認証
/authorize?prompt=none
ただし、サイレント認証のプロセスに MFA を追加すると、ユーザーの操作が必要になります。
MFA をバイパスする回避策として、サイレント認証に基づく条件ロジックを使用するべきではありません。このような Rules を使うと MFA を完全にバイパスできてしまうため、使用しないでください。
カスタムMFAプロバイダーへのリダイレクトを伴うサイレント認証
不適切な検証
デバイスフィンガープリント
国コード
影響を受けますか?
前述のいずれかのRuleロジックを使用している場合、最初の認証要素での認証に成功した攻撃者が、アプリケーションでMFAを回避できる可能性があります。緩和策
サイレント認証のシナリオの影響を受ける場合は、prompt === 'none' に基づく条件ロジックを削除します。これにより、セッション状態を確認するため、サイレント認証の呼び出しごとに多要素認証がトリガーされます。
リダイレクトを伴うサイレント認証のシナリオの影響を受ける場合は、prompt === 'none' に基づく条件ロジックを削除し、Auth0 がサポートする多要素認証プロバイダーに切り替えます。
ユーザーに MFA を求める頻度が高くなりすぎないようにするには、パラメーター allowRememberBrowser を true に設定します。これにより、エンドユーザーはチェックボックスをオンにして、多要素認証を求められる頻度を 30 日ごとに 1 回にできます。例:
allowRememberBrowser 設定オプションを使用してください。
この更新はユーザーに影響しますか?
不適切な部分文字列チェック
if( _.findIndex(connection.options.domain_aliases,function(d){ return user.email.indexOf(d) >= 0;
上記のロジックは、次のようなメールアドレスに対して true を返します。
user.domain.com@not-domain.com"user@domain.com"@not-domain.com(引用符を含む)
影響を受けますか?
影響を受けるのは、上記のとおり、Rules で条件付きロジックを使用しているお客様のみです。緩和手順
const emailSplit = user.email.split('@'); const userEmailDomain = emailSplit[emailSplit.length - 1].toLowerCase();
詳細は、Check Domains Against Connection Aliases Rule templateを参照してください。別の方法として、のRulesセクションで、Check if user email domain matches configured domain という名前のRuleテンプレートを確認してください。
この更新はユーザーに影響しますか?
外部サービスを使用したデバッグ
id_token や access_token などの情報を外部に公開することになります。例:
影響はありますか?
上記のようなRuleロジックを使用しているお客様のみが影響を受けます。緩和策
各リクエストに関連付けられたid_token や access_token が公開されるおそれがあるため、context オブジェクト全体を requestbin に送信しないように Rule を変更してください。代わりに、context オブジェクトから機微性の低い属性の一部のみを送信してください。
詳細については、Requestbin rule templateを参照してください。あるいは、Auth0 Dashboard の Rules セクションで、Dump rule variables to RequestBin という名前の Rule テンプレートを確認してください。
Auth0 には、情報を外部サービスに送信せずに Rules をデバッグするための組み込みメソッドも用意されています。
この更新はユーザーに影響しますか?
有料サービスを利用する Rules
影響を受けますか?
影響を受けるのは、上記のようなRuleロジックを使用しており、かつそのRuleロジックが信頼できない任意のユーザーによってトリガーされる可能性があるお客様のみです。軽減策
このリスクを軽減するには、次の対策を 1 つ以上検討してください。- 不要な場合は公開サインアップを無効にし、サインアップして有料サービスの呼び出しをトリガーできるユーザー数を減らします。
- 認証情報の盗難リスクを軽減し、乗っ取られたアカウントを悪用して有料サービスの呼び出しをトリガーするハッカーによるアカウント乗っ取りを防ぎます。
- データベース接続を使用する場合は、ユーザーに強力なパスワードを設定させます。
- ユーザーに多要素認証を利用させます。
- Rules は、許可された一部のユーザーに対してのみ、またはその他の適切な条件下でのみトリガーされるようにします。たとえば、有料サービスの呼び出しをトリガーする前に、ユーザーのメールアドレスのドメイン、ロール/グループ、またはサブスクリプションレベルを確認するロジックを追加するとよいでしょう。
この更新はユーザーに影響しますか?
true が返されます。これは、同じメールアドレスが異なる接続タイプにまたがって存在する可能性があるためです。
影響を受けるのはどのような場合ですか?
緩和策
メールアドレスに基づいて認可を付与する場合は、必ずRuleの先頭に次のロジックを追加してください。この更新はユーザーに影響しますか?
Ruleコード内の平文のシークレット
const myApiKey = 'abcdefghijklmnopqrstuvwxyz';
このような機密値がRuleコード内に存在すると、当社のシステムでは暗号化されないまま保持され、漏えいするリスクがあります。
影響を受けますか?
ご利用中の Rules のコード自体に機密性の高い値が含まれている場合は、影響を受けます。緩和策
機密値は Auth0 Dashboard のメインの Rules セクションにある Settings 領域に保存し、次のように Rule からアクセスします。const myApiKey = configuration.myApiKey;
これにより、すべての機密値が Auth0 のシステム内で暗号化され、漏えいのリスクを低減できます。