Drupal Identification and Authentication Failures Standards (OWASP A07:2021)
Source: Ivan Grynenko - drupal-authentication-failures.mdc Author: Ivan Grynenko License: MIT OWASP Reference: OWASP A07:2021
Full Documentation
View online: https://github.com/ivangrynenko/cursorrules/blob/main/.cursor/rules/drupal-authentication-failures.mdc
This security pattern covers:
- OWASP Top 10 classification
- Common vulnerabilities and anti-patterns
- Enforcement checks for code review
- Secure coding examples
- Best practices and remediation
Raw Content
---
description: Detect and prevent identification and authentication failures in Drupal as defined in OWASP Top 10:2021-A07
globs: *.php, *.inc, *.module, *.install, *.info.yml, *.theme
alwaysApply: false
---
# Drupal Identification and Authentication Failures Standards (OWASP A07:2021)
This rule enforces security best practices to prevent identification and authentication failures in Drupal applications, as defined in OWASP Top 10:2021-A07.
## Rule Details
- **Name:** drupal_authentication_failures
- **Description:** Detect and prevent identification and authentication failures in Drupal as defined in OWASP Top 10:2021-A07
## Filters
- file extension pattern: `\\.(php|inc|module|install|theme|yml)$`
- file path pattern: `.*`
## Enforcement Checks
- Conditions:
- pattern `UserPasswordConstraint|PasswordPolicy|user\\.settings\\.yml` – Ensure strong password policies are configured to require complexity, length, and prevent common passwords.
- Pattern 1: Weak or missing password policies
- pattern `(authenticate|login|auth).*function[^}]*return\\s+(TRUE|true|1)\\s*;` – Custom authentication functions should implement proper validation and not return TRUE without checks.
- Pattern 2: Custom authentication without proper validation
- pattern `==\\s*\\$password|===\\s*\\$password|strcmp\\(|password_verify\\([^,]+,[^,]+\\$plainTextPassword` – Avoid direct password comparison. Use Drupal's built-in password verification services.
- Pattern 3: Improper password comparison
- pattern `(username|user|pass|password|pwd)\\s*=\\s*['\"][^'\"]+['\"]` – Hardcoded credentials detected. Store credentials securely outside of code.
- Pattern 4: Credentials in code
- pattern `drupal_get_token\\(|form_token|\\$form\\[['\"]#token['\"]\\]\\s*=|drupal_valid_token\\(` – Ensure proper CSRF protection is implemented for all authenticated actions.
- Pattern 5: Missing or weak CSRF protection
- pattern `setcookie\\(|session_regenerate_id\\(false\\)|session_regenerate_id\\([^\\)]*` – Use Drupal's session management. If custom code is required, ensure secure session handling practices.
- Pattern 6: Insecure session management
- pattern `user\\.flood\\.yml|flood_control|UserFloodControl|user_failed_login_` – Ensure proper account lockout and flood control mechanisms are configured to prevent brute force attacks.
- Pattern 7: Missing account lockout protection
- pattern `user_pass_reset|password_reset|reset.*token` – Verify password reset functionality uses secure tokens with proper expiration and validation.
- Pattern 8: Insecure password reset implementation
- pattern `tfa|two_factor|multi_factor|2fa` – Consider implementing multi-factor authentication for sensitive operations or user roles.
- Pattern 9: Lack of multi-factor authentication
- pattern `\\$user->name\\s*=\\s*['\"]admin['\"]|\\$name\\s*=\\s*['\"]admin['\"]|->values\\(['\"](mdc:name|mail)['\"]\\)\\s*->\\s*set\\(['\"][^\\'\"]+['\"]\\)` – Avoid creating default administrator accounts or test users in production code.
- Pattern 10: Default or test accounts
## Suggestions
- Guidance:
**Drupal Authentication Security Best Practices:**
1. **Password Policies:**
- Use Drupal's Password Policy module for enforcing strong passwords
- Configure minimum password length (12+ characters recommended)
- Require complexity (uppercase, lowercase, numbers, special characters)
- Implement password rotation for sensitive roles
- Check passwords against known breached password databases
2. **Authentication Infrastructure:**
- Use Drupal's core authentication mechanisms rather than custom solutions
- Implement proper account lockout after failed login attempts
- Consider multi-factor authentication (TFA module) for privileged accounts
- Implement session timeout for inactivity
- Use HTTPS for all authentication traffic
3. **Session Management:**
- Use Drupal's session management system rather than PHP's session functions
- Configure secure session cookie settings in settings.php
- Implement proper session regeneration on privilege changes
- Consider using the Session Limit module to restrict concurrent sessions
- Properly destroy sessions on logout
4. **Account Management:**
- Implement proper account provisioning and deprovisioning processes
- Use email verification for new account registration
- Implement secure password reset mechanisms with limited-time tokens
- Apply the principle of least privilege for user roles
- Regularly audit user accounts and permissions
5. **Authentication Hardening:**
- Monitor for authentication failures and suspicious patterns
- Implement IP-based and username-based flood control
- Log authentication events for security monitoring
- Consider CAPTCHA or reCAPTCHA for login forms
- Use OAuth or SAML for single sign-on where appropriate
## Validation Checks
- Conditions:
- pattern `password_verify\\(|UserPassword|\\\\Drupal::service\\(['\"]password['\"]\\)` – Using Drupal's password services correctly.
- Check 1: Proper password handling
- pattern `\\$form\\[['\"]#token['\"]\\]\\s*=\\s*['\"][^'\"]+['\"]` – Form includes CSRF protection token.
- Check 2: CSRF token implementation
- pattern `\\$request->getSession\\(\\)|\\\\Drupal::service\\(['\"]session['\"]\\)` – Using Drupal's session management services.
- Check 3: Proper session management
- pattern `user\\.flood\\.yml|flood|user_login_final_validate` – Implementing user flood protection.
- Check 4: User flood control
## Metadata
- Priority: high
- Version: 1.1
- Tags: security, drupal, authentication, identification, owasp, language:php, framework:drupal, category:security, subcategory:authentication, standard:owasp-top10, risk:a07-authentication-failures
## References
- https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/
- https://www.drupal.org/docs/security-in-drupal/drupal-security-best-practices
- https://www.drupal.org/project/tfa
- https://www.drupal.org/project/password_policy
Last verified: 2025-10-31