I automated data breach response - changing 50 passwords in 30 minutes instead of 8 hours

I automated data breach response - changing 50 passwords in 30 minutes instead of 8 hours

Source: Dev.to

The math that made me automate this ## The 72-hour window ## How I automated password rotation ## Priority system for breach response ## Handling the edge cases ## The results ## Why local execution matters ## The tool I built ## Your breach response checklist Last month I got the email everyone dreads: "Your account may have been compromised in a data breach." I checked. Same password on 47 other sites. Manually changing 47 passwords takes 4-8 hours. I did it in 30 minutes. Here's how. Each manual password change: ~2.5 minutes per site. Times 50 sites. You see the problem. Security researchers call it the "golden window" - the 72 hours after breach disclosure when: After 72 hours, your leaked password is being tested against thousands of sites by automated credential stuffing tools. I built an AI agent using browser-use (89% benchmark score, open source). The key security insight: the AI navigates the UI, but credentials are injected locally. The LLM never sees your actual passwords. Not all accounts are equal. Here's how I prioritize: P0 accounts first. Always. 2FA prompts: Agent pauses, you complete 2FA, agent continues. CAPTCHAs: Same pattern - agent pauses for human solve, then continues. Site-specific password rules: Agent adapts generation: Anti-bot protection: Use your real Chrome profile with cookies/history. Success rate jumps from 60% to 90%. Tested on 100+ sites: Time for 50 accounts: 32 minutes (with ~15 2FA prompts) Every cloud-based automation tool (Operator, Claude CUA) sends screenshots to external servers. For password changes, that means: For breach response, I want zero data leaving my machine. I packaged this into a Mac app: thepassword.app Free tier: 5 passwords/month. Unlimited: $2.99/month. Have you automated any part of your security workflow? What's your breach response process look like? Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse COMMAND_BLOCK: from browser_use import Agent async def rotate_password(site: str, old_pass: str, new_pass: str): agent = Agent( task=f""" Go to {site} Navigate to account settings Find password change section Call enter_current_password() for old password field Call enter_new_password() for new password fields Submit and verify success """, llm_model="gpt-4o" ) # Credentials injected locally - AI never sees actual passwords result = await agent.run( sensitive_data={ "current_password": old_pass, "new_password": new_pass } ) return result Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: from browser_use import Agent async def rotate_password(site: str, old_pass: str, new_pass: str): agent = Agent( task=f""" Go to {site} Navigate to account settings Find password change section Call enter_current_password() for old password field Call enter_new_password() for new password fields Submit and verify success """, llm_model="gpt-4o" ) # Credentials injected locally - AI never sees actual passwords result = await agent.run( sensitive_data={ "current_password": old_pass, "new_password": new_pass } ) return result COMMAND_BLOCK: from browser_use import Agent async def rotate_password(site: str, old_pass: str, new_pass: str): agent = Agent( task=f""" Go to {site} Navigate to account settings Find password change section Call enter_current_password() for old password field Call enter_new_password() for new password fields Submit and verify success """, llm_model="gpt-4o" ) # Credentials injected locally - AI never sees actual passwords result = await agent.run( sensitive_data={ "current_password": old_pass, "new_password": new_pass } ) return result CODE_BLOCK: Agent paused: MFA required for chase.com Please complete verification in browser window. [Continue] [Skip] Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: Agent paused: MFA required for chase.com Please complete verification in browser window. [Continue] [Skip] CODE_BLOCK: Agent paused: MFA required for chase.com Please complete verification in browser window. [Continue] [Skip] COMMAND_BLOCK: # Site requires 8-16 chars, no symbols password = generate( min_length=8, max_length=16, symbols=False # Adapted for this site ) Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: # Site requires 8-16 chars, no symbols password = generate( min_length=8, max_length=16, symbols=False # Adapted for this site ) COMMAND_BLOCK: # Site requires 8-16 chars, no symbols password = generate( min_length=8, max_length=16, symbols=False # Adapted for this site ) - Open site, log in (30 sec) - Navigate to settings (20 sec) - Find password section (15 sec) - Generate new password (10 sec) - Enter old + new password (20 sec) - Submit, verify (15 sec) - Update password manager (20 sec) - Credentials haven't hit dark web marketplaces yet - Attackers are still processing the data - You can get ahead of the damage - 89% success rate (automated fully) - 8% required human intervention (CAPTCHAs, unusual flows) - 3% failed (heavy anti-bot, manual only) - Your bank login screen → OpenAI's servers - Your credentials being typed → visible to provider - Every site you use → logged somewhere - Import CSV from any password manager - AI rotates passwords (visible browser, you watch it work) - Export new passwords back to your manager - Everything runs locally - [ ] Identify what was breached - [ ] Enable login alerts on bank + email - [ ] Check password reuse - [ ] Change P0 accounts (financial, email) - [ ] Enable 2FA everywhere - [ ] Review recent account activity - [ ] Rotate all reused passwords - [ ] Update password manager - [ ] Set up credit monitoring if needed