概要
- 多要素認証()を強制する条件ロジックが含まれたカスタムルールコードを使うと、特にサイレント認証を使用する場合に、MFAを完全に迂回できるようになる可能性がある。
- 適切なロジックを使用せずに特定の部分文字列に基づいて認可制御を実装するカスタムルールコードを使うと、特権が昇格される可能性がある。
- Auth0の組み込みのデバッグ機能を使用するのではなく、サードパーティに診断情報を送信するカスタムルールコードを使用すると、機密情報が漏洩する可能性がある。
- 有料サービスをトリガーするカスタムルールコードを使うと、攻撃者が不要な請求を生じさせられるようになる可能性がある。
- 未確認のメールアドレスに基づいて認可を付与するカスタムルールコードを使うと、攻撃者が第二の接続タイプを通じてそれらの権限を取得できる可能性がある。
- グローバル構成オブジェクトを使用するのではなく、APIキーなどのハードコード化されたシークレットを含むカスタムルールコードを使用すると、そのようなシークレットが公開されるリスクが高まる。
不適切なMFAルール
サイレント認証
/authorize?prompt=none
しかし、サイレント認証プロセスにMFAが追加されると、ユーザーの操作が必要になります。
この対策として、MFAを迂回するためにサイレント認証に基づく条件ロジックを使用してはなりません。このようなルールはMFAの完全な迂回を許してしまうため、決して使用しないでください。
カスタムMFAプロバイダーへのリダイレクトを伴うサイレント認証
不適切な検証
デバイスフィンガープリント
Country Code(国番号)
自分は影響を受けますか?
対策
prompt === 'none'に基づく条件ロジックを削除してください。これにより、サイレント認証呼び出しのたびに、セッションステータスの確認のため多要素認証をトリガーするようになります。
リダイレクトを伴うサイレント認証のシナリオに該当する場合 は、prompt === 'none'に基づく条件ロジックを削除して、Auth0がサポートしている多要素認証プロバイダーに切り替えてください。
ユーザーに頻繁にMFAを求めないようにするには、allowRememberBrowserパラメーターをtrueに設定します。これにより、チェックボックスを選択したエンドユーザーは30日おきにしか多要素認証を求められなくなります。例:
allowRememberBrowserの構成オプションを使用してください。
この更新はユーザーに影響を与えますか?
不適切なsubstring検証
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(引用符を含む)
自分は影響を受けますか?
対策
const emailSplit = user.email.split('@'); const userEmailDomain = emailSplit[emailSplit.length - 1].toLowerCase();
詳しくは、「接続エイリアスに照らしてドメインを確認する」ルールテンプレートを参照してください。または、の**[Rules(ルール)]** セクションで「Check if user email domain matches configured domain(ユーザーのメールドメインが構成済みドメインと一致するかを確認する) 」という名前のルールテンプレートをご覧ください。
この更新はユーザーに影響を与えますか?
外部サービスを使用するデバッグ
id_tokenやaccess_tokenのようなアイテムを公開することになります。例:
自分は影響を受けますか?
対策
id_tokenやaccess_tokenが公開される可能性があるため、ルールを修正して、コンテキストオブジェクト全体をrequestbinに送信しないようにする必要があります。代わりに、コンテキストオブジェクトから、より機密性の低い、属性のサブセットを送信するようにします。
詳細については、「Requestbin」のルールテンプレートを参照してください。または、Auth0 Dashboardの**[Rules(ルール)]** セクションで、[Dump rule variables to RequestBin(ルール変数をRequestBinにダンプする)] という名前のルールテンプレートをご覧ください。
また、Auth0では、外部サービスに情報を送信することなくルールをデバッグする、組み込みの方法も提供しています。
この更新はユーザーに影響を与えますか?
有料サービスを使用するルール
自分は影響を受けますか?
対策
- 不要な場合はパブリックサインアップを禁止することで、サインアップして有料サービスへの呼び出しをトリガーできるユーザー数を減らします。
- 資格情報の盗難リスクを軽減することで、有料サービスへの呼び出しをトリガーする可能性のあるハッカーによるアカウントの乗っ取りを防ぎます。
- ユーザーがデータベース接続を使用する際に強力なパスワードを使用することを確認します。
- ユーザーが多要素認証を使用することを確認します。
- ルールが、認可されたサブセットのユーザーに、またはその他の適切な状況でのみトリガーされることを確認します。たとえば、有料サービスへの呼び出しをトリガーする前に、ユーザーに特定のメールドメインやロール/グループ、サブスクリプションレベルがあるかを確認するロジックを追加すると良いでしょう。
この更新はユーザーに影響を与えますか?
trueを返します。これは、接続タイプが異なれば同じメールアドレスを登録できるため生じることです。
自分は影響を受けますか?
対策
この更新はユーザーに影響を与えますか?
ルールコード内のプレーンテキストシークレット
const myApiKey = 'abcdefghijklmnopqrstuvwxyz';
そのような機密性の高い値がルールコードにあると、システム内で暗号化されない状態で残り、漏洩するリスクがあります。
自分は影響を受けますか?
対策
const myApiKey = configuration.myApiKey;
これにより、すべての機密性の高い値がAuth0システム内で暗号化され、漏洩のリスクを減らすことができます。