Skip to main content

Security audit · Web apps / SaaS

Web application security audit & vulnerability assessment

Authentication, authorization, tenant isolation, secrets, payments and cloud configuration — verified by reading the source code and the configuration. Beyond what a scanner catches, it covers the design gap no tool can judge: who is allowed to touch which data. Every finding comes with a prioritized fix plan.

Pricing: Spot review From $680 / Standard audit From $1,900 / Embedded fix From $4,800

We never say “completely secure.” An audit finds and ranks the known high-severity risks inside an agreed scope. What is out of scope, and the risk that remains, is written into the report.

Scope

What gets reviewed

Next.js / Supabase, and also web apps built with Rails, Laravel, Django, Go and others, plus AWS / GCP / Vercel configuration. Scope and depth are agreed in the first call and put in writing.

Authentication & authorization

  • Authentication (login, sessions, token handling)
  • Authorization and ownership checks (IDOR / BOLA — change an ID, see someone else’s data)
  • Multi-tenant isolation (no crossing into another customer’s data)
  • Admin features and privilege-escalation paths

Input & data handling

  • Input validation (SQL injection, XSS, SSRF, CSRF)
  • File uploads (storage permissions, spoofed types, public exposure)
  • Payments (webhook verification, double processing, tampered amounts)
  • Business logic (abusing quantities, prices, state transitions)

Operations & configuration

  • Secrets (where API keys and service-role keys live, and whether they leak)
  • Rate limiting and security headers (CSP and others)
  • Known vulnerabilities in dependencies
  • Logs (personal data or secrets written out) and deployment / cloud configuration (AWS / GCP / Vercel)

Methods

What a tool can do, and what needs a human

Tools find a lot, fast. But “may this user see this record?” cannot be judged without knowing the business rules. An audit uses both, for different jobs.

Architecture review
What can be automated: Help inventorying the components, no more
What needs human judgment: Whether trust boundaries, the authorization model and tenant boundaries match the business rules
Source code review
What can be automated: Pattern detection: dangerous APIs, hard-coded secrets
What needs human judgment: Whether every path has an ownership check, and which ones do not
SAST (static analysis)
What can be automated: Data-flow analysis lists injection candidates
What needs human judgment: Removing false positives and confirming reachability
DAST (dynamic testing)
What can be automated: Scanning the running app for known patterns
What needs human judgment: Deciding how far it is safe to go, and checking screens behind login
Configuration review
What can be automated: Extracting settings and comparing them with known baselines
What needs human judgment: Whether each exception is justified, and how far permissions can be reduced
Manual testing
What can be automated: Barely
What needs human judgment: Crossing users and tenants, abusing business logic
Retest
What can be automated: Regression tests and CI gates lock the fix in
What needs human judgment: Confirming the fix closed the root cause

Timing

When an audit is due

  • Before a beta launch

    Even invite-only: once outsiders can log in, an authorization gap is a real incident.

  • Before real customer data goes in

    Fix it while the data is still test data, and there is nothing leaked to chase.

  • Before adding file uploads

    Storage permissions and public exposure are expensive to change later — URLs and existing files have to move.

  • Before adding payments

    Webhook verification and double-processing protection belong before the first payment, not after.

  • Before an enterprise contract

    So the security questionnaire can be answered with evidence.

  • After a major feature

    New roles or a new tenant structure invalidate the assumptions of the last audit.

Specialties

Audits by technology

If your stack is settled, the page for that stack is more specific about what gets reviewed.

  • Next.js / Supabase

    RLS (row-level security), service_role key paths and tenant isolation, closed in design and code. A specialist audit built on a 1,000-repository field study.

    • Not whether RLS is on, but whether its conditions are right
    • service_role key and SECURITY DEFINER function paths
    • Multi-tenant crossing (can one company see another’s data?)
    • Storage policies and who can see the files

    See the Next.js / Supabase audit

  • Apps built with AI

    For owners of apps built with Claude Code, Cursor, Lovable and the like — no need to read the code.

    See the AI-built app review

  • Claude Code in an organization

    Permissions, sandboxing, MCP, hooks and managed settings, designed so a team can use it safely.

    See Claude Code governance

What it is not

  • No guarantee of “complete security.” The target is the known high-severity risk inside the agreed scope.
  • No destructive testing against production (load tests, data changes) without a written agreement.
  • Not an ISO 27001 or SOC 2 certification. It produces the technical evidence a questionnaire or auditor asks for.

Who

Who reviews your app

Audits are taken on by Tomoda Hinata, a freelance full-stack engineer. Judge by the published research, tools and delivered work below, not by a title.

About me

  • A field study of Supabase RLS (1,000 public repositories)

    A static analysis of public repositories: 9.2% (91) of the 994 that ship RLS had a policy that checks sign-in but does not narrow rows to their owner — published after checking all 235 such policies by hand.

    Read the study

  • Aegis, an open-source security toolkit

    Scanners and defensive building blocks for Next.js / Supabase, published under the MIT license. Part of the automated detection used in an audit is something anyone can run locally.

    See Aegis

  • A METI Minister's Award–winning B2B SaaS (lumber distribution)

    Solo

    All 221 APIs with 0 missing-authorization findings, proven across 4 rounds of self-conducted security review (static review → live testing → penetration testing), with every critical finding, including cross-tenant personal-data exposure, fixed.

    Read the case study

  • An internal AI platform for a broadcaster

    Team

    Encrypted personal data, audit logs, a WAF and key-less CI/CD built into the initial design rather than bolted on.

    Read the case study

Pricing

What it costs

Prices are “from” anchors. Size, stack and scope change the quote, which follows the free call.

  • Spot review

    Knowing your exact exposure before a release

    Turnaround: ~1 week

    From $680scoped per project

  • Standard audit

    Shipping/operating a B2B, multi-tenant SaaS safely

    Turnaround: ~2–3 weeks

    From $1,900scoped per project

  • Embedded fix

    Reaching “actually fixed, and it won’t regress,” not just detected

    Turnaround: Scoped (a few weeks+)

    From $4,800scoped per project

Each tier’s deliverables for Next.js / Supabase are on the specialist page; other stacks follow the same stages with the checks swapped for that stack. For an app built with AI where you only need to know whether critical holes exist, there is a smaller pre-launch review.

See the pre-launch review for AI-built apps

Frequently asked questions

  • What is the difference between a vulnerability assessment and a security audit?

    A vulnerability assessment finds known weaknesses in the running app or the code. A security audit adds the design (who may touch which data) and the configuration, and ends with a fix plan. This service covers both, inside an agreed scope.

  • Do you do penetration testing?

    Yes. Within an agreed scope and window, dynamic testing reproduces real attack steps against the running app (automated scanning plus manual verification). It runs on staging by default; on production, the target, time window and stop conditions are agreed in writing first, and only methods that never modify data are used.

  • How much does it cost?

    From $210 for the pre-launch light review, through the standard audit that goes into the design (from $1,900), to hands-on remediation (from $4,800). Size and scope change the quote, which follows the free call.

  • Can you review an app that is not built on Next.js or Supabase?

    Yes. Web apps built with Rails, Laravel, Django, Go and others, plus AWS / GCP / Vercel configuration. For Next.js / Supabase, the specialist audit focused on RLS is the better fit.

  • We have no staging environment, only production. Can you still audit it?

    Yes. Reading the code sends nothing to production, and configuration is reviewed with a view-only role that changes nothing. Anything that sends traffic to production is agreed in writing first — target, time window, test accounts — and limited to methods that never modify real customer data.

  • Will the audit make us secure?

    Not “completely secure.” An audit finds and ranks the known high-severity risks in scope and reports them with a fix plan. The fixes themselves, plus regression tests and CI gates, are the remediation tier. What is out of scope and what remains is written into the report.

  • Can you fix what you find?

    Yes. The remediation tier covers the fixes, regression tests and a retest. You can also take the report and fix it in-house.

  • What do you need from us?

    Read access to the repository and any architecture notes you have. You do not need to hand over production secrets such as passwords or API keys; where access is needed, you issue a scoped account or a temporary key for the audit. An NDA can be signed before our first call.

Start with 30 minutes to set the scope

A free call sorts out what to review, how deep, and by when. The quote comes after.

An NDA can be signed before our first call.