For bespoke, no-CMS builds

Custom web app security audit

If your site or app wasn't built on WordPress, Shopify, or any other off-the-shelf platform, there's no plugin database, no theme scanner, and no vulnerability feed to check it against — every piece of its logic is one-off and has to be tested by hand.

A custom web app security audit is manual security testing of a bespoke application — one built by an agency, a freelance developer, or an in-house team, with no off-the-shelf CMS or plugin ecosystem underneath it. Because there’s no plugin/theme vulnerability database to scan against, an automated tool has almost nothing to check your app’s actual logic — its auth flow, session handling, file uploads, admin panel, and hand-built API integrations — against. That logic was written once, for this app, and has to be reasoned through by a human the way an attacker would. Bug Circuit’s Circuit tier ($49) does exactly this: a manual audit with a written report showing severity, evidence, and exact fix steps for each finding.

What makes a custom-built app a different audit surface

There’s no plugin database to check against

On WordPress, a scanner can fingerprint every installed plugin and theme and cross-reference version numbers against a public vulnerability database. On Shopify, the app ecosystem and platform-level protections are largely fixed and well understood. A custom-built app has none of that surface. The login form, the password reset flow, the way sessions are issued, the admin panel, the endpoints your frontend calls — all of it was written once, specifically for this app. None of it exists anywhere else in exactly this form, so no vulnerability database has an entry for it.

Everything bespoke is a testing surface: auth, sessions, uploads, admin panels, integrations

When every meaningful piece of logic is custom, every meaningful piece of logic is also unverified until someone actually tries to break it — how login attempts are rate-limited (or aren’t), whether a session token can be reused after logout, whether the password reset endpoint reveals which emails have accounts, whether file uploads are checked for type and size on the server or just in the browser, and whether the custom admin panel enforces access control on the backend or just hides menu items in the UI.

It also includes every third-party integration someone hand-wired in — a payment processor, a CRM, an email service, a webhook receiver. Each one was built under a deadline by someone making judgment calls about how much validation to add, and those judgment calls are exactly what only surfaces when someone tries to abuse the integration directly.

Why manual testing matters more here, not less

No one is disclosing vulnerabilities in your one-off code

WordPress plugins get found and reported constantly, precisely because tens of thousands of sites run the same plugin. That entire mechanism depends on many sites sharing the same code. Your custom app doesn’t have that safety net — the absence of a public report about your app’s security doesn’t mean it’s clean, it means nobody outside your team has looked.

Automated scanners are built for known patterns; custom logic bugs aren’t a pattern

The bugs that actually breach custom apps are usually logic flaws: changing an order ID in a URL and pulling up someone else’s invoice, hitting an internal-only API endpoint directly, or exploiting a race condition in a custom checkout flow. Finding those requires someone to actually think like an attacker about your specific app — which is what a manual audit does and an automated scan structurally cannot.

What a custom web app security audit actually covers

A Bug Circuit audit of a custom-built app works through the app’s actual functionality rather than checking it against a list of known issues:

  • Authentication and session handling — password reset token generation and expiry, account enumeration, session fixation, MFA implementation, hand-rolled JWT behavior under manipulation.
  • Authorization and business logic — whether one account can reach another’s data by changing an identifier (IDOR), privilege escalation between roles, and whether the admin panel’s access control is enforced server-side.
  • File uploads and hand-built integrations — server-side validation of file type/size, whether uploads can write outside their intended storage location, and how each integration handles malformed input.

Who this is for, and how to get one scoped right

Agencies, freelance builds, and in-house products

This applies whether your app was built by an agency that’s since moved on, a freelance developer working solo, or a team you employ directly with no particular framework standardized across the company. If the app is a startup’s actual product — the thing you’re selling or fielding security questionnaires about — security audit for startups covers that business context; this page covers what makes the codebase itself a different kind of test.

Scoping and cost

Cost tracks surface area, not lines of code: the number of distinct auth flows, user roles, upload points, and third-party integrations drives how long a proper manual audit takes. See how much a penetration test costs for the full breakdown. Every engagement starts the same way regardless of tier: verifying you own the domain and signing a recorded Authorization to Test.

Common questions

How much does a custom web app security audit cost?
It depends on surface area, not lines of code — how many user roles the app has, how many distinct auth flows (signup, login, password reset, SSO, MFA), how many file upload points, and how many hand-built integrations it talks to. A small custom app with one user role and a handful of endpoints costs less to test properly than a multi-tenant SaaS product with five permission tiers, even with less total code. Bug Circuit’s Circuit tier starts at $49 for a one-time manual audit.
Are there good custom web app security audit checklists on GitHub I can use myself?
You’ll find plenty of OWASP-style checklists on GitHub, and they’re a reasonable way to structure your own thinking about what categories of bugs exist. What they can’t do is tell you whether your specific password-reset endpoint leaks whether an email address has an account, or whether your specific admin panel’s role check has a gap between what the UI hides and what the API actually enforces.
People on Reddit say running an automated scanner is enough for a small custom app — is that true?
For a WordPress site with fifteen plugins, an automated scanner is genuinely useful because it’s checking known code against a known vulnerability database. For a custom app, there is no known-vulnerability database to check against — every scanner finding on a bespoke codebase tends to be generic (missing security headers, an outdated JS library) rather than the logic bugs that actually get custom apps breached, like an IDOR that lets user A see user B’s data.
How is a custom web app audit different from a WordPress or Shopify security audit?
On WordPress or Shopify, a meaningful chunk of the attack surface is known: which plugins and themes are installed, and whether any have a disclosed CVE — and a community of researchers is actively finding and reporting those bugs. A custom-built app doesn’t have that. Every piece of logic in a custom app is unique to that app, which is exactly why it has to be tested by hand rather than checked against a list.
Does this apply if the custom app is a startup’s core product?
Yes — a lot of what we test under a custom web app audit is the same product a startup is trying to sell or raise on. If that’s your situation, our security audit for startups covers the additional business-context angles; this page is about what makes the custom-built codebase itself a different testing surface.
What’s the difference between an automated scan and a manual audit for a custom app?
An automated scan pattern-matches your app against known signatures. A manual audit has a person walk through your app’s actual logic: creating accounts under different roles and trying to access data they shouldn’t, tampering with parameters on file upload endpoints, checking whether your custom admin panel’s access control is enforced server-side or just hidden in the UI.
What do we actually get at the end of a custom web app security audit?
A written report listing every finding with its severity, the evidence, and exact steps to fix it — not a generic checklist and not a risk score with no detail. If you want the team to also fix the high and critical findings with you, retest afterward, and monitor for three months, that’s the Signal tier.
Do you need our source code to audit a custom-built app?
Not necessarily. Most of the testing is done the way an attacker would approach it — from outside the app, against the running site. Source access can speed up testing complex custom logic and isn’t required to start. Every engagement starts with verifying you own the domain and signing a recorded Authorization to Test.

Keep reading

Your app is custom-built. Its security audit should be too.

Get a manual audit built around your app’s actual code, not a plugin scan that has nothing to scan.

Passive recon only. No login, and no impact on your site. Deeper testing needs domain verification.

Ready for the full manual audit? See transparent pricing →