Default admin credentials left in place
What it looks like
// prisma/seed.ts
await db.users.create({
data: {
email: 'admin@example.com',
password: await hash('admin123'),
role: 'admin',
},
});
// also ran against the production databaseWhat happens
Anyone who reads the code or guesses a common placeholder can sign in as the administrator.
Where it shows up
Descriptive, not a verdict: builders and stacks whose defaults make this reachable, or that a public incident names. Each hub states the tool's own security features.
Check it yourself
Uses your builder's dashboard and your browser. No tools to install.
- In the builder's code view, search the whole project for admin@, password, seed and demo.
- Try signing in to the live app with any email and password pair you find, and with common placeholders such as admin and password.
- In Supabase, open Authentication, then Users; in Firebase, open Authentication. Look for accounts you did not create yourself.
- Ask whoever built or deployed the app whether the seed script has ever run against production.
A bad result is a successful sign-in with a password that appears in the code, or an admin account nobody recognises.
What we check
We test the sign-in and every admin endpoint with credentials found in the repository, seed files and example environment files, plus a short list of common defaults. We also check whether admin accounts have multi-factor authentication, and the report lists each account that accepted a known value.
Fix direction
Remove seeded admin accounts from production, give real administrators individual accounts with strong passwords and multi-factor authentication, and keep seed scripts pointed at development only. OWASP lists default accounts with unchanged passwords under Security Misconfiguration.
Mechanism documented in: A05:2021 Security Misconfiguration (verified 2026-09-21); Authentication Cheat Sheet (verified 2026-09-21).
Covered by
Pre-launch check ($490, 48 hours) and Security sweep ($290, 24 hours)
Both include a re-check after your fixes.
Related patterns
- Admin routes without any login checkLogin and permissionsCritical
A stranger who types /admin or /api/admin into the address bar can see or change everything the owner can.
- Secrets committed to the code repositorySecrets and keysCritical
Everyone who can see the repository, now or later, holds working keys to the database, payment account and model provider, and the keys stay in history after the file is deleted.
- Role chosen by the client at signupLogin and permissionsCritical
A visitor who edits the signup request, or updates their own profile, can make themselves an admin.
- Every change goes straight to productionDeploy and configMedium
A broken build, a bad migration or an agent's misjudged edit reaches real users and real data first, with no place where it could have been caught.
Questions
how do i find default passwords in my ai generated app
Search the project for admin@, password, seed and demo in the builder's code view, and read any file named seed. Then open your auth provider's user list and look for accounts you did not create. Try each pair you find against the live sign-in; a success means the account is live and the password is public.
is a seeded admin account a security problem
In development, no. In production, yes: the email and password are written in the code, and OWASP's Top Ten list names default accounts with unchanged passwords as a security misconfiguration. Delete the account from production or change its password and add multi-factor authentication, then make sure the seed script runs only against development.
what to do with the admin account the ai created
Check whether it exists in the production user list, then either delete it or reset its password to something unique and turn on multi-factor authentication. OWASP's authentication guidance also warns against letting accounts meant for internal use sign in through the public interface. Give each real administrator their own account so access can be removed per person.
Back to the catalogue, or run the self-check for your stack.