In April 2023, an attacker began feeding stolen credentials from previous breaches into 23andMe's login page. The credentials came from other companies' breaches — LinkedIn, Adobe, Dropbox. Users had reused their passwords. 23andMe didn't require MFA. The password minimum was eight characters. There was no credential stuffing detection. The attack ran for five months.
14,000 accounts were directly compromised. But 6.9 million profiles were exposed. What turned a credential stuffing attack into a mass data breach?
Express.js login endpoint. The password check works. The session is created correctly. One missing control makes this endpoint a credential stuffing target. Click the line.
No single fix would have prevented the entire breach. But any one of these would have dramatically reduced the blast radius.
Enforce MFA — not optional. Check passwords against breach databases at registration. Assume every password in your database has been compromised elsewhere.
A credential stuffing attack tests 10 million stolen credential pairs against your login endpoint. The typical success rate is 0.1%. How many accounts are compromised?
After the breach, 23andMe argued that users were at fault for reusing passwords. Who bears the security responsibility?
OWASP recommends treating passwords as a sole authentication factor as fundamentally insufficient. What alternative does NIST 800-63 now endorse?
Passwords are shared secrets that have already been shared. Your authentication layer must assume every password in your database has been compromised somewhere else — and still hold.
A07 · Authentication FailuresPassword1! → Password2!). Use breached password checking (Have I Been Pwned API) to reject known-compromised passwords at registration and change time. Note: an 8-character minimum alone isn't the failure — NIST 800-63B accepts 8 characters as a floor. The real failures at 23andMe were no MFA, no breach-corpus check, and no stuffing detection. Length policy is the least important layer.Five things you can verify right now.