@auth0/auth0-checkmate 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.github/CODEOWNERS +1 -0
  2. package/.github/workflows/npm-release.yml +77 -0
  3. package/.github/workflows/sca_scan.yml +10 -0
  4. package/.github/workflows/test.yml +48 -0
  5. package/AUTHORS +5 -0
  6. package/LICENSE +203 -0
  7. package/README.md +166 -0
  8. package/THIRD-PARTY-NOTICES +226 -0
  9. package/analyzer/lib/actions/checkActionsHardCodedValues.js +151 -0
  10. package/analyzer/lib/actions/checkActionsRuntime.js +105 -0
  11. package/analyzer/lib/actions/checkDependencies.js +111 -0
  12. package/analyzer/lib/attack_protection/checkBotDetectionSetting.js +76 -0
  13. package/analyzer/lib/attack_protection/checkBreachedPassword.js +140 -0
  14. package/analyzer/lib/attack_protection/checkBruteForce.js +89 -0
  15. package/analyzer/lib/attack_protection/checkSuspiciousIPThrottling.js +89 -0
  16. package/analyzer/lib/canonical_domain/checkCanonicalDomain.js +63 -0
  17. package/analyzer/lib/clients/checkAllowedCallbacks.js +122 -0
  18. package/analyzer/lib/clients/checkAllowedLogoutUrl.js +124 -0
  19. package/analyzer/lib/clients/checkApplicationLoginUri.js +125 -0
  20. package/analyzer/lib/clients/checkCrossOriginAuthentication.js +91 -0
  21. package/analyzer/lib/clients/checkGrantTypes.js +138 -0
  22. package/analyzer/lib/clients/checkJWTSignAlg.js +118 -0
  23. package/analyzer/lib/clients/checkRefreshToken.js +108 -0
  24. package/analyzer/lib/clients/checkWebOrigins.js +55 -0
  25. package/analyzer/lib/constants.js +63 -0
  26. package/analyzer/lib/custom_domain/checkCustomDomain.js +53 -0
  27. package/analyzer/lib/databases/checkAuthenticationMethods.js +98 -0
  28. package/analyzer/lib/databases/checkDASHardCodedValues.js +163 -0
  29. package/analyzer/lib/databases/checkEmailAttributeVerification.js +114 -0
  30. package/analyzer/lib/databases/checkEnabledDatabaseCustomization.js +83 -0
  31. package/analyzer/lib/databases/checkPasswordComplexity.js +100 -0
  32. package/analyzer/lib/databases/checkPasswordHistory.js +92 -0
  33. package/analyzer/lib/databases/checkPasswordNoPersonalInfo.js +91 -0
  34. package/analyzer/lib/databases/checkPasswordPolicy.js +95 -0
  35. package/analyzer/lib/databases/checkPromotedDBConnection.js +96 -0
  36. package/analyzer/lib/email_provider/checkEmailProvider.js +37 -0
  37. package/analyzer/lib/email_templates/checkEmailTemplates.js +71 -0
  38. package/analyzer/lib/error_page_template/checkErrorPageTemplate.js +153 -0
  39. package/analyzer/lib/event_streams/checkEventStreams.js +71 -0
  40. package/analyzer/lib/executeCheck.js +12 -0
  41. package/analyzer/lib/hooks/checkHooks.js +43 -0
  42. package/analyzer/lib/listOfAnalyser.js +24 -0
  43. package/analyzer/lib/log_streams/checkLogStream.js +60 -0
  44. package/analyzer/lib/logger.js +16 -0
  45. package/analyzer/lib/multifactor/checkGuardianFactors.js +72 -0
  46. package/analyzer/lib/multifactor/checkGuardianPolicy.js +40 -0
  47. package/analyzer/lib/network_acl/checkNetworkACL.js +35 -0
  48. package/analyzer/lib/rules/checkRules.js +102 -0
  49. package/analyzer/lib/tenant_settings/checkDefaultAudience.js +53 -0
  50. package/analyzer/lib/tenant_settings/checkDefaultDirectory.js +48 -0
  51. package/analyzer/lib/tenant_settings/checkEnabledDynamicClientRegistration.js +60 -0
  52. package/analyzer/lib/tenant_settings/checkSandboxVersion.js +37 -0
  53. package/analyzer/lib/tenant_settings/checkSessionLifetime.js +95 -0
  54. package/analyzer/lib/tenant_settings/checkSupportEmail.js +61 -0
  55. package/analyzer/lib/tenant_settings/checkSupportUrl.js +61 -0
  56. package/analyzer/lib/tenant_settings/checkTenantLoginUrl.js +71 -0
  57. package/analyzer/lib/tenant_settings/checkTenantLogoutUrl.js +60 -0
  58. package/analyzer/report.js +404 -0
  59. package/analyzer/tools/auth0.js +443 -0
  60. package/analyzer/tools/helpers.js +71 -0
  61. package/analyzer/tools/summary.js +84 -0
  62. package/analyzer/tools/utils.js +72 -0
  63. package/bin/index.js +393 -0
  64. package/eslint.config.mjs +16 -0
  65. package/images/auth0.png +0 -0
  66. package/images/okta.png +0 -0
  67. package/locales/en.json +1417 -0
  68. package/package.json +66 -0
  69. package/tests/actions/checkActionsHardCodedValues.test.js +106 -0
  70. package/tests/actions/checkActionsRuntime.test.js +102 -0
  71. package/tests/actions/checkDependencies.test.js +131 -0
  72. package/tests/attack_protection/checkBreachedPassword.test.js +253 -0
  73. package/tests/attack_protection/checkBruteForce.test.js +181 -0
  74. package/tests/attack_protection/checkSuspiciousIPThrottling.test.js +222 -0
  75. package/tests/canonical_domain/checkCanonicalDomain.test.js +94 -0
  76. package/tests/clients/checkAllowedCallbacks.test.js +149 -0
  77. package/tests/clients/checkAllowedLogoutUrl.test.js +149 -0
  78. package/tests/clients/checkApplicationLoginUri.test.js +180 -0
  79. package/tests/clients/checkCrossOriginAuthentication.test.js +99 -0
  80. package/tests/clients/checkGrantTypes.test.js +154 -0
  81. package/tests/clients/checkJWTSignAlg.test.js +121 -0
  82. package/tests/clients/checkRefreshToken.test.js +63 -0
  83. package/tests/clients/checkWebOrigins.test.js +140 -0
  84. package/tests/custom_domain/checkCustomDomain.test.js +73 -0
  85. package/tests/databases/checkAuthenticationMethods.test.js +124 -0
  86. package/tests/databases/checkDASHardCodedValues.test.js +77 -0
  87. package/tests/databases/checkEmailAttributeVerification.test.js +79 -0
  88. package/tests/databases/checkEnabledDatabaseCustomization.test.js +68 -0
  89. package/tests/databases/checkPasswordComplexity.test.js +127 -0
  90. package/tests/databases/checkPasswordHistory.test.js +100 -0
  91. package/tests/databases/checkPasswordNoPersonalInfo.test.js +94 -0
  92. package/tests/databases/checkPasswordPolicy.test.js +161 -0
  93. package/tests/databases/checkPromotedDBConnection.test.js +62 -0
  94. package/tests/email_provider/checkEmailProvider.test.js +58 -0
  95. package/tests/email_templates/checkEmailTemplates.test.js +120 -0
  96. package/tests/error_page_template/checkErrorPageTemplate.test.js +315 -0
  97. package/tests/event_streams/checkEventStreams.test.js +118 -0
  98. package/tests/hooks/checkHooks.test.js +112 -0
  99. package/tests/log_streams/checkLogStream.test.js +140 -0
  100. package/tests/multifactor/checkGuardianFactors.test.js +94 -0
  101. package/tests/multifactor/checkGuardianPolicy.test.js +49 -0
  102. package/tests/rules/checkRules.test.js +102 -0
  103. package/tests/tenant_settings/checkDefaultAudience.test.js +62 -0
  104. package/tests/tenant_settings/checkDefaultDirectory.test.js +62 -0
  105. package/tests/tenant_settings/checkEnabledDynamicClientRegistration.test.js +97 -0
  106. package/tests/tenant_settings/checkSandboxVersion.test.js +50 -0
  107. package/tests/tenant_settings/checkSessionLifetime.test.js +108 -0
  108. package/tests/tenant_settings/checkSupportEmail.test.js +77 -0
  109. package/tests/tenant_settings/checkSupportUrl.test.js +77 -0
  110. package/tests/tenant_settings/checkTenantLoginUri.test.js +82 -0
  111. package/tests/tenant_settings/checkTenantLogoutUrl.test.js +108 -0
  112. package/tests/tools/auth0.test.js +833 -0
  113. package/tests/tools/helpers.test.js +692 -0
  114. package/views/pdf_cli_report.handlebars +571 -0
@@ -0,0 +1,1417 @@
1
+ {
2
+ "preamble": {
3
+ "legal": {
4
+ "heading": "Important Notice",
5
+ "items": [
6
+ {
7
+ "text": "This document contains sensitive and confidential data and must be maintained in accordance with your organization's storage and security protocols. The information contained herein is provided for the sole purpose of internal evaluation of your organization's current configuration of its Auth0 tenant(s) and must not be used for any other purpose. This evaluation represents a static, \"point in time\" analysis of the configuration posture of your Auth0 tenant, based on a blend of industry-recognized technical standards and Okta's view of security best practices. In order to maintain a robust and up-to-date view of your security posture, this document should be regenerated and reviewed on a recurring basis."
8
+ }
9
+ ]
10
+ },
11
+ "executive_summary": {
12
+ "heading": "Executive Summary",
13
+ "items": [
14
+ {
15
+ "heading": "Report Overview",
16
+ "text": "The following report contains programmatically generated recommendations for better leveraging available security features within the scanned Auth0 tenant."
17
+ }
18
+ ]
19
+ },
20
+ "scope": {
21
+ "heading": "Scope",
22
+ "text": "The following configurations were reviewed within your Auth0 tenant:"
23
+ },
24
+ "goals": {
25
+ "heading": "Goals",
26
+ "items": [
27
+ "Understand the security posture of the <b>{placeholder}</b> Auth0 tenant.",
28
+ "Identify potential security issues within the configuration of the <b>{placeholder}</b> Auth0 tenant"
29
+ ]
30
+ },
31
+ "summary": {
32
+ "heading": "Summary of findings"
33
+ }
34
+ },
35
+ "report_title": "Checkmate for Auth0 Configuration Report",
36
+ "list_of_validators": [
37
+ {
38
+ "title": "Custom Domains",
39
+ "required_scope": "read:custom_domains",
40
+ "items": []
41
+ },
42
+ {
43
+ "title": "Applications",
44
+ "required_scope": "read:clients",
45
+ "items": [
46
+ "Allowed Callback URL",
47
+ "Application Login URI",
48
+ "Allowed Logout URL",
49
+ "Allowed Web Origins",
50
+ "Grant Types",
51
+ "JWT Signing Algorithm",
52
+ "Cross Origin Authentication",
53
+ "Refresh Tokens"
54
+ ]
55
+ },
56
+ {
57
+ "title": "Custom Error Page Template",
58
+ "required_scope": "read:tenant_settings",
59
+ "items": []
60
+ },
61
+ {
62
+ "title": "Databases",
63
+ "required_scope": "read:connections read:connections_options",
64
+ "items": [
65
+ "Password Policy",
66
+ "Password History",
67
+ "Password Complexity",
68
+ "Password With Personal Info",
69
+ "Authentication Methods",
70
+ "Email Attribute Verification Methods",
71
+ "External User Store",
72
+ "Action Scripts Hardcoded Artifacts",
73
+ "Promoted Domain Level Database Connection"
74
+ ]
75
+ },
76
+ {
77
+ "title": "Multifactor",
78
+ "required_scope": "read:guardian_factors read:mfa_policies",
79
+ "items": [
80
+ "Enabled Factors",
81
+ "Multifactor Policy"
82
+ ]
83
+ },
84
+ {
85
+ "title": "Email Provider",
86
+ "required_scope": "read:email_provider",
87
+ "items": []
88
+ },
89
+ {
90
+ "title": "Email Templates",
91
+ "required_scope": "read:email_templates",
92
+ "items": []
93
+ },
94
+ {
95
+ "title": "Log Streams",
96
+ "required_scope": "read:log_streams",
97
+ "items": []
98
+ },
99
+ {
100
+ "title": "Attack Protection",
101
+ "required_scope": "read:shields read:attack_protection",
102
+ "items": [
103
+ "Bot Detection",
104
+ "Brute Force Protection",
105
+ "Suspicious IP Throttling",
106
+ "Breached Password Detection"
107
+ ]
108
+ },
109
+ {
110
+ "title": "Tenant Settings",
111
+ "required_scope": "read:tenant_settings",
112
+ "items": [
113
+ "Allowed Callback URL",
114
+ "Session Management",
115
+ "Default Login URL",
116
+ "Support Email",
117
+ "Support URL",
118
+ "Default Directory",
119
+ "Default Audience",
120
+ "Extensibility Run Time",
121
+ "Dynamic Client Registration"
122
+ ]
123
+ },
124
+ {
125
+ "title": "Auth Pipeline (Legacy Tenants Only)",
126
+ "required_scope": "read:rules read:hooks",
127
+ "items": [
128
+ "Rules",
129
+ "Hooks"
130
+ ]
131
+ },
132
+ {
133
+ "title": "Actions",
134
+ "required_scope": "read:actions",
135
+ "items": [
136
+ "NPM Dependencies",
137
+ "Actions Runtime",
138
+ "Hardcoded Artifacts"
139
+ ]
140
+ },
141
+ {
142
+ "title": "Auth0 Domain Check",
143
+ "required_scope": "read:logs",
144
+ "items": []
145
+ },
146
+ {
147
+ "title": "Tenant Access Control List (Early Access Capability)",
148
+ "required_scope": "read:network_acls",
149
+ "items": []
150
+ },
151
+ {
152
+ "title": "Event Streams (Early Access Capability)",
153
+ "required_scope": "read:event_streamss",
154
+ "items": []
155
+ }
156
+ ],
157
+ "validator_summary": "Checked <b>%s</b> validators against tenant <b>%s</b> in total.",
158
+ "checkCustomDomain": {
159
+ "title": "Custom Domains",
160
+ "category": "Custom Domains",
161
+ "advisory": {
162
+ "issue": "Security and User Experience Risks of Not Using Custom Domains",
163
+ "description": {
164
+ "what_it_is": "Custom domains allow you to use your own domain for Auth0 authentication pages instead of the default Auth0 domain. This provides both security and user experience benefits.",
165
+ "why_its_risky": [
166
+ "Users may be suspicious of authentication pages on unfamiliar domains, potentially leading to reduced trust and conversion rates.",
167
+ "Default Auth0 domains can be easily identified by attackers for targeted phishing campaigns mimicking your authentication flow.",
168
+ "Passkey authentication is tied to specific domains - without custom domains, passkeys enrolled on the Auth0 domain won't work seamlessly with your application.",
169
+ "Third-party cookies and tracking protection in modern browsers can interfere with authentication flows when using different domains.",
170
+ "Users may bookmark or share Auth0 default domain URLs, potentially exposing authentication endpoints."
171
+ ]
172
+ },
173
+ "how_to_fix": [
174
+ "Configure a custom domain that users will recognize and trust (e.g., auth.yourcompany.com).",
175
+ "Ensure the custom domain uses HTTPS with a valid SSL certificate.",
176
+ "Update all applications to use the custom domain for authentication flows.",
177
+ "Test passkey functionality thoroughly after implementing custom domains.",
178
+ "Consider the custom domain part of your overall security and user experience strategy."
179
+ ]
180
+ },
181
+ "no_custom_domains": "This tenant is not configured to use a custom domain. We recommend using custom domains with Universal Login for the most seamless and secure experience for end users. We also highly recommend using custom domains for passkey authentication, given they are tied to a specific domain during enrollment.",
182
+ "ready": "This tenant is configured to use a custom domain. %s",
183
+ "pending_verfification": "The tenant's custom domain configuration is incomplete, %s",
184
+ "severity": "High",
185
+ "status": "red",
186
+ "severity_message": "Configure a Custom Domain",
187
+ "description": "The custom domain in Auth0 is like a `mask` for your tenant domain URL. We encourage the use of a domain your users will easily recall.",
188
+ "docsPath": [
189
+ "https://auth0.com/docs/customize/custom-domains"
190
+ ],
191
+ "not_configured": "Custom domain is not configured"
192
+ },
193
+ "checkPasswordPolicy": {
194
+ "title": "Databases - Password Policy",
195
+ "category": "Databases",
196
+ "advisory": {
197
+ "issue": "Weak Password Policy Configuration",
198
+ "description": {
199
+ "what_it_is": "Password policies define the minimum requirements for user passwords, including complexity, length, and character requirements. Weak password policies allow users to create easily guessable or compromised passwords.",
200
+ "why_its_risky": [
201
+ "Weak passwords are easily cracked through brute force attacks, dictionary attacks, or credential stuffing.",
202
+ "Users tend to choose simple, predictable passwords when not enforced by strong policies.",
203
+ "Compromised weak passwords from data breaches can be used to gain unauthorized access to accounts.",
204
+ "Inadequate password policies fail to protect against common attack patterns and social engineering attempts."
205
+ ]
206
+ },
207
+ "how_to_fix": [
208
+ "Implement strong password policies with minimum length requirements.",
209
+ "Require a mix of character types (uppercase, lowercase, numbers, special characters).",
210
+ "Prevent the use of common passwords, dictionary words, and personal information.",
211
+ "Consider implementing passkeys as a more secure alternative to traditional passwords.",
212
+ "Regularly review and update password policies based on current security best practices."
213
+ ]
214
+ },
215
+ "description": "Securely store and manage your customer's authorization credentials in an Auth0 Database or in your own store.",
216
+ "docsPath": [
217
+ "https://auth0.com/docs/authenticate/database-connections"
218
+ ],
219
+ "severity": "High",
220
+ "status": "red",
221
+ "severity_message": "%s connections require an updated password policy",
222
+ "no_database_connections_found": "No Database connections are configured",
223
+ "password_policy": "The current password policy for %s is set to %s",
224
+ "missing_password_policy": "The connection %s is missing a password policy"
225
+ },
226
+ "checkPasswordHistory": {
227
+ "title": "Databases - Password History",
228
+ "category": "Databases",
229
+ "advisory": {
230
+ "issue": "Weak Password History Configuration",
231
+ "description": {
232
+ "what_it_is": "Password history prevents users from reusing their previous passwords when changing their password. This control forces users to create genuinely new passwords rather than cycling through a small set of familiar passwords.",
233
+ "why_its_risky": [
234
+ "Users tend to reuse the same few passwords, making accounts vulnerable if any of those passwords are compromised.",
235
+ "Attackers who obtain old passwords through breaches or social engineering can use them to regain access if users cycle back to previous passwords.",
236
+ "Without password history, users may simply toggle between two passwords when forced to change them, providing no real security improvement.",
237
+ "Compromised passwords remain effective attack vectors for longer periods if users can revert to them."
238
+ ]
239
+ },
240
+ "how_to_fix": [
241
+ "Enable password history to prevent users from reusing up to 24 of their last passwords.",
242
+ "Configure an appropriate history length that balances security with user experience.",
243
+ "Combine with strong password policies to ensure new passwords meet complexity requirements.",
244
+ "Educate users on creating unique, strong passwords for each change."
245
+ ]
246
+ },
247
+ "description": "Securely store and manage your customer's authorization credentials in an Auth0 Database or in your own store.",
248
+ "docsPath": [
249
+ "https://auth0.com/docs/authenticate/database-connections"
250
+ ],
251
+ "severity": "Low",
252
+ "status": "green",
253
+ "severity_message": "%s connections require an updated password history configuration",
254
+ "no_database_connections_found": "No Database connections configured",
255
+ "password_history_disabled": "The connection %s is configured to allow users to choose previous passwords.",
256
+ "password_history_enabled": "The connection %s has password history enabled and configured to disallow the last %s user passwords."
257
+ },
258
+ "checkPasswordNoPersonalInfo": {
259
+ "title": "Databases - Personal Information in Passwords",
260
+ "category": "Databases",
261
+ "advisory": {},
262
+ "description": "Securely store and manage your customer's authorization credentials in an Auth0 Database or in your own store.",
263
+ "docsPath": [
264
+ "https://auth0.com/docs/authenticate/database-connections"
265
+ ],
266
+ "severity": "Moderate",
267
+ "status": "yellow",
268
+ "severity_message": "%s connections allow users to include personal information in passwords",
269
+ "no_database_connections_found": "No Database connections configured",
270
+ "password_no_personal_info_enable": "The connection %s is configured to not allow a user to include personal information from a user profile (such as name, username, phone_number etc) in a password",
271
+ "password_no_personal_info_disabled": "The connection %s is configured to allow users to include personal information, such as the users' name, as part of their password. We recommend restricting the use of personal information as part of password to protect against brute force attacks."
272
+ },
273
+ "checkEnabledDatabaseCustomization": {
274
+ "title": "Databases - External User Stores Without Import",
275
+ "category": "Databases",
276
+ "advisory": {},
277
+ "description": "In Auth0, \"non-import mode\" for database connections refers to a scenario where Auth0 does not store or migrate user profiles into its own internal user store. Instead, Auth0 acts as a proxy or gateway to an external, \"legacy\" database where your user credentials and profiles are primarily managed.",
278
+ "docsPath": [
279
+ "https://auth0.com/docs/manage-users/user-migration/configure-automatic-migration-from-your-database"
280
+ ],
281
+ "severity": "Info",
282
+ "status": "blue",
283
+ "severity_message": "%s connections using external user store.",
284
+ "no_database_connections_found": "No Database connections configured",
285
+ "external_user_store": "The connection is configured to use a external user store to manage passwords, login, signups."
286
+ },
287
+ "checkPromotedDBConnection": {
288
+ "title": "Databases - Promoted Database Connection Configuration",
289
+ "category": "Databases",
290
+ "advisory": {},
291
+ "description": "If your tenant has Dynamic Client Registration enabled, you can let third party applications use a connection by promoting it to a domain level connection. Domain level connections are enabled or disabled for all applications in a tenant.",
292
+ "docsPath": [
293
+ "https://auth0.com/docs/authenticate/identity-providers/promote-connections-to-domain-level"
294
+ ],
295
+ "severity": "GenAI",
296
+ "status": "violet",
297
+ "severity_message": "Information for domain level connection promotion.",
298
+ "no_database_connections_found": "No Database connections configured",
299
+ "with_promoted_database_connections": "%s is promoted as the domain level connection"
300
+ },
301
+ "checkPasswordComplexity": {
302
+ "title": "Databases - Password Complexity",
303
+ "category": "Databases",
304
+ "advisory": {},
305
+ "description": "Securely store and manage your customer's authorization credentials in an Auth0 Database or in your own store.",
306
+ "docsPath": [
307
+ "https://auth0.com/docs/authenticate/database-connections"
308
+ ],
309
+ "no_database_connections_found": "No Database connections configured",
310
+ "severity": "Moderate",
311
+ "status": "yellow",
312
+ "severity_message": "Recommend review of password complexity rules for %s connections",
313
+ "password_min_length_fail": "The minimum password length configured for %s is below 12 characters, the minimum length recommended by the US National Institute for Standards and Technology (NIST). The current minimum password length is set to %s",
314
+ "password_min_length_success": "The minimum password length for %s meets or exceeds the length recommended by the US National Institute for Standards and Technology (NIST). The current minimum password length is set to %s",
315
+ "password_complexity_not_configured": "Password complexity rules have not been configured for %s"
316
+ },
317
+ "checkAuthenticationMethods": {
318
+ "title": "Databases - Authentication Methods",
319
+ "category": "Databases",
320
+ "advisory": {},
321
+ "description": "Auth0 supports passkeys as an authentication method for database connections. We highly recommend enabling passkeys are a phishing-resistant alternative to traditional authentication factors (such as identifier/password) that offer an easier and more secure login experience to users.",
322
+ "docsPath": [
323
+ "https://auth0.com/docs/authenticate/database-connections",
324
+ "https://auth0.com/docs/authenticate/database-connections/passkeys"
325
+ ],
326
+ "pre_requisites": {
327
+ "title": "Passkey Authentication Prerequisites",
328
+ "description": "Passkey authentication has a number of prerequisites that must be configured before they can work correctly in your end-user flows:",
329
+ "items": [
330
+ "Identifier First login flow must be enabled",
331
+ "Custom Login Page must be disabled",
332
+ "Disable Requires username or activate flexible identifiers",
333
+ "Use my own database must be disabled unless Import Users to Auth0 is enabled",
334
+ "New Universal Login Experience must be enabled"
335
+ ]
336
+ },
337
+ "severity": "Moderate",
338
+ "status": "yellow",
339
+ "severity_message": "%s connections do not have passkeys enabled",
340
+ "no_database_connections_found": "No Database connections configured",
341
+ "only_password_method": "This connection is not configured to use passkeys as an authentication method.",
342
+ "passkey_enabled": "This connection is configured to allow users to signup and login through passkeys."
343
+ },
344
+ "checkEmailAttributeVerification": {
345
+ "title": "Databases - Email Attribute Verification Methods",
346
+ "category": "Databases",
347
+ "advisory": {},
348
+ "description": "Auth0 supports email verification via OTP before signup for database connections. We highly recommend enabling this method to avoid creating identities without verification.",
349
+ "docsPath": [
350
+ "https://auth0.com/docs/authenticate/database-connections/flexible-identifiers-and-attributes",
351
+ "https://auth0.com/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers",
352
+ "https://auth0.com/docs/manage-users/user-accounts/verify-emails#one-time-passwords"
353
+ ],
354
+ "pre_requisites": {
355
+ "title": "OTP verification Prerequisites",
356
+ "description": "OTP verification feature has a number of prerequisites that must be configured before they can work correctly in your end-user flows:",
357
+ "items": [
358
+ "Identifier First login flow must be enabled",
359
+ "Custom Login Page must be disabled",
360
+ "Disable Requires username or activate flexible identifiers",
361
+ "Use my own database must be disabled unless Import Users to Auth0 is enabled",
362
+ "New Universal Login Experience must be enabled"
363
+ ]
364
+ },
365
+ "severity": "Moderate",
366
+ "status": "yellow",
367
+ "severity_message": "%s connections do not have OTP verification enabled",
368
+ "no_database_connections_found": "No Database connections configured",
369
+ "flexible_identifiers_disabled": "This connection is not configured to use flexible identifiers.",
370
+ "verification_by_link_method": "This connection is configured to verify users via email link."
371
+ },
372
+ "checkDASHardCodedValues": {
373
+ "title": "Databases - Action Scripts Hardcoded Artifacts",
374
+ "category": "Databases",
375
+ "advisory": {},
376
+ "description": "Review your Database Action Scripts for hardcoded secrets",
377
+ "disclaimer": "Please note that while every effort has been made to ensure the accuracy of this validation, not all results may be fully expected or accurate. There is a possibility of false positives, and the results should be interpreted with caution. It is recommended to perform additional checks or manual verification before making any decisions based on the validation outcomes.",
378
+ "docsPath": [
379
+ "https://auth0.com/docs/authenticate/database-connections/custom-db/custom-database-connections-scripts/environment#variables"
380
+ ],
381
+ "severity": "Moderate",
382
+ "status": "yellow",
383
+ "severity_message": "Potential hardcoded credentials, may expose sensitive information.",
384
+ "hard_coded_value_detected": "Variable name <b>%s</b> at line <b>%d</b> and column <b>%d</b>.",
385
+ "action_script_title": "Identified potential hardcoded credentials in <b>\"%s\"</b> script at:"
386
+ },
387
+ "checkJWTSignAlg": {
388
+ "title": "Use RS256 or PS256 for the JSON Web Token (JWT) Signature Algorithm for all Applications",
389
+ "category": "Applications",
390
+ "description": "We recommend configuring the JSON Web Token (JWT) Signature Algorithm for all applications to use RS256 to secure private keys and allow for easier key rotation.",
391
+ "docsPath": [
392
+ "https://auth0.com/docs/get-started/applications/signing-algorithms"
393
+ ],
394
+ "severity": "High",
395
+ "status": "red",
396
+ "advisory": {
397
+ "issue": "Weak Token Configuration",
398
+ "description": {
399
+ "what_it_is": "Tokens (ID tokens, access tokens, and refresh tokens) are critical for authentication and authorization and are sensitive to misconfiguration.",
400
+ "why_its_risky": [
401
+ "Short token lifetimes can cause frequent re-authentication, leading to poor user experience.",
402
+ "Long token lifetimes increase the risk of token theft and misuse.",
403
+ "Insecure signing algorithms (e.g., using HS256 instead of RS256) can make tokens easier to forge."
404
+ ]
405
+ },
406
+ "how_to_fix": [
407
+ "Use RS256 (asymmetric signing) for ID tokens and access tokens.",
408
+ "Set appropriate token lifetimes based on your application's security requirements.",
409
+ "Enable refresh token rotation and expiration to reduce the risk of token reuse.",
410
+ "Regularly rotate signing keys in Auth0."
411
+ ]
412
+ },
413
+ "missing_jwt_alg": "The application with client_id (%s) does not have a JWT Signature Algorithm, defaults to (%s)",
414
+ "not_using_asymmetric_alg": "The application with client_id (%s) is not configured to use (%s) JWT Signature Algorithm",
415
+ "using_asymmetric_alg": "The application with client_id (%s) is configured to use (%s) JWT Signature Algorithm",
416
+ "severity_message": "%s applications/clients require the correct JWT algorithm to be configured."
417
+ },
418
+ "checkGrantTypes": {
419
+ "title": "Application Grant Types",
420
+ "category": "Applications",
421
+ "description": "We recommend a periodic review of enabled Grant Types for applications protected by Auth0.",
422
+ "docsPath": [
423
+ "https://auth0.com/docs/get-started/applications/application-grant-types",
424
+ "https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13#section-3.1.2"
425
+ ],
426
+ "severity": "High",
427
+ "status": "red",
428
+ "advisory": {
429
+ "issue": "Insecure Grant Types",
430
+ "description": {
431
+ "what_it_is": "Grant types define how an application obtains access tokens from the authorization server (Auth0 in this case). Using insecure or inappropriate grant types can expose your application to attacks such as token theft, unauthorized access and account compromise."
432
+ },
433
+ "what_are_grant_types": [
434
+ "Authorization Code (with PKCE for public clients)",
435
+ "Implicit (deprecated and insecure)",
436
+ "Password (Resource Owner Password Credentials)",
437
+ "Client Credentials",
438
+ "Refresh Token"
439
+ ],
440
+ "top_risks": [
441
+ {
442
+ "name": "Enabling the Implicit Grant Type",
443
+ "what_it_is": "The Implicit grant type was designed for single-page applications (SPAs) and returns tokens directly in the URL fragment.",
444
+ "why_its_risky": "Tokens are exposed in the browser's URL, making them vulnerable to theft via browser history, logs, or phishing attacks. No refresh token is provided, requiring frequent re-authentication.",
445
+ "how_to_fix": "Use the Authorization Code with PKCE grant type for SPAs and mobile apps. PKCE (Proof Key for Code Exchange) adds an additional layer of security by preventing authorization code interception."
446
+ },
447
+ {
448
+ "name": "Enabling the Password Grant Type",
449
+ "what_it_is": "The Password grant type allows applications to collect user credentials (username and password) and exchange them for tokens.",
450
+ "why_its_risky": "Applications handle sensitive user credentials directly, increasing the risk of credential theft. This grant type bypasses the authorization server's login page, which may have additional security features (e.g., MFA, anomaly detection).",
451
+ "how_to_fix": "Avoid using the Password grant type unless absolutely necessary. Use the Authorization Code grant type, which redirects users to Auth0's secure login page."
452
+ },
453
+ {
454
+ "name": "Enabling the Client Credentials Grant Type for User Authentication",
455
+ "what_it_is": "The Client Credentials grant type is used for machine-to-machine (M2M) communication, where the client application authenticates itself to access resources.",
456
+ "why_its_risky": "This grant type is not designed for user authentication. Enabling it for user authentication can lead to unauthorized access. It does not involve user consent or interaction, making it unsuitable for user-facing applications.",
457
+ "how_to_fix": "Use the Authorization Code grant type for user authentication. Reserve the Client Credentials grant type for server-to-server communication where no user context is required."
458
+ },
459
+ {
460
+ "name": "Not Enabling PKCE for Public Clients (SPA & Native)",
461
+ "what_it_is": "PKCE (Proof Key for Code Exchange) is an extension to the Authorization Code grant type designed to secure public clients (e.g., SPAs, mobile apps).",
462
+ "why_its_risky": "Without PKCE, public clients are vulnerable to authorization code interception attacks. Attackers can steal authorization codes and exchange them for tokens.",
463
+ "how_to_fix": "Always use PKCE for public clients."
464
+ }
465
+ ],
466
+ "best_practices": {
467
+ "use_authorization_code_grant_type": "This is the most secure and widely recommended grant type for web and mobile applications. Combine it with PKCE for public clients.",
468
+ "avoid_deprecated_grant_types": "Avoid using the Implicit grant type, as it is deprecated and insecure. Minimize the use of the Password grant type.",
469
+ "enforce_secure_client_settings": "Disable unused grant types in your Auth0 application settings. Restrict grant types based on the application type (e.g., use Client Credentials only for M2M apps).",
470
+ "use_refresh_tokens_wisely": "Issue refresh tokens only when necessary. Set appropriate expiration times for refresh tokens and implement token rotation.",
471
+ "monitor_and_log_token_usage": "Use Auth0's logging and monitoring features to detect suspicious token requests or usage patterns.",
472
+ "regularly_review_grant_type_configurations": "Periodically audit your Auth0 applications to ensure they are using the appropriate grant types."
473
+ },
474
+ "example_secure_grant_type_configuration": {
475
+ "for_spas": {
476
+ "grant_type": "Authorization Code with PKCE",
477
+ "redirect_uris": "https://yourapp.com/callback",
478
+ "allowed_logout_urls": "https://yourapp.com"
479
+ },
480
+ "for_web_apps": {
481
+ "grant_type": "Authorization Code",
482
+ "redirect_uris": "https://yourapp.com/callback"
483
+ },
484
+ "for_machine_to_machine_apps": {
485
+ "grant_type": "Client Credentials",
486
+ "redirect_uris": "None"
487
+ }
488
+ }
489
+ },
490
+ "severity_message": "%s applications / clients require a review of enabled grant types",
491
+ "unexpected_grant_type_for_app_type": "Unexpected grant type \"%s\" enabled for application \"%s\" with app_type: %s",
492
+ "missing_grant_type_for_app_type": "Grant type \"%s\" is missing for application \"%s\" with app_type: %s",
493
+ "missing_app_type": "Grant type \"%s\" enabled for application \"%s\" with missing app_type: %s",
494
+ "grant_types_passed": "Grant Types configured %s, for application \"%s\" with with app_type: %s",
495
+ "unknown_app_type": "Application is missing app_type"
496
+ },
497
+ "checkAllowedCallbacks": {
498
+ "title": "Application Allowed Callbacks",
499
+ "category": "Applications",
500
+ "description": "Ensure that all Allowed Callback URLs use secure connections (https://) and do not include local or non-production addresses such as http:// or localhost.",
501
+ "docsPath": [
502
+ "https://auth0.com/docs/authenticate/login/redirect-users-after-login"
503
+ ],
504
+ "severity": "High",
505
+ "status": "red",
506
+ "advisory": {
507
+ "issue": "Insecure Redirect URIs",
508
+ "description": {
509
+ "what_it_is": "Redirect URIs are used to specify where Auth0 can direct users after authentication. If these URIs are not appropriately restricted, attackers can exploit them to redirect users to malicious sites.",
510
+ "why_its_risky": [
511
+ "An insecure redirect URI can lead to open redirect vulnerabilities, allowing attackers opportunities to steal authorization codes or tokens."
512
+ ]
513
+ },
514
+ "how_to_fix": [
515
+ "Always use HTTPS for redirect URIs.",
516
+ "Explicitly list all allowed redirect URIs in the Auth0 dashboard.",
517
+ "Avoid using wildcards or overly permissive URIs (e.g., https://example.com/*).",
518
+ "Regularly review and update the list of allowed URIs."
519
+ ]
520
+ },
521
+ "severity_message": "%s applications / clients require a review of allowed callbacks",
522
+ "missing_callbacks": "No callback URL %s configured.",
523
+ "secure_callbacks": "The following callback URL \"%s\" observed in application %s .",
524
+ "insecure_callbacks": "Insecure callback URL \"%s\"."
525
+ },
526
+ "checkWebOrigins": {
527
+ "title": "Application Web Origins",
528
+ "category": "Applications",
529
+ "description": "CORS configuration should not include origins with localhost or insecure http; use a secure, fully qualified domain (https://example.com) instead.",
530
+ "docsPath": [
531
+ "https://auth0.com/docs/get-started/applications/application-settings",
532
+ "https://auth0.com/docs/authenticate/login/cross-origin-authentication"
533
+ ],
534
+ "severity": "High",
535
+ "status": "red",
536
+ "advisory": {
537
+ "issue": "Insecure CORS Web Origins Configuration",
538
+ "description": {
539
+ "what_it_is": "Web Origins control which domains can make cross-origin requests to your Auth0 application. Misconfigured origins can expose your application to cross-origin attacks and unauthorized access.",
540
+ "why_its_risky": [
541
+ "Insecure HTTP origins can allow attackers to intercept authentication tokens and sensitive data in transit.",
542
+ "Overly permissive CORS policies (like allowing localhost in production) can enable attackers to make unauthorized requests from malicious domains.",
543
+ "Development origins left in production configurations can expose internal application URLs and testing endpoints.",
544
+ "Wildcard origins or improperly validated domains can allow any website to make requests on behalf of users, leading to CSRF attacks."
545
+ ]
546
+ },
547
+ "how_to_fix": [
548
+ "Use only HTTPS origins in production to ensure encrypted communication.",
549
+ "Remove development origins (localhost, HTTP) from production configurations.",
550
+ "Implement strict origin validation - only allow specific, trusted domains.",
551
+ "Regularly audit and update the list of allowed web origins.",
552
+ "Avoid using wildcard origins unless absolutely necessary and properly secured."
553
+ ]
554
+ },
555
+ "severity_message": "%s applications / clients require a review of web origins",
556
+ "missing_web_origins_urls": "No callback URL %s configured for application %s .",
557
+ "secure_web_origins": "The following web origin URL \"%s\" was observed in application %s .",
558
+ "insecure_web_origins_urls": "Insecure web origin (CORS) URL \"%s\"."
559
+ },
560
+ "checkAllowedLogoutUrl": {
561
+ "title": "Application Allowed Logout URLs",
562
+ "category": "Applications",
563
+ "description": "Ensure that all Allowed Logout URLs are secure; do not use http://, localhost, or any other non-production URLs.",
564
+ "docsPath": [
565
+ "https://auth0.com/docs/authenticate/login/logout/redirect-users-after-logout"
566
+ ],
567
+ "severity": "Low",
568
+ "status": "green",
569
+ "advisory": {
570
+ "issue": "Insecure Logout Redirect URLs",
571
+ "description": {
572
+ "what_it_is": "Logout URLs specify where users are redirected after logging out of your application. If these URLs are not properly secured or validated, they can be exploited by attackers.",
573
+ "why_its_risky": [
574
+ "Attackers can exploit open redirect vulnerabilities to send users to malicious sites after logout, potentially for phishing attacks.",
575
+ "Insecure HTTP URLs can expose logout tokens or session information during transit.",
576
+ "Development URLs (localhost) left in production can expose internal application structure or create confusion for users.",
577
+ "Malicious redirects after logout can trick users into believing they're still on your legitimate site when they're actually on an attacker-controlled domain."
578
+ ]
579
+ },
580
+ "how_to_fix": [
581
+ "Always use HTTPS URLs for logout redirects to ensure encrypted communication.",
582
+ "Remove development URLs (localhost, HTTP) from production configurations.",
583
+ "Implement strict validation of logout redirect URLs to prevent open redirect vulnerabilities.",
584
+ "Regularly audit and update the list of allowed logout URLs."
585
+ ]
586
+ },
587
+ "severity_message": "%s applications / clients require a review of allowed logout URLs",
588
+ "missing_allowed_logout_urls": "No allowed logout URLs are configured for application.",
589
+ "secure_allowed_logout_urls": "The following allowed logout URLs were observed \"%s\".",
590
+ "insecure_allowed_logout_urls": "Insecure allowed logout URLs \"%s\"."
591
+ },
592
+ "checkRefreshToken": {
593
+ "title": "Refresh Tokens",
594
+ "category": "Applications",
595
+ "description": "Refresh tokens are used to request a new access token and/or ID token for a user without requiring them to re-authenticate.",
596
+ "docsPath": [
597
+ "https://auth0.com/docs/get-started/applications/application-settings",
598
+ "https://auth0.com/docs/secure/tokens/refresh-tokens",
599
+ "https://auth0.com/docs/secure/tokens/refresh-tokens/refresh-token-rotation"
600
+ ],
601
+ "severity": "Moderate",
602
+ "status": "yellow",
603
+ "advisory": {
604
+ "issue": "Rotating Refresh Tokens in Auth0",
605
+ "description": {
606
+ "what_it_is": "Each time the client uses a refresh token to get a new access token, Auth0 issues a new refresh token.If an old refresh token is reused, Auth0 detects the reuse and revokes the entire session — which protects against token theft and replay attacks.",
607
+ "why_its_risky": [
608
+ "Token Replay Attacks - If a non-rotating refresh token is stolen (e.g. via XSS, storage leak, or network sniffing), it can be used indefinitely by an attacker to generate new access tokens.",
609
+ "No Revocation Mechanism - Since the token doesn’t change, the system can’t tell if the same token is being used by multiple sources (e.g. attacker and legitimate user).",
610
+ "Long Lifetime - If the token has a long expiration time (e.g. weeks or months), the attacker has a long window of opportunity to exploit it.",
611
+ "Limited Visibility - You lose the ability to track or detect anomalies (e.g. unusual usage locations or frequencies) tied to the reuse of a refresh token."
612
+ ]
613
+ },
614
+ "how_to_fix": [
615
+ "Rotating refresh tokens can be enabled via the Application settings in the Auth0 dashboard:",
616
+ "You can also configure this behavior using the Auth0 Management API."
617
+ ]
618
+ },
619
+ "severity_message": "%s applications / clients require a review of refresh token configuration",
620
+ "use_rotating_refresh_token": "Application %s has %s refresh token type configured."
621
+ },
622
+ "checkApplicationLoginUri": {
623
+ "title": "Application Login URI",
624
+ "category": "Applications",
625
+ "description": "Application Login URI should be configured when using the Universal Login experience and should not include insecure URLs eg: http://, localhost etc",
626
+ "docsPath": [
627
+ "https://auth0.com/docs/authenticate/login/auth0-universal-login/configure-default-login-routes"
628
+ ],
629
+ "severity": "Info",
630
+ "status": "blue",
631
+ "advisory": {
632
+ "issue": "Insecure Application Login URI Configuration",
633
+ "description": {
634
+ "what_it_is": "The Application Login URI specifies where Auth0 should redirect users to initiate the login flow. Insecure URIs can compromise the authentication process and expose users to security risks.",
635
+ "why_its_risky": [
636
+ "HTTP URLs can expose authentication parameters and tokens in transit, making them vulnerable to interception.",
637
+ "Development URLs (localhost) in production can confuse users and may expose internal application structure.",
638
+ "Insecure login URIs can be exploited for phishing attacks where users are redirected to malicious login pages.",
639
+ "Unencrypted communication during the authentication initiation process can lead to session hijacking."
640
+ ]
641
+ },
642
+ "how_to_fix": [
643
+ "Always use HTTPS URLs for Application Login URIs to ensure encrypted communication.",
644
+ "Remove development URLs (localhost, HTTP) from production configurations.",
645
+ "Verify that login URIs point to legitimate, controlled domains.",
646
+ "Regularly audit and validate all configured login URIs."
647
+ ]
648
+ },
649
+ "severity_message": "%s applications / clients require a review of Application Login URI settings",
650
+ "missing_initiate_login_uri": "No Application Login Uri is configured for application.",
651
+ "secure_initiate_login_uri": "The following Application Login Uri \"%s\" was observed in application %s .",
652
+ "insecure_initiate_login_uri": "Insecure Application Login Uri \"%s\" was observed in application %s ."
653
+ },
654
+ "checkCrossOriginAuthentication": {
655
+ "title": "Cross Origin Authentication",
656
+ "category": "Applications",
657
+ "description": "We recommend a periodic review of enabling cross origin authentication for applications protected by Auth0.",
658
+ "docsPath": [
659
+ "https://auth0.com/docs/authenticate/login/cross-origin-authentication"
660
+ ],
661
+ "severity": "High",
662
+ "status": "red",
663
+ "advisory": {
664
+ "issue": "Cross Origin Authentication Security Risks",
665
+ "description": {
666
+ "what_it_is": "Cross Origin Authentication allows authentication requests to be made from different domains than your application's domain. While sometimes necessary for certain architectures, it introduces security risks that need careful consideration.",
667
+ "why_its_risky": [
668
+ "Collecting user credentials in an application served from one origin and then sending them to another origin can present certain security vulnerabilities, including the possibility of a phishing attack.",
669
+ "Increases the attack surface by allowing authentication flows from multiple origins, making it harder to control and monitor access.",
670
+ "Complicates security monitoring and incident response by creating multiple potential attack vectors."
671
+ ]
672
+ },
673
+ "how_to_fix": [
674
+ "Disable cross-origin authentication unless specifically required for your application architecture.",
675
+ "Consider alternative architectures that don't require cross-origin authentication."
676
+ ]
677
+ },
678
+ "severity_message": "%s applications / clients require a review of cross origin authentication setting",
679
+ "cross_origin_authentication_enabled": "cross_origin_authentication enabled for application \"%s\" with app_type: %s",
680
+ "cross_origin_authentication_disabled": "cross_origin_authentication disabled for application \"%s\" with app_type: %s"
681
+ },
682
+ "checkBruteForce": {
683
+ "enabled": "Brute Force Protection is enabled.",
684
+ "disabled": "Brute Force Protection is not enabled. This is a key control against common credential-based attacks.",
685
+ "shieldsConfigured": "All required shields are configured: ",
686
+ "shieldsMissing": "Some shields are disabled : %s — review recommended.",
687
+ "allowlistEmpty": "No allowlist is configured, which is safe by default.",
688
+ "allowlistPresent": "Allowlist contains IPs: %s",
689
+ "enableAccountLockout": "Enable Account Lockout to trigger blocks irrespective of IP address to avoid attackers rotating IP addresses and attempting to perform password spray attacks.",
690
+ "title": "Brute Force Protection",
691
+ "category": "Attack Protection",
692
+ "description": "Brute-force protection safeguards against a single IP address attacking a single user account. When a given IP address tries and fails multiple times to log in as the same user, brute-force protection results in future requests from the IP to temporarily be blocked:",
693
+ "docsPath": [
694
+ "https://auth0.com/docs/secure/attack-protection/brute-force-protection",
695
+ "https://auth0.com/docs/secure/attack-protection/playbooks/brute-force-protection-playbook"
696
+ ],
697
+ "severity": "Info",
698
+ "status": "blue",
699
+ "severity_message": "Review Brute Force Settings",
700
+ "advisory": {
701
+ "issue": "Importance of Implementing Brute Force Protection",
702
+ "description": {
703
+ "what_it_is": "Brute force attacks are a common method used by malicious actors to gain unauthorized access to user accounts by systematically trying numerous username and password combinations. Without proper protection, such attacks can compromise sensitive data, damage user trust, and lead to regulatory or financial consequences.",
704
+ "why_its_risky": [
705
+ "Attackers may successfully guess credentials and gain control of user accounts.",
706
+ "Once inside, attackers can steal personal data, leading to large-scale data breaches.",
707
+ "Publicly known security incidents harm brand reputation and user confidence.",
708
+ "Recovery from a successful brute force attack may require significant time and resources.",
709
+ "Failing to prevent unauthorized access can result in fines and sanctions under data protection laws."
710
+ ]
711
+ },
712
+ "how_to_fix": [
713
+ "Auth0 provides built-in features to detect and block brute force attempts, such as rate-limiting login requests and blocking suspicious IPs. Enabling this protection helps prevent attackers from exploiting weak or reused passwords.",
714
+ "Users expect their data to be secure. Repeated unauthorized login attempts can lead to account lockouts or unauthorized access, both of which negatively impact user trust and experience.",
715
+ "Many regulatory standards (e.g., GDPR, HIPAA, PCI-DSS) require strong authentication controls. Failing to implement brute force protection may put your organization at risk of non-compliance and potential legal action.",
716
+ "Bots and automated scripts can target Auth0 login endpoints. Brute force protection adds a critical layer of defense against these high-frequency attacks."
717
+ ]
718
+ }
719
+ },
720
+ "checkSuspiciousIPThrottling": {
721
+ "enabled": "Suspicious IP Throttling is enabled.",
722
+ "disabled": "Suspicious IP Throttling is not enabled. This is a key control against common credential-based attacks.",
723
+ "shieldsConfigured": "All required shields are configured: ",
724
+ "shieldsMissing": "Some shields are disabled : %s — review recommended.",
725
+ "allowlistEmpty": "No allowlist is configured, which is safe by default.",
726
+ "allowlistPresent": "Allowlist contains IPs: %s",
727
+ "stageMaxAttempts": "Stage '%s': max_attempts is set to ",
728
+ "stageMaxAttemptsInvalid": "Stage '%s': max_attempts must be greater than 0.",
729
+ "stageRate": "Stage '%s': rate is set to %s seconds (%s minutes).",
730
+ "stageRateInvalid": "Stage '%s': rate must be greater than 0.",
731
+ "title": "Suspicious IP Throttling",
732
+ "category": "Attack Protection",
733
+ "description": "Suspicious IP Throttling blocks traffic from any IP address that rapidly attempts too many logins or signups. This helps protect your applications from high-velocity attacks that target multiple accounts. Suspicious IP throttling is enabled by default when you create your Auth0 tenant. When Auth0 detects a high number of signup attempts or failed login attempts from an IP address, it responds to subsequent attempts with the HTTP 429 Too Many Requests status code until that IP address is no longer throttled.",
734
+ "docsPath": [
735
+ "https://auth0.com/docs/secure/attack-protection/suspicious-ip-throttling"
736
+ ],
737
+ "severity": "Info",
738
+ "status": "blue",
739
+ "severity_message": "Review Suspicious IP Throttling Settings",
740
+ "advisory": {
741
+ "issue": "Security Advisory: Why You Should Implement Suspicious IP Throttling in Auth0",
742
+ "description": {
743
+ "what_it_is": "Suspicious IP throttling is a security control that limits authentication attempts from IP addresses exhibiting malicious or abnormal behavior. By enabling this feature in Auth0, you can significantly reduce the risk of credential stuffing, account takeover attacks, and abuse from automated scripts or bots.",
744
+ "why_its_risky": [
745
+ "Without throttling, attackers can freely target your Auth0 tenant using malicious IPs without restriction.",
746
+ "Bots from known suspicious IPs can carry out automated login attempts at scale, potentially breaching user accounts.",
747
+ "Excessive login attempts can degrade authentication service performance or even cause denial-of-service issues for legitimate users.",
748
+ "Failing to throttle suspicious IPs may delay the detection of an attack in progress.",
749
+ "Lack of basic security controls like throttling may lead to non-compliance with industry security standards and regulations."
750
+ ]
751
+ },
752
+ "how_to_fix": [
753
+ "Attackers often use lists of stolen credentials and attempt to log in to accounts using bots and compromised IPs. Suspicious IP throttling slows or blocks these attempts, helping to protect user accounts from takeover.",
754
+ "Throttling helps identify patterns of abuse early, enabling your security team to respond proactively to emerging threats.",
755
+ "Blocking excessive requests from suspicious IPs prevents unnecessary load on your servers and authentication systems, maintaining performance for legitimate users.",
756
+ "Many security frameworks and compliance standards encourage proactive defense measures against abuse, including rate-limiting and IP reputation checks."
757
+ ]
758
+ }
759
+ },
760
+ "checkBreachedPassword": {
761
+ "validating_config": "Validating configuration...",
762
+ "config_valid": "Configuration is valid.",
763
+ "validation_failed": "Validation failed with the following errors:",
764
+ "error_occurred": "An error occurred: ",
765
+ "enabled": "Breached Password Detection is `enabled`",
766
+ "disabled": "Breached Password Detection is `disabled`",
767
+ "enabled_must_be_boolean": "The 'enabled' field must be a boolean.",
768
+ "shields_must_be_array": "The 'shields' field must be an array.",
769
+ "shields_invalid_values": "The 'shields' array contains invalid values.",
770
+ "shields_values": "The following shields are configured %s",
771
+ "stage_login_shields_block_not_configured": "Enable the Block compromised user accounts to block users from using compromised credentials during login.",
772
+ "admin_frequency_must_be_array": "The 'admin_notification_frequency' field must be an array.",
773
+ "admin_frequency_invalid_values": "The 'admin_notification_frequency' array contains invalid values.",
774
+ "admin_frequency_values": "The 'admin_notification_frequency' array contains %s values.",
775
+ "method_invalid_value": "The 'method' field must be either 'standard' or 'enhanced'.",
776
+ "method_value": "The tenant is configured to use %s, Breached Password Detection",
777
+ "stage_pre_user_missing": "The 'stage.pre-user-registration' field must be defined and valid.",
778
+ "stage_pre_user_shields_invalid": "The 'stage.pre-user-registration.shields' field contains invalid values.",
779
+ "stage_pre_user_shields": "The tenant is configured to %s on new account creation",
780
+ "stage_pre_user_shields_not_configured": "The tenant does not have sign up shields configured",
781
+ "stage_pre_user_shields_block_not_configured": "Enable the Block compromised credentials for new accounts to block users from using compromised credentials during signup.",
782
+ "stage_pre_change_password_missing": "The 'stage.pre-change-password' field must be defined and valid.",
783
+ "stage_pre_change_password_shields_invalid": "The 'stage.pre-change-password.shields' field contains invalid values.",
784
+ "stage_pre_change_password_shields": "The tenant is configured to %s on change password.",
785
+ "stage_pre_change_password_shields_not_configured": "Enable the Block compromised credentials use for password reset to block users from using compromised credentials upon password reset.",
786
+ "stage_pre_change_password_shields_block_not_configured": "Enable the Block compromised credentials use for password reset to block users from using compromised credentials upon password reset.",
787
+ "monitoring_mode": "The tenant has Breached Password Detection enabled, which is currently running in monitoring mode",
788
+ "title": "Breached Password Detection",
789
+ "category": "Attack Protection",
790
+ "description": "Breached password detection protects your applications from threat actors signing up or logging in with stolen credentials. Auth0 can both notify users and block at-risk accounts.",
791
+ "docsPath": [
792
+ "https://auth0.com/docs/secure/attack-protection/breached-password-detection",
793
+ "https://auth0.com/docs/secure/attack-protection/playbooks/breached-password-playbook"
794
+ ],
795
+ "severity": "Moderate",
796
+ "status": "yellow",
797
+ "severity_message": "Review Breached Password Detection Settings",
798
+ "advisory": {
799
+ "issue": "Why You Should Implement Breached Password Detection in Auth0",
800
+ "description": {
801
+ "what_it_is": "Breached password detection is a security mechanism that alerts or blocks users from using credentials that have appeared in known data breaches. With billions of passwords exposed through various breaches, attackers frequently leverage these leaked credentials in automated attacks. Auth0’s breached password detection helps defend against this by checking if a user’s password has been compromised and taking appropriate action.",
802
+ "why_its_risky": [
803
+ "Users may unknowingly reuse compromised credentials, leaving their accounts vulnerable to attacks.",
804
+ "Without detection, attackers can repeatedly succeed in accessing accounts using known breach data.",
805
+ "Users expect organizations to protect their data. Failing to warn them about exposed credentials can erode confidence.",
806
+ "Organizations miss a valuable signal indicating targeted accounts or users at risk.",
807
+ "Failing to mitigate known credential threats may result in non-compliance with modern security standards or audits."
808
+ ]
809
+ },
810
+ "how_to_fix": [
811
+ "Attackers often use breached username-password pairs in bulk to gain unauthorized access. Breached password detection helps prevent successful logins, signups, password resets using these compromised credentials.",
812
+ "Notifying users when their password has been found in a breach enables them to take immediate action, reducing the risk of future compromise.",
813
+ "Blocking or resetting passwords that are known to be compromised forces users to choose stronger, more secure alternatives—improving overall security hygiene.",
814
+ "Alerting users about risks to their account increases trust and demonstrates a proactive security posture.",
815
+ "Many data protection frameworks (e.g. NIST, GDPR) recommend or require measures to detect and respond to the use of compromised credentials."
816
+ ]
817
+ }
818
+ },
819
+ "checkEmailProvider": {
820
+ "title": "Email Providers",
821
+ "category": "Email Providers",
822
+ "advisory": {
823
+ "issue": "Security and Deliverability Risks of Default Email Configuration",
824
+ "description": {
825
+ "what_it_is": "Email providers handle the delivery of authentication-related emails such as password resets, email verification, and security notifications. Using default configurations can create security and reliability issues.",
826
+ "why_its_risky": [
827
+ "Default email configurations may have limited deliverability, causing critical security emails to end up in spam folders or not be delivered at all.",
828
+ "Users may not receive password reset emails, potentially locking them out of their accounts and creating support burdens.",
829
+ "Generic email templates and sender addresses can appear suspicious to users and email filters, reducing trust.",
830
+ "Without proper email authentication (SPF, DKIM, DMARC), emails are more likely to be flagged as phishing attempts.",
831
+ "Lack of branded email communications can be exploited by attackers who create convincing phishing emails that users can't distinguish from legitimate ones."
832
+ ]
833
+ },
834
+ "how_to_fix": [
835
+ "Configure a custom email provider with proper authentication.",
836
+ "Set up SPF, DKIM, and DMARC records for your email domain to improve deliverability and prevent spoofing.",
837
+ "Use branded email templates that users will recognize as legitimate.",
838
+ "Test email deliverability regularly to ensure critical communications reach users.",
839
+ "Monitor email bounce rates and spam complaints to maintain good sender reputation."
840
+ ]
841
+ },
842
+ "description": "In order for end users to receive branded email and domains, it is recommended to configure a email provider.",
843
+ "docsPath": [
844
+ "https://auth0.com/docs/customize/email/smtp-email-providers#configure-a-custom-smtp-server"
845
+ ],
846
+ "severity": "Moderate",
847
+ "status": "yellow",
848
+ "severity_message": "Review Email Provider Settings",
849
+ "email_provider_not_configured": "The tenant does not have an email provider configured",
850
+ "email_provider_enabled": "The tenant is configured to use %s as an email provider",
851
+ "email_provider_disabled": "The tenant is configured to use %s as an email provider. This email provider is disabled. "
852
+ },
853
+ "checkLogStream": {
854
+ "log_stream_not_configured": "Log Streaming is not correctly configured in the tenant",
855
+ "log_stream_active": "The tenant has configured %s of type %s and is in %s state",
856
+ "log_stream_inactive": "The tenant has configured %s of type %s and is in %s state",
857
+ "severity": "Moderate",
858
+ "status": "yellow",
859
+ "severity_message": "Enable Log Streaming",
860
+ "title": "Log Streams",
861
+ "category": "Log Streams",
862
+ "advisory": {
863
+ "issue": "Security Monitoring and Compliance Risks Without Log Streaming",
864
+ "description": {
865
+ "what_it_is": "Log streaming enables real-time export of Auth0 tenant logs to external monitoring and analysis systems. Without proper log streaming, organizations lose critical visibility into authentication events and potential security incidents.",
866
+ "why_its_risky": [
867
+ "The tenant's log retention time may be insufficient for security monitoring and compliance needs.",
868
+ "Security incidents may go undetected without proper log monitoring and alerting capabilities.",
869
+ "Forensic investigation becomes difficult or impossible without historical log data stored in external systems.",
870
+ "Compliance requirements often mandate log retention and monitoring that can't be met with Auth0's default log retention.",
871
+ "Anomalous authentication patterns, brute force attacks, and account takeover attempts may not be identified in time.",
872
+ "Integration with Security Information and Event Management (SIEM) systems is not possible without log streaming.",
873
+ "Audit trails required for compliance and security investigations may be incomplete or unavailable."
874
+ ]
875
+ },
876
+ "how_to_fix": [
877
+ "Configure log streaming to send Auth0 logs to your SIEM or log analysis platform.",
878
+ "Set up monitoring and alerting for suspicious authentication patterns and security events.",
879
+ "Test log streaming configuration regularly to ensure continuous data flow."
880
+ ]
881
+ },
882
+ "description": "Auth0's log streaming service allows you to export tenant log events to a log event analysis service URL.",
883
+ "docsPath": [
884
+ "https://auth0.com/docs/customize/log-streams"
885
+ ]
886
+ },
887
+ "checkEmailTemplates": {
888
+ "email_templates_not_configured": "Email Templates are not configured",
889
+ "email_template_not_configured": "%s template is not configured",
890
+ "email_template_enabled": "%s template is enabled",
891
+ "email_template_not_enabled": "%s template is disabled",
892
+ "severity": "Info",
893
+ "status": "blue",
894
+ "advisory": {
895
+ "issue": "Security and Trust Risks of Default Email Templates",
896
+ "description": {
897
+ "what_it_is": "Custom email templates allow you to brand authentication-related emails with your organization's identity. Using default templates can create security and trust issues with your users.",
898
+ "why_its_risky": [
899
+ "Generic email templates don't build user trust and may be marked as spam or phishing attempts.",
900
+ "Users may not recognize legitimate authentication emails from your service, leading them to ignore important security communications.",
901
+ "Attackers can more easily create convincing phishing emails that mimic generic templates since users aren't familiar with your branded communications.",
902
+ "Default templates don't include your organization's security guidance or contact information for users who suspect fraud.",
903
+ "Lack of consistent branding across email communications can confuse users about which emails are legitimate."
904
+ ]
905
+ },
906
+ "how_to_fix": [
907
+ "Configure custom email templates that match your brand identity and tone.",
908
+ "Include clear security guidance and your organization's contact information in templates.",
909
+ "Use consistent branding elements (logos, colors, language) that users will recognize.",
910
+ "Test email templates across different email clients to ensure proper rendering.",
911
+ "Include clear instructions for users on how to verify the authenticity of emails from your service."
912
+ ]
913
+ },
914
+ "severity_message": "Configure custom Email Templates",
915
+ "title": "Email Templates",
916
+ "category": "Email Templates",
917
+ "description": "You must configure your own email provider using a third-party service (such as Amazon SES, Mandrill, SendGrid, SparkPost, Mailgun, or a custom SMTP provider) to be able to customize your emails. ",
918
+ "docsPath": [
919
+ "https://auth0.com/docs/customize/email/email-templates"
920
+ ]
921
+ },
922
+ "checkErrorPageTemplate": {
923
+ "liquidjs_no_templates_to_analyze": "No templates found to analyze for XSS vulnerabilities",
924
+ "liquidjs_no_liquid_templates": "No LiquidJS templates found to analyze",
925
+ "liquidjs_unescaped_output": "Unescaped variable output detected: %s",
926
+ "liquidjs_raw_filter_usage": "Raw/unescaped filter usage detected in LiquidJS template",
927
+ "liquidjs_user_variable_unescaped": "User-controlled variable without proper escaping",
928
+ "liquidjs_template_secure": "LiquidJS template appears secure",
929
+ "liquidjs_analysis_summary": "LiquidJS XSS analysis completed: %s",
930
+ "severity": "High",
931
+ "status": "red",
932
+ "advisory": {
933
+ "recommendation": "Always escape user input in LiquidJS templates using filters like | escape, | h, or | html_escape",
934
+ "details": "Cross-Site Scripting (XSS) vulnerabilities in error page templates can be exploited when user-controlled data is inserted without proper escaping"
935
+ },
936
+ "severity_message": "Prevent XSS vulnerabilities in LiquidJS error page templates",
937
+ "title": "LiquidJS XSS Prevention",
938
+ "category": "Liquid Templates",
939
+ "description": "Analyzes LiquidJS error page templates for potential Cross-Site Scripting (XSS) vulnerabilities. Checks for unescaped variables, dangerous filter usage, and variables in dangerous contexts like script tags or event handlers.",
940
+ "docsPath": [
941
+ "https://auth0.com/docs/customize/login-pages/custom-error-pages",
942
+ "https://shopify.github.io/liquid/filters/escape/",
943
+ "https://owasp.org/www-community/attacks/xss/"
944
+ ]
945
+ },
946
+ "checkDefaultAudience": {
947
+ "title": "Default Audience",
948
+ "category": "Tenant Settings",
949
+ "advisory": {
950
+ "issue": "Security and Architectural Implications of Default Audience Configuration",
951
+ "description": {
952
+ "what_it_is": "The Default Audience setting automatically adds a specified API identifier to all access tokens issued by your tenant. This setting affects token scoping and can have significant security and architectural implications.",
953
+ "why_its_risky": [
954
+ "Overly broad audience scoping may grant access tokens more permissions than intended for specific applications.",
955
+ "Applications may receive tokens with audiences they don't expect, potentially causing security vulnerabilities if not properly validated.",
956
+ "Changes to default audience can break existing applications that rely on specific token audience values.",
957
+ "May inadvertently expose APIs to applications that shouldn't have access to them.",
958
+ "Complicates token validation logic when applications need to handle multiple potential audiences.",
959
+ "Can create confusion in multi-tenant or multi-environment scenarios where different audience values are expected."
960
+ ]
961
+ },
962
+ "how_to_fix": [
963
+ "Carefully evaluate whether a default audience is necessary for your architecture.",
964
+ "If configured, ensure all applications properly validate token audiences.",
965
+ "Document the default audience setting and its implications for development teams.",
966
+ "Consider using application-specific audience configuration instead of tenant-wide defaults.",
967
+ "Test thoroughly when making changes to default audience settings.",
968
+ "Monitor applications for proper token handling and audience validation."
969
+ ]
970
+ },
971
+ "description": "API identifier to use for Authorization Flows. If you enter a value, all access tokens issued by Auth0 will specify this API identifier as an audience. Setting the Default Audience is equivalent to appending this audience to every authorization request made to your tenant for every application. This will cause new behavior that might result in breaking changes for some of your applications. ",
972
+ "docsPath": [
973
+ "https://auth0.com/docs/get-started/tenant-settings"
974
+ ],
975
+ "default_audience": "%s is configured as the default audience in the tenant",
976
+ "no_default_audience": "There is no default audience configured in the tenant",
977
+ "severity": "Info",
978
+ "status": "blue",
979
+ "severity_message": "Review Tenant Settings > Default Audience"
980
+ },
981
+ "checkDefaultDirectory": {
982
+ "title": "Default Directory",
983
+ "category": "Tenant Settings",
984
+ "advisory": {
985
+ "issue": "Security Considerations for Default Directory Configuration",
986
+ "description": {
987
+ "what_it_is": "The Default Directory setting specifies which connection should be used for Resource Owner Password Flow and as a fallback for Universal Login. This setting can affect security and user experience if not properly configured.",
988
+ "why_its_risky": [
989
+ "Users may be authenticated against an unintended connection if the default directory is misconfigured.",
990
+ "Resource Owner Password Flow bypasses many security features of Universal Login, potentially exposing credentials.",
991
+ "Default directory misconfigurations can lead to users being unable to access their accounts or being authenticated with wrong permissions.",
992
+ "May inadvertently expose weaker authentication methods if the default directory has less strict security policies.",
993
+ "Can create confusion in environments with multiple user stores or connection types.",
994
+ "Compliance issues may arise if users are authenticated against non-compliant or less secure connections by default."
995
+ ]
996
+ },
997
+ "how_to_fix": [
998
+ "Carefully select the most appropriate and secure connection as your default directory.",
999
+ "Avoid using Resource Owner Password Flow unless absolutely necessary for legacy application support.",
1000
+ "Ensure the default directory connection has strong security policies and authentication methods.",
1001
+ "Regularly review and validate that the default directory configuration aligns with your security requirements.",
1002
+ "Consider using Universal Login exclusively and avoiding default directory dependencies.",
1003
+ "Document the default directory setting and its security implications for your development team."
1004
+ ]
1005
+ },
1006
+ "description": "The name of the default connection to be used for both the Resource Owner Password Flow and Universal Login Experience",
1007
+ "docsPath": [
1008
+ "https://auth0.com/docs/get-started/tenant-settings"
1009
+ ],
1010
+ "default_directory": "%s is configured as the Default Directory in the tenant",
1011
+ "no_default_directory": "There is no Default Directory configured in the tenant",
1012
+ "severity": "Info",
1013
+ "status": "blue",
1014
+ "severity_message": "Review Tenant Settings > Default Directory"
1015
+ },
1016
+ "checkEnabledDynamicClientRegistration": {
1017
+ "title": "Dynamic Client Registration",
1018
+ "category": "Tenant Settings",
1019
+ "advisory": {
1020
+ "issue": "Security Considerations for Dynamic Client Registration",
1021
+ "description": {
1022
+ "what_it_is": "Dynamic Client Registration allows third-party applications to automatically register with your Auth0 tenant without manual configuration. While this provides flexibility, it also introduces security considerations that need careful management.",
1023
+ "why_its_risky": [
1024
+ "Malicious applications could potentially register themselves and attempt to access user data inappropriately.",
1025
+ "Without proper vetting, registered applications may not follow security best practices.",
1026
+ "Increased attack surface as more applications have access to your authentication system.",
1027
+ "Difficult to maintain oversight and governance over all registered applications.",
1028
+ "Potential for abuse if registration endpoints are not properly secured or monitored."
1029
+ ]
1030
+ },
1031
+ "how_to_fix": [
1032
+ "Carefully evaluate whether Dynamic Client Registration is necessary for your use case.",
1033
+ "Monitor and audit all dynamically registered applications regularly.",
1034
+ "Implement rate limiting and abuse detection for registration endpoints.",
1035
+ "Establish clear policies and agreements for third-party applications accessing your system."
1036
+ ]
1037
+ },
1038
+ "description": "You can dynamically register third-party applications for your tenant. This feature is based on the OpenID Connect Dynamic Client Registration specification.",
1039
+ "docsPath": [
1040
+ "https://auth0.com/docs/get-started/applications/confidential-and-public-applications/first-party-and-third-party-applications",
1041
+ "https://auth0.com/docs/get-started/applications/dynamic-client-registration",
1042
+ "https://datatracker.ietf.org/doc/html/rfc7591"
1043
+ ],
1044
+ "enabled_dynamic_client_registration": "Dynamic Client Registration is enabled",
1045
+ "enable_dynamic_client_registration": "Dynamic Client Registration is not enabled",
1046
+ "severity": "GenAI",
1047
+ "status": "violet",
1048
+ "severity_message": "Review Tenant Settings > Advanced > OIDC Dynamic Application Registration"
1049
+ },
1050
+ "checkSessionLifetime": {
1051
+ "title": "Session Management",
1052
+ "category": "Tenant Settings",
1053
+ "advisory": {
1054
+ "issue": "Security Risks of Improper Session Lifetime Configuration",
1055
+ "description": {
1056
+ "what_it_is": "Session lifetime settings control how long users remain authenticated before being required to log in again. Improper configuration can create security vulnerabilities or poor user experience.",
1057
+ "why_its_risky": [
1058
+ "Overly long session lifetimes increase the window of opportunity for session hijacking attacks.",
1059
+ "Unattended devices with long-lived sessions can be accessed by unauthorized users.",
1060
+ "Compromised session tokens remain valid for extended periods, giving attackers prolonged access.",
1061
+ "Compliance requirements often mandate session timeouts for sensitive applications and data access.",
1062
+ "Sessions that don't expire appropriately can persist across shared or public devices, exposing user accounts.",
1063
+ "Lack of idle session timeouts means inactive sessions remain vulnerable indefinitely."
1064
+ ]
1065
+ },
1066
+ "how_to_fix": [
1067
+ "Configure appropriate session lifetimes based on your application's security requirements and user needs.",
1068
+ "Implement idle session timeouts to automatically log out inactive users.",
1069
+ "Use shorter session lifetimes for high-privilege users or sensitive applications.",
1070
+ "Configure session cookie settings securely (HttpOnly, Secure, SameSite).",
1071
+ "Consider implementing step-up authentication for sensitive operations even within active sessions.",
1072
+ "Regularly review session management policies and adjust based on security incidents or requirement changes."
1073
+ ]
1074
+ },
1075
+ "description": "You have the ability to control how long end-user sessions remain active before requiring reauthentication. This includes setting the duration of both browser-based sessions and refresh token lifetimes, allowing you to tailor the balance between user convenience and security requirements. By configuring session lifetime policies, you can determine when users are prompted to log in again whether after a fixed time period, inactivity, or changes in risk context. These settings can be adjusted at the tenant level, depending on your use case.",
1076
+ "docsPath": [
1077
+ "https://auth0.com/docs/manage-users/sessions/configure-session-lifetime-settings",
1078
+ "https://auth0.com/docs/manage-users/sessions/non-persistent-sessions"
1079
+ ],
1080
+ "idle_session_lifetime": "Idle Session Lifetime: %s",
1081
+ "session_lifetime": "Session Lifetime: %s",
1082
+ "session_cookie_mode": "Session Cookie Mode: %s",
1083
+ "severity": "Info",
1084
+ "status": "blue",
1085
+ "severity_message": "Review Tenant Settings > Advanced > Session Expiration"
1086
+ },
1087
+ "checkSupportEmail": {
1088
+ "title": "Support Email",
1089
+ "category": "Tenant Settings",
1090
+ "advisory": {
1091
+ "issue": "Security Communication Risks Without Configured Support Contact",
1092
+ "description": {
1093
+ "what_it_is": "A configured support email provides users with a trusted way to report security concerns, suspicious activities, or get help with authentication issues. Without this, users may struggle to get legitimate help or report security incidents.",
1094
+ "why_its_risky": [
1095
+ "Users experiencing authentication issues may seek help through insecure channels or fall victim to phishing support scams.",
1096
+ "Security incidents or suspicious activities may go unreported if users don't know how to contact legitimate support.",
1097
+ "Lack of clear support contact information can lead users to trust illegitimate support offers from attackers.",
1098
+ "Authentication problems may remain unresolved, potentially leading users to use insecure workarounds.",
1099
+ "Compliance requirements may mandate clear communication channels for users to report security concerns."
1100
+ ]
1101
+ },
1102
+ "how_to_fix": [
1103
+ "Configure a monitored support email address that users can trust.",
1104
+ "Ensure the support email is prominently displayed in authentication flows and error messages.",
1105
+ "Train support staff to handle security-related inquiries appropriately.",
1106
+ "Create clear guidelines for users on when and how to contact support for security issues."
1107
+ ]
1108
+ },
1109
+ "description": "Email address used to contact your support team.",
1110
+ "docsPath": [
1111
+ "https://auth0.com/docs/get-started/tenant-settings"
1112
+ ],
1113
+ "support_email": "%s is configured as the support email address.",
1114
+ "no_support_email": "There is no support email configured for the tenant.",
1115
+ "severity": "Info",
1116
+ "status": "blue",
1117
+ "severity_message": "Review Tenant Settings > Support Email"
1118
+ },
1119
+ "checkSupportUrl": {
1120
+ "title": "Support URL",
1121
+ "category": "Tenant Settings",
1122
+ "advisory": {
1123
+ "issue": "User Support and Security Risks Without Configured Support Resources",
1124
+ "description": {
1125
+ "what_it_is": "A support URL provides users with access to help documentation, security resources, and guidance when they encounter authentication issues. Without proper support resources, users may make poor security decisions.",
1126
+ "why_its_risky": [
1127
+ "Users experiencing problems may search for unauthorized support resources that could be malicious.",
1128
+ "Lack of official support documentation may lead users to follow insecure advice from untrusted sources.",
1129
+ "Authentication issues may remain unresolved, causing users to disable security features or use workarounds.",
1130
+ "Users may fall victim to fake support sites created by attackers to steal credentials or personal information.",
1131
+ "Security education opportunities are missed when users don't have access to official security guidance."
1132
+ ]
1133
+ },
1134
+ "how_to_fix": [
1135
+ "Configure a support URL that points to comprehensive, trusted documentation.",
1136
+ "Include security best practices and guidance in your support resources.",
1137
+ "Ensure support documentation is easily accessible and regularly updated.",
1138
+ "Provide clear instructions for common authentication scenarios and troubleshooting.",
1139
+ "Consider including security awareness training materials in your support resources."
1140
+ ]
1141
+ },
1142
+ "description": "Link to your company or organization support page.",
1143
+ "docsPath": [
1144
+ "https://auth0.com/docs/get-started/tenant-settings"
1145
+ ],
1146
+ "support_url": "%s configured as the support URL for the tenant.",
1147
+ "no_support_url": "No support URL is configured in the tenant.",
1148
+ "severity": "Info",
1149
+ "status": "blue",
1150
+ "severity_message": "Review Tenant Settings > Support URL"
1151
+ },
1152
+ "checkTenantLoginUrl": {
1153
+ "title": "Tenant Login URI",
1154
+ "category": "Tenant Settings",
1155
+ "advisory": {},
1156
+ "description": "URI that points to a route in your application that starts the OIDC login flow by redirecting to the /authorize endpoint; it should take the form of https://mytenant.org/login. This will only be used in scenarios where Auth0 needs your tenant to start the OIDC login flow. ",
1157
+ "docsPath": [
1158
+ "https://auth0.com/docs/get-started/tenant-settings"
1159
+ ],
1160
+ "default_redirection_uri": "The tenant has the following URLs configured as the Default Login URI %s",
1161
+ "no_default_redirection_uri": "There is no Tenant Login URI configured in the tenant",
1162
+ "invalid_default_redirection_uri": "The tenant is using insecure redirection callback containing (http, localhost) %s",
1163
+ "severity": "Info",
1164
+ "status": "blue",
1165
+ "severity_message": "Review Tenant Settings"
1166
+ },
1167
+ "checkTenantLogoutUrl": {
1168
+ "title": "Tenant Allowed Logout URLs",
1169
+ "category": "Tenant Settings",
1170
+ "advisory": {},
1171
+ "description": "URLs that Auth0 can redirect to after logout when no client_id is specified on the Logout endpoint invocation. Useful as a global list when Single Sign-on (SSO) is enabled.",
1172
+ "docsPath": [
1173
+ "https://auth0.com/docs/get-started/tenant-settings"
1174
+ ],
1175
+ "missing_allowed_logout_urls": "Configure Allowed Logout URLs for the tenant",
1176
+ "invalid_allowed_logout_urls": "Incorrect tenant level logout URL. Reconfigure %s",
1177
+ "severity": "Info",
1178
+ "status": "blue",
1179
+ "severity_message": "Review Tenant Settings > Advanced"
1180
+ },
1181
+ "checkSandboxVersion": {
1182
+ "title": "Extensibility Run Time",
1183
+ "category": "Tenant Settings",
1184
+ "advisory": {
1185
+ "issue": "Security Risks of Outdated Node.js Runtime Versions",
1186
+ "description": {
1187
+ "what_it_is": "Auth0 extensibility features (Rules, Hooks, Custom Database scripts) run on Node.js runtime environments. Using outdated versions exposes your tenant to known security vulnerabilities and limits access to security improvements.",
1188
+ "why_its_risky": [
1189
+ "Outdated Node.js versions contain known security vulnerabilities that could be exploited by malicious code.",
1190
+ "Legacy runtime versions no longer receive security patches or updates, leaving vulnerabilities unaddressed.",
1191
+ "Older versions may not support modern security features and cryptographic standards.",
1192
+ "Third-party packages and dependencies may not be available or secure on legacy runtime versions.",
1193
+ "Compliance requirements may mandate using supported and patched software versions.",
1194
+ "Performance and stability issues in older runtime versions can affect authentication reliability."
1195
+ ]
1196
+ },
1197
+ "how_to_fix": [
1198
+ "Update to the latest supported Node.js runtime version in your Auth0 tenant settings.",
1199
+ "Test all custom database scripts, rules, and hooks thoroughly after runtime updates.",
1200
+ "Review and update any custom code or dependencies that may be incompatible with newer runtime versions.",
1201
+ "Establish a regular schedule for reviewing and updating runtime versions.",
1202
+ "Monitor Auth0 announcements for runtime version updates and migration timelines.",
1203
+ "Consider migrating from legacy extensibility features (Rules/Hooks) to Actions for better security and performance."
1204
+ ]
1205
+ },
1206
+ "description": "We recommend updating this tenant to a recommended version of Node.js to take advantage of security patches and new features.",
1207
+ "docsPath": [
1208
+ "https://auth0.com/docs/get-started/tenant-settings#extensibility"
1209
+ ],
1210
+ "sandbox_version": "We recommend updating to the recommended version of Node.js. The current sandbox version is \"%d\". The version of Node currently in use for Custom Database script if any, will no longer receive security updates or support new packages.",
1211
+ "severity": "High",
1212
+ "status": "red",
1213
+ "severity_message": "This tenant is configured to use an older version of Node.js."
1214
+ },
1215
+ "checkGuardianFactors": {
1216
+ "title": "Multifactors",
1217
+ "category": "Multifactors",
1218
+ "advisory": {
1219
+ "issue": "Account Security Risks Without Multi-Factor Authentication",
1220
+ "description": {
1221
+ "what_it_is": "Multi-factor authentication (MFA) requires users to provide additional verification beyond just a username and password. Without MFA, accounts rely solely on password security, which is increasingly insufficient against modern attacks.",
1222
+ "why_its_risky": [
1223
+ "Password-only authentication is vulnerable to credential stuffing attacks using breached password databases.",
1224
+ "Phishing attacks can easily capture usernames and passwords, but are much less effective against MFA.",
1225
+ "Account takeover attacks are significantly easier when only requiring password authentication.",
1226
+ "Compliance requirements (SOX, HIPAA, PCI-DSS) often mandate MFA for accessing sensitive systems and data.",
1227
+ "Remote work environments increase the risk of compromised credentials being used from untrusted networks.",
1228
+ "Social engineering attacks become more effective when they only need to obtain a single authentication factor."
1229
+ ]
1230
+ },
1231
+ "how_to_fix": [
1232
+ "Enable MFA for all users, prioritizing high-privilege accounts first.",
1233
+ "Consider adaptive MFA that automatically triggers based on risk assessment, minimizing user friction.",
1234
+ "Implement multiple MFA options (authenticator apps, SMS, hardware tokens) to accommodate different user needs.",
1235
+ "Educate users on the importance of MFA and provide clear setup instructions."
1236
+ ]
1237
+ },
1238
+ "description": "Multi-factor authentication (MFA) is a user verification method that requires more than one type of user validation. It prevents attackers with access to a username and password from accessing an account.",
1239
+ "docsPath": [
1240
+ "https://auth0.com/docs/secure/multi-factor-authentication"
1241
+ ],
1242
+ "mfa_factors_not_enabled": "Multifactor Authentication is not enabled for the tenant",
1243
+ "mfa_factors_enabled": "The following authenticators are enabled for tenant, %s",
1244
+ "severity": "Moderate",
1245
+ "status": "yellow",
1246
+ "severity_message": "Enable Multifactor Authentication for tenant"
1247
+ },
1248
+ "checkGuardianPolicy": {
1249
+ "title": "Multifactor Policy",
1250
+ "category": "Multifactor Policy",
1251
+ "advisory": {},
1252
+ "description": "Multi-factor determines when the user is challenged for MFA.",
1253
+ "docsPath": [
1254
+ "https://auth0.com/docs/secure/multi-factor-authentication/customize-mfa"
1255
+ ],
1256
+ "mfa_policy_set_to_never": "The Multifactor Authentication policy is set to 'never'. Check whether MFA is being applied as a post-login action.",
1257
+ "mfa_policy_set": "The current Multifactor Authentication Policy is %s",
1258
+ "severity": "Info",
1259
+ "status": "blue",
1260
+ "severity_message": "Review Multifactor Authentication Policy configuration."
1261
+ },
1262
+ "checkBotDetectionSetting": {
1263
+ "policy_enabled": "Bot Detection enabled for password flows.",
1264
+ "policy_disabled": "Bot Detection is not enabled for password flows.This is a key control against common credential-based attacks.",
1265
+ "passwordless_policy_enabled": "Bot Detection is enabled for passwordless flows.",
1266
+ "passwordless_policy_disabled": "Bot Detection is not enabled for passwordless flows. This is a key control against common credential-based attacks.",
1267
+ "password_reset_policy_enabled": "Bot Detection is enabled for password reset flows.",
1268
+ "password_reset_policy_disabled": "Bot Detection is not enabled for password reset flows. This is a key control against common credential-based attacks.",
1269
+ "allowlistEmpty": "No allowlist is configured, which provides a default level of security.",
1270
+ "allowlistPresent": "The allowlist for bot detection contains the following IPs or users: %s",
1271
+ "title": "Bot Detection",
1272
+ "category": "Attack Protection",
1273
+ "description": "Bot Detection mitigates scripted attacks by detecting when a request is likely coming from a bot. These types of attacks are sometimes called credential stuffing attacks or list validation attacks. Bot Detection provides support against certain attacks and adds very little friction to legitimate users.",
1274
+ "docsPath": [
1275
+ "https://auth0.com/docs/secure/attack-protection/bot-detection",
1276
+ "https://auth0.com/docs/secure/attack-protection/playbooks/bot-detection-playbook"
1277
+ ],
1278
+ "severity": "Info",
1279
+ "status": "blue",
1280
+ "severity_message": "Review Bot Detection Settings",
1281
+ "advisory": {
1282
+ "issue": "Security Advisory: Why You Should Implement Bot Detection in Auth0",
1283
+ "description": {
1284
+ "what_it_is": "Bots are automated scripts designed to interact with web applications in ways that simulate human behavior, but with malicious intent. These bots can perform credential stuffing, brute-force attacks, scraping, spamming, and other forms of abuse. Implementing Bot Detection in Auth0 provides a powerful defense against these threats, helping to maintain the integrity, security, and performance of your system.",
1285
+ "why_its_risky": [
1286
+ "Bots can successfully execute credential stuffing attacks, using stolen username-password pairs to gain unauthorized access to accounts.",
1287
+ "Bots can scrape personal, financial, or proprietary data at scale, leading to potential data breaches.",
1288
+ "Without bot detection, your system could be overwhelmed by automated requests, leading to slow performance or even outages.",
1289
+ "Bot-driven attacks can lead to issues such as spam, fake account creation, or fraud, which may damage your company’s reputation and erode user trust.",
1290
+ "Failing to prevent bot-based attacks could lead to violations of regulatory requirements for data protection, resulting in fines or penalties."
1291
+ ]
1292
+ },
1293
+ "how_to_fix": [
1294
+ "Bots are commonly used to automate the process of guessing passwords or using stolen credential lists to gain unauthorized access. Bot detection helps identify and block these attacks before they can succeed.",
1295
+ "Bots can scrape sensitive data, such as personal information or financial details. By detecting and blocking bot traffic, you prevent the exposure of critical user data.",
1296
+ "Automated bot traffic can overload your application by making repeated requests at high frequencies. Bot detection helps ensure that your application remains responsive for legitimate users.",
1297
+ "Bot-driven actions like account takeover or spam campaigns can damage your brand reputation. Bot detection helps prevent these activities, which can hurt user trust and your organization’s image.",
1298
+ "Bot attacks often lead to account lockouts or delays in user authentication, resulting in poor user experiences. Bot detection ensures smooth access for legitimate users while filtering out malicious traffic.",
1299
+ "Many regulatory frameworks (e.g., GDPR, PCI-DSS) require you to take measures to protect your systems from automated threats. Implementing bot detection aligns with these standards and minimizes the risk of non-compliance."
1300
+ ]
1301
+ }
1302
+ },
1303
+ "checkRules": {
1304
+ "no_enabled_rules": "No legacy rules are enabled in the tenant.",
1305
+ "enabled_rules": "Rule with ID: %s is enabled in the tenant",
1306
+ "title": "Rules",
1307
+ "category": "Rules(Legacy)",
1308
+ "advisory": {},
1309
+ "description": "Rules are being deprecated and must be migrated to Actions",
1310
+ "docsPath": [
1311
+ "https://auth0.com/docs/customize/actions/migrate/migrate-from-rules-to-actions"
1312
+ ],
1313
+ "severity": "Info",
1314
+ "status": "blue",
1315
+ "severity_message": "Migrate %s rule(s) to Actions"
1316
+ },
1317
+ "checkHooks": {
1318
+ "no_enabled_hooks": "No legacy hooks are enabled in the tenant.",
1319
+ "enabled_hooks": "Hook of type: %s is enabled",
1320
+ "title": "Hooks",
1321
+ "category": "Hooks(Legacy)",
1322
+ "advisory": {},
1323
+ "description": "Hooks are being deprecated and must be migrated to Actions",
1324
+ "docsPath": [
1325
+ "https://auth0.com/docs/customize/actions/migrate/migrate-from-hooks-to-actions"
1326
+ ],
1327
+ "severity": "Info",
1328
+ "status": "blue",
1329
+ "severity_message": "Migrate %s hook(s) to Actions"
1330
+ },
1331
+ "checkDependencies": {
1332
+ "title": "Action Dependency Vulnerabilities",
1333
+ "category": "Actions",
1334
+ "advisory": {},
1335
+ "description": "Check the NPM dependencies of the Actions enabled in your tenant",
1336
+ "docsPath": [
1337
+ "https://auth0.com/docs/customize/actions/manage-dependencies"
1338
+ ],
1339
+ "severity": "High",
1340
+ "status": "red",
1341
+ "severity_message": "%s dependency(ies) used by Actions are exposed to critical or high severity vulnerabilities.",
1342
+ "dependency_with_vuln": "The following npm module %s is exposed to high or critical severity vulnerabilities."
1343
+ },
1344
+ "checkActionsRuntime": {
1345
+ "title": "Action Runtime",
1346
+ "category": "Actions",
1347
+ "advisory": {},
1348
+ "description": "Check the Node.js runtime for actions extensibility in the tenant",
1349
+ "docsPath": [
1350
+ "https://auth0.com/docs/troubleshoot/product-lifecycle/past-migrations/migrate-nodejs-16-to-nodejs-18"
1351
+ ],
1352
+ "severity": "High",
1353
+ "status": "red",
1354
+ "old_node_version": "This action is currently using version %s of actions runtime, which is not recommended",
1355
+ "severity_message": "%s action(s) is using an older version of Node.js runtime. Make sure all your actions run in the same runtime to avoid uninteded behaviours."
1356
+ },
1357
+ "checkActionsHardCodedValues": {
1358
+ "title": "Action Hardcoded Artifacts",
1359
+ "category": "Actions",
1360
+ "advisory": {},
1361
+ "description": "Review your Actions for hard coded secrets",
1362
+ "disclaimer": "Please note that while every effort has been made to ensure the accuracy of this validation, not all results may be fully expected or accurate. There is a possibility of false positives, and the results should be interpreted with caution. It is recommended to perform additional checks or manual verification before making any decisions based on the validation outcomes.",
1363
+ "docsPath": [
1364
+ "https://auth0.com/docs/customize/actions/action-coding-guidelines#security-basics"
1365
+ ],
1366
+ "severity": "Info",
1367
+ "status": "blue",
1368
+ "severity_message": "Potential hardcoded credentials, may expose sensitive information.",
1369
+ "hard_coded_value_detected": "Variable name <b>%s</b> at line <b>%d</b> and column <b>%d</b>.",
1370
+ "action_script_title": "Identified potential hardcoded credentials in <b>\"%s\"</b> script at:"
1371
+ },
1372
+ "checkCanonicalDomain": {
1373
+ "title": "Auth0 Domain Check",
1374
+ "category": "Canonical Domain",
1375
+ "advisory": {},
1376
+ "description": "The tenant is using the Auth0 Canonical Domain, when a custom domain is configured.",
1377
+ "docsPath": [
1378
+ "https://auth0.com/docs/customize/custom-domains"
1379
+ ],
1380
+ "severity": "Moderate",
1381
+ "status": "yellow",
1382
+ "canonical_domain_no_logs": "The log search either timed out or returned no results. To search in your own logging platform and set up alerts or detections, you can use the following query: \n<b>%s</b>",
1383
+ "canonical_domain_used": "One or more clients are using the Auth0 Canonical Domain for interactive user authentication, sample query and log_id \n <b>%s</b>",
1384
+ "severity_message": "Auth0 Canonical Domain is being used for end user interactive authentication or/and signup."
1385
+ },
1386
+ "checkNetworkACL": {
1387
+ "title": "Tenant Access Control List (Early Access Capability)",
1388
+ "category": "Attack Protection",
1389
+ "advisory": {},
1390
+ "description": "Tenant Access Control List (ACL) allows you to manage traffic to your Auth0 services with configurable rules. It helps you protect your tenant and conserve your rate limits against potential threats, such as denial-of-service (DoS) attacks, and ensures that only legitimate users access your applications.",
1391
+ "docsPath": [
1392
+ "https://auth0.com/docs/secure/tenant-access-control-list"
1393
+ ],
1394
+ "severity": "Moderate",
1395
+ "status": "yellow",
1396
+ "no_network_acl": "The tenant does not have Tenant Access Control List configured.",
1397
+ "network_acl_inactive": "This ACL %s is currently inactive. Please review the ACL rules periodically.",
1398
+ "severity_message": "Enhance your security posture by configuring Tenant ACL.",
1399
+ "disclaimer": "Tenant Access Control List (ACL) is an Early Access Service and currently available only to customers on an Enterprise plan with the Attack Protection add-on"
1400
+ },
1401
+ "checkEventStreams": {
1402
+ "event_stream_not_configured": "Event Streaming is not configured for the tenant",
1403
+ "event_stream_disabled": "The tenant has configured %s of type %s and is in %s state",
1404
+ "severity": "Info",
1405
+ "status": "blue",
1406
+ "severity_message": "Enable Event Streaming",
1407
+ "title": "Event Streams (Early Access Capability)",
1408
+ "category": "Event Streams",
1409
+ "advisory": {},
1410
+ "description": "Events Streams offer Auth0 customers an API-based method of synchronizing, correlating, or orchestrating changes that occur within Auth0 or 3rd-party identity providers (IdPs) to external apps or 3rd-party services.",
1411
+ "docsPath": [
1412
+ "https://auth0.com/docs/customize/events",
1413
+ "https://auth0.com/docs/customize/events/events-best-practices",
1414
+ "https://auth0.com/docs/customize/events/event-testing-observability-and-failure-recovery"
1415
+ ]
1416
+ }
1417
+ }