# Weak Password Recovery Mechanism for Forgotten Password (CWE-640) The product contains a mechanism for users to recover or change their passwords without knowing the original password, but the mechanism is weak. **Stack:** JavaScript - Prevalence: Élevée Fréquemment exploitée - Impact: Élevé 3 règles de sévérité élevée - Prevention: Documentée 3 exemples de correctifs **OWASP:** Identification and Authentication Failures (A07:2021-Identification and Authentication Failures) - #7 ## Description Weak password recovery mechanisms can be exploited to take over user accounts. Common issues include predictable reset tokens, security questions with easily guessable answers, or lack of verification. ## Prevention Stratégies de prévention pour Weak Password Recovery basées sur 1 règles de détection Shoulder. ### JavaScript Use crypto.randomBytes() instead of Math.random() for security tokens ## Warning Signs - [HIGH] predictable random number generation (Math ## Consequences - Obtenir des privilèges - Contourner le mécanisme de protection ## Mitigations - Utilisez des jetons forts et aléatoires pour les liens de réinitialisation de mot de passe - Mettez en place une expiration des jetons (par ex. 1 heure) - Exigez une vérification supplémentaire par e-mail ou SMS - N'exposez jamais le jeton de réinitialisation dans des URL susceptibles d'être journalisées ## Detection - Total rules: 3 - Languages: go, javascript, typescript, python ## Rules by Language ### Javascript (1 rules) - **Weak Password Reset Token** [HIGH]: Detects predictable random number generation (Math.random) used for password reset tokens. - Remediation: Use cryptographically secure random: ```javascript const crypto = require('crypto'); const resetToken = crypto.randomBytes(32).toString('hex'); ``` Learn more: https://shoulder.dev/learn/javascript/cwe-640/weak-password-reset-token ### Typescript (1 rules) - **Weak Password Reset Token** [HIGH]: Detects predictable random number generation (Math.random) used for password reset tokens. - Remediation: Use cryptographically secure random: ```javascript const crypto = require('crypto'); const resetToken = crypto.randomBytes(32).toString('hex'); ``` Learn more: https://shoulder.dev/learn/javascript/cwe-640/weak-password-reset-token