メインコンテンツへスキップ
公開日: 2020年1月30日 CVE番号: CVE-2019-20174 謝辞: Muhamad Visat

概要

Auth0 Lock バージョン 11.20.4 以前では、生成される HTML が適切にサニタイズされていませんでした。additionalSignUpFields カスタマイズオプションを使用してサインアップダイアログにチェックボックスを追加し、信頼できないソース (クエリパラメーターなど) から取得した placeholder プロパティを渡している場合、サインアップページでクロスサイトスクリプティング (XSS) が発生する可能性がありました。

影響を受けますか?

次の条件がすべて当てはまる場合、この脆弱性の影響を受けます。
  • Auth0 Lock バージョン 11.20.4 以前を使用している。
  • Lock の初期化時に additionalSignUpFields をオプションとして渡しており、その中に、信頼できないソースから取得した placeholder 値を持つ checkbox 型のフィールドが含まれている。
脆弱なスニペットの例を次に示します。この例では、placeholder 値の一部が name クエリパラメーターでユーザーにより制御されています。
<script>
    var params = new URLSearchParams(window.location.search);
    var options = {
        auth: {
            redirectUrl: 'http://localhost:12345/callback',
            responseType: 'code',
            params: {
                scope: 'openid email',
            },
        },
        additionalSignUpFields: [{
            name: 'agree',
            type: 'checkbox',
            placeholder: "I agree to Terms & Conditions for " + params.get('name'),
        }],
    };
    var lock = new Auth0Lock('<CLIENT_ID>', '<TENANT_NAME>.auth0.com', options);
    lock.show({
        allowShowPassword: true,
        initialScreen: 'signUp',
    });
</script>

どうすれば修正できますか?

Auth0 の Lock サインインソリューションを使用している開発者は、バージョン 11.21.0 以降にアップグレードする必要があります。バージョン 11.21.0 では、次の 2 つの変更が導入されています。
  1. この問題を軽減するため、既存の placeholder プロパティはプレーンテキストとして扱われるようになりました。
  2. 新たに placeholderHTML プロパティが導入されました。これは、どの程度の制御が可能かを明示するものであり、その値には信頼できるソースから取得したもののみを指定する必要があります。

この更新はユーザーに影響しますか?

この修正は Auth0 Lock ウィジェットに対するパッチであり、アプリケーションコードの変更が必要になる場合があります。ただし、ユーザーやその現在の状態、既存のセッションには影響しません。 信頼できるソースの HTML コンテンツで placeholder プロパティを使用している開発者は、同じユーザーエクスペリエンスを維持するため、placeholderHTML プロパティを使用してください。