In short
- A scanner reports what might be wrong. An automated pentest sends the attack and reports what worked, with the request and the response as proof.
- Broken access control tops the OWASP Top 10:2025, and on Supabase, Firebase or a plain API it is what a machine proves best: open tables, rules that let any signed-in user in, user B reading user A's records.
- It cannot judge whether a refund or coupon flow makes business sense, test your people, or stand in for a human pentest report when an auditor asks for one.
- A pentest is a snapshot. One migration or one new CVE changes the answer, so the automated test should run again on every deploy.
- Choose a tool on proof, safety on a live app, ownership checks, fixes you can apply and retests, before price.
On this page
- What is an automated pentest?
- How an automated pentest works, step by step
- Automated pentest vs vulnerability scanner vs manual pentest
- What an automated pentest finds well on modern web apps
- Check the obvious ones yourself first
- What an automated pentest cannot prove
- Why last quarter's pentest is already out of date
- How to choose an automated pentest tool
- Automated, manual, or both?
- How Keybrum runs an automated pentest
- Questions
- Sources
What is an automated pentest?
An automated pentest is a penetration test run by software: it attacks your live app from the outside, the way a stranger would, without a person driving each step. A good one reports a weakness only when the attack worked, and shows you the request and the response that prove it.
Proof is what separates it from a scanner. NIST defines penetration testing as security testing in which assessors "mimic real-world attacks to identify methods for circumventing the security features of an application, system, or network". A scanner compares what it sees with a list of known problems and reports what might be wrong. A pentest, automated or not, tries the attack and reports what happened.
The label covers a wide range today. Some automated pentest tools are scanners with a new name, others run fixed attack playbooks, and a newer group lets AI agents choose the next step (see AI penetration testing). One question sorts them all: does each finding come with proof?
How an automated pentest works, step by step
On a modern web app (a React or Next.js frontend talking to Supabase, Firebase or an API), a proof-based automated pentest runs in five stages. The penetration testing methodology guide maps the same stages to the published standards.
- 1
Recon: read the app like a browser
It loads your public pages and reads every JavaScript file the browser downloads. That is where a stranger learns the most: the backend URL, the public keys, the table names in calls like
supabase.from('orders'), the API routes, the framework and its version. - 2
Mapping: list what can be attacked
Each table, database function, storage bucket, collection and API route becomes a target, noted as reachable signed out or only with a session.
- 3
Attack: as a stranger, then as two users
Each target is tried with no account, then with a fresh account, then with a second account against records the first one created. Many access control bugs only show when user B asks for user A's data.
- 4
Proof: keep the request that worked
A finding is the exact request and the answer it got, with personal data redacted. A careful tool replays data findings once more before the report and drops any that the app now refuses.
- 5
Fix, then retest
The report says what to change: the policy, the rule, the header, the version. After the fix, the same request runs again and must fail. Then it runs on every deploy, because the next migration can reopen the hole.
Automated pentest vs vulnerability scanner vs manual pentest
Vendors use the three words loosely. This is how they differ in practice. The pentest vs vulnerability scan guide goes deeper on the first two. To pick a scanner, the website vulnerability scanner guide shows what the free ones check and miss.
| Vulnerability scanner | Automated pentest | Manual pentest | |
|---|---|---|---|
| Question it answers | What looks wrong? | What can a stranger actually do? | What can a skilled attacker do with time and context? |
| How it decides | Matches versions, headers and known patterns | Sends the attack and checks the answer | A tester's judgment, step by step |
| What a finding means | A possible weakness, often a false positive | A request that worked, with the response | An attack path a person demonstrated and wrote up |
| Access control between users | Rarely tested | Tested with two accounts | Tested, depth depends on the days booked |
| Business logic | No | Only the patterns it has attacks for | Yes, its main strength |
| How often | Continuously or on a schedule | On a schedule or on every deploy | Usually yearly and after major changes |
| Counts as a pentest for an audit | No | Depends on the auditor | Usually |
NIST notes that application vulnerability scanners "typically have high false positive rates", because they match patterns instead of trying the attack. For a small team, a long list of maybes costs more time than it saves.
What an automated pentest finds well on modern web apps
Apps built with Lovable, Bolt, Replit, v0 or a coding agent tend to break in the same places, and the most common break we see is access control: the backend answers someone it should not. The OWASP Top 10:2025 keeps broken access control at number one and says 100% of the applications tested had some form of it. These are flaws a machine can prove without guessing:
| Flaw | What a stranger gets | What counts as proof |
|---|---|---|
Supabase table with row level security (RLS) off, or a policy that is just true | Every row, often write access too, with the public key from your JavaScript | Rows returned to a signed-out request that carries only the public key |
Firebase rules that allow everyone, or any signed-in user (auth != null) | Read, change or delete the database, sometimes after a quick sign-up | A document read with no account, then with a brand-new account |
| IDOR: user B opens user A's record by changing an id | Other customers' orders, messages, invoices | Account B receives a marker that only account A's test record contains |
Server keys in the bundle: sk_live_, sb_secret_, an OpenAI key | Your Stripe account, your whole database, your AI bill | The key in a named JavaScript file, plus one read-only call showing it is live |
Exposed .env, .git/config or source maps | Secrets and source code | The file's real content, compared with what the app serves for a path that does not exist |
| Stripe webhook that skips signature checks | Fake "payment succeeded" events | The handler accepts an unsigned test event that references no real payment |
| AI endpoint with no session check | Free use of your model, on your bill | A model answers a five-word prompt sent with no account |
| Known framework CVEs, such as the Next.js middleware bypass | Pages and routes behind your login | The protected page served to a signed-out request |
Check the obvious ones yourself first
You do not need a tool for a first pass. Four checks to run on your own app today:
- 1
Search your JavaScript for server keys
Open your live site and the browser's developer tools, then search all loaded scripts (Ctrl+Shift+F in Chrome, Cmd+Option+F on a Mac) for
sk_live_andrk_live_(Stripe secret and restricted keys) andsb_secret_(a Supabase key that skips RLS). Stripe's docs say only publishable keys are safe outside your backend. A legacy Supabase key starts witheyJ: paste it in the Supabase key checker to see whether it is the public one or the service role. - 2
Ask your site for files that should not exist
Request
/.envand/.git/configon your own domain with the commands below, and read the body that comes back. - 3
List the tables with RLS off
In the Supabase SQL editor, run
select tablename from pg_tables where schemaname = 'public' and not rowsecurity;. Each table it returns is readable and writable by any role with a grant on it, which on projects that still grantanonmeans anyone holding your public key. The Supabase RLS guide has the policies to add. On Firebase, read Firebase security rules for theauth != nulltrap. - 4
Open your own data from a second account
Sign up twice. As account A, create something private and copy its URL or id. As account B, open it. If B sees it, you have an IDOR vulnerability.
# Your own domain only. Read the body, not just the status code.
curl -s https://your-app.example/.env | head -c 300
curl -s https://your-app.example/.git/config | head -c 300KEY=value, or a [core] section for the git file, mean the file is really served.What an automated pentest cannot prove
We build one, so here is where it stops.
- Business logic. A coupon that applies twice, a refund on an order that was never paid, a checkout step that can be skipped. Each request looks normal, and only someone who knows your business rules can tell the sequence is wrong. The OWASP Web Security Testing Guide says automating business logic abuse cases "is not possible and remains a manual art".
- What it cannot reach. A tool tests what it can sign into. Admin roles it has no account for, features behind an invite or a paid plan, and flows that need a phone or a card stay untested unless you give it access. A good report lists them under "not tested".
- Your people and your office. NIST names physical security testing and social engineering as non-technical methods a pentest can include, such as getting past locks and badge readers, or calling the help desk posing as a user to get a password reset. No web tool covers them.
- New research. A tool covers the classes of mistakes it has attacks for. A new flaw class, or a long chain of small bugs that only makes sense with context, needs a person.
- A report for an audit. The PCI Security Standards Council's guidance calls penetration testing "essentially a manual endeavor" and says judgment is needed for attack vectors that "typically cannot be identified through automated means". If an auditor or an enterprise customer asks for a pentest report, ask them what they accept before you buy anything.
An empty report means the attacks that ran did not work, on that date. It does not mean nothing else could. A report should say which attacks ran, which failed, and when.
Why last quarter's pentest is already out of date
NIST puts it plainly: an assessment "provides a snapshot of security at a given point in time". For a team that ships every day with a coding agent, a significant change can be one prompt. Two things move under a finished pentest:
- Your own code. A new feature arrives with a migration that creates a table. Supabase's documentation warns that a table in an exposed schema without RLS "is readable and writable by any role with a grant on it". Last month's pentest never saw that table.
- Your dependencies. CVE-2025-29927, published on 21 March 2025, let requests skip authorization checks done in Next.js middleware (CVSS 9.1, fixed in 12.3.5, 13.5.9, 14.2.25 and 15.2.3). CVE-2025-55182, a remote code execution flaw in React Server Components 19.0.0, 19.1.0, 19.1.1 and 19.2.0 that needs no login, was published on 3 December 2025 with a CVSS of 10.0, and CISA added it to its catalog of exploited vulnerabilities on 5 December. An affected app that passed a pentest on 1 December faced an actively exploited flaw four days later, without a line of its own code changing.
Continuous penetration testing answers both: the attacks run again on every deploy, and again when the tool adds an attack for a new CVE. It does not replace a deep manual test. It covers the months between two of them.
How to choose an automated pentest tool
Ask for a sample report first. Our pentest report sample shows what a credible finding looks like. Then check these points:
- Proof for every finding: the request, the response and the account it ran as. A severity score with no request behind it is a maybe.
- Two-account testing: access control tried signed out, signed in, and as a second user against the first user's data.
- Safe on a live app: reads by default; any write rolled back or made on a test record the tool creates and then deletes; no denial-of-service traffic; risky probes only when you opt in.
- Ownership checks: the tool refuses to attack an address until you prove it is yours. If it attacks any URL you paste, it will attack yours for anyone who asks.
- CVEs proven by behaviour: a version number in a header is a hint. Proof is the vulnerable behaviour, shown without a destructive payload.
- A "not tested" list: what it could not reach, and why.
- Fixes you can apply: the policy, the rule or the config line, in a form your coding agent can read.
- Retests included: after the fix, on every deploy, and when the attack library grows.
- Care with your data: counts and redacted samples in the report, never a dump of your users.
Price comes after these. A cheap tool that reports maybes costs you the hours to check each one. The penetration testing cost guide explains what drives the price of manual and automated tests.
Automated, manual, or both?
For most teams shipping a web app on Supabase, Firebase or their own API, the order is: close the obvious leaks before launch, run an automated pentest on every deploy, then buy a manual test when someone asks for one.
- Automated alone is a fair start before launch, when nobody has asked you for a pentest report yet.
- Add a manual pentest when a customer, an investor or an auditor asks for one, when money moves through credits or payouts, or when your roles and admin tools go beyond what a tool can model.
- Keep the automated test running afterwards: it tells you whether the fixes stayed fixed.
The guide to pentests for startups walks through that sequence stage by stage, and web application penetration testing covers what a full test of a modern stack includes.
How Keybrum runs an automated pentest
Keybrum is the automated pentest we build for apps made with Lovable, Bolt, Replit, v0, Cursor, Claude Code and Base44. Its library holds more than 100 attacks: Supabase and Firebase access rules, leaked secrets in the bundle, IDOR across two accounts, unprotected AI endpoints, unsigned Stripe webhooks, exposed .env files, security headers, and Next.js and React CVEs.
It only attacks an app after its owner proves ownership, and it proves a CVE by its behaviour, never by guessing from a version number. Your coding agent (Cursor, Claude Code) reads each finding, with its proof and its fix, through Keybrum's MCP server. A one-time report costs €49. Plans, from €29 a month excluding VAT, attack every deploy, keep retests open and add a public trust page that shows what was tested and when.
Questions
What is the difference between an automated pentest and a vulnerability scan?
A vulnerability scan compares your app with known patterns, such as versions and headers, and reports what might be wrong. An automated pentest sends the attack and reports only what worked, with the request and response as proof. Many products sold as automated pentest tools are scanners, so ask for a sample finding.
Can automated penetration testing replace a manual pentest?
Not entirely. It covers known classes of flaws, such as open tables, leaked keys, IDOR and known CVEs, on every deploy, which a yearly manual test cannot do. It cannot judge business logic, test your people, or produce the human report an auditor or enterprise customer may require.
What is continuous penetration testing?
It means running the same attacks again on every deploy and whenever a new attack is added, instead of once a year. NIST describes any assessment as a snapshot of one point in time; continuous testing keeps that snapshot current, next to a periodic manual test.
Are automated pentest tools safe to run on a live app?
They should be, but check before you point one at production. A tool built for live apps reads by default, rolls back or cleans up any write, sends no denial-of-service traffic, and refuses targets you have not proven you own. Ask the vendor how each attack stays safe.
How much does an automated pentest cost?
It depends on scope and on whether retests are included. Keybrum charges €49 for a one-time report on one app, and plans from €29 a month (excluding VAT) attack every deploy. The penetration testing cost guide explains what drives the price of manual tests.
Is pentest automation the same as AI pentesting?
Not quite. Pentest automation runs attacks without a person driving each step, while AI pentesting uses a language model to choose steps or read code, and many tools now mix both. What matters is whether each finding is proven by a real request. See AI penetration testing.
Sources
- 1.SP 800-115, Technical Guide to Information Security Testing and Assessment, NIST
- 2.Information Supplement: Penetration Testing Guidance, PCI Security Standards Council
- 3.Web Security Testing Guide: Introduction to Business Logic, OWASP
- 4.A01:2025 Broken Access Control, OWASP Top 10:2025
- 5.Row Level Security, Supabase Docs
- 6.API keys, Supabase Docs
- 7.Avoid insecure rules, Firebase Docs
- 8.API keys, Stripe Docs
- 9.CVE-2025-29927, NIST National Vulnerability Database
- 10.CVE-2025-55182, NIST National Vulnerability Database
- 11.Known Exploited Vulnerabilities Catalog, CISA
- 12.Statement on CVE-2025-48757, Matt Palmer
- 13.CVE-2025-48757, NIST National Vulnerability Database