Application and systems security

We agree what finished looks like before we start

Security is the one line on a build budget with no natural end. So we fix the end first.

Start with a scoped call

You get back the questions we still need answered and a call with the software engineer who would run the review.

How we handle what you send is set out in our privacy notice.

You pick a level of the OWASP Application Security Verification Standard. We agree the scope in writing before anyone starts, and every requirement on that list is checked and marked pass or fail. The same team that finds a problem writes the fix, opens the pull request in your repository, and ships it with a test that fails if the defect comes back, then re-tests it within the agreed scope. When every requirement on the agreed list has a pass, or a recorded exception with its reason, the work is finished and we say so.

Two ways this question usually arrives

What this actually costs companies your size

You have probably been handed a breach figure in the millions. Those averages are computed over large enterprises holding regulated data at scale. The numbers below come from a government survey that sampled at random, and from a dataset of insurance claims that were actually paid. They describe companies closer to your size, and they argue against spending more than you need to.

GBP 0Median cost of the most disruptive breach of the year among UK businesses that identified a breach in the previous 12 months. Government survey, fieldwork August to December 2025.

UK government random-probability survey, fieldwork August to December 2025.

GBP 4,000The 95th percentile cost for a small business in that same survey.

UK government random-probability survey, fieldwork August to December 2025.

USD 96,000Median paid US cyber insurance claim, mid-market segment, from a revenue-bracket distribution of 24,873 claims. The small and medium business segment sits at about USD 38,000.

A revenue-bracket distribution of 24,873 claims within a 69,683-claim US dataset.

The shape here is a long tail. A small number of companies carry most of the loss, and whether yours is one of them depends on how your system is built rather than on the average. That is the question a review answers.

Some of this cannot be bought back later

  1. Settled at design

    Six properties settled at design

    Where the trust boundary sits; how one tenant, meaning one customer organisation on a shared system, is kept away from another. How an authorization decision gets made, and where; the shape of the data flow. Who holds the keys and how they are rotated; whether the audit trail can be quietly edited.

  2. What late still buys

    A late engagement still helps.

    It buys patches, a web application firewall, a compensating control, and a ranked list of what to do next. It does not buy those six. The ones that arrived by accident are where we start.

  3. The number to distrust

    The hundred-times claim

    A defect supposedly costs a hundred times more in production. The largest study, 171 commercial projects and 47,376 defect logs, found no significant rise in effort for issues fixed later. Almost every citation traces to one 1981 book whose data was never published.

  4. How we build

    We build the same way.

    Security, performance and reliability are engineered in, not bolted on. Those six properties are settled in our own architecture work, while they are still cheap to change rather than expensive or impossible to undo later.

One measured authorization rebuild

  • Login platforms

    BeforeFive separate systems

    AfterOne

  • Auth-related support tickets, across five separate platforms

    BeforeFive platforms

    AfterDown 70 percent

  • License and development cost, five platforms

    BeforeFive platforms

    AfterDown 40 percent

  • Monthly active users, consolidated

    BeforeFragmented estate

    AfterThousands

Anonymised, as every case on this site is. The figures are the measured outcome of that engagement and nothing else was measured.

A multi-brand services group came to us with applications that had grown up separately. Five separate login platforms across a fragmented application ecosystem. Nobody could answer who had access to what from one place. We put one identity layer underneath the whole estate, using Keycloak with OAuth 2.0 and user federation, which means one login works across separate applications and one identity provider (Keycloak, an open-source one) answers for all of them, and moved every application onto it.

The finish line is somebody else's document

OWASP publishes the Application Security Verification Standard. Version 5.0.0 carries about 350 requirements across 17 chapters, grouped into three levels. Level 1 is the minimum worth considering. Level 2 is where the standard says most applications should be aiming. Level 3 is for the systems where the consequence of being wrong is severe.

Show data table
Share of the roughly 350 requirements in OWASP ASVS 5.0.0 at each level, drawn cumulatively so the level 2 mark reads about 70 percent. The whole is the standard's own requirement set. Source: OWASP ASVS 5.0.0, May 2025.
Segment Value (percent) Share
Level 1, about 20 percent of requirements 20 20%
Level 2 adds about 50 percent, reaching about 70 percent 50 50%
Level 3, the remaining 30 percent 30 30%
Share of the ASVS 5.0.0 requirement set at each level Share of the roughly 350 requirements in OWASP ASVS 5.0.0 at each level, drawn cumulatively so the level 2 mark reads about 70 percent. The whole is the standard's own requirement set. Source: OWASP ASVS 5.0.0, May 2025. OWASP Application Security Verification Standard 5.0.0, May 2025.

You choose the level. The standard deliberately does not choose it for you, and neither do we. Each requirement has to be verifiable, and the verification has to end in a pass or a fail, so there is no partial credit and no room for our opinion to drift. The report states the scope, every requirement checked, every exception, and every requirement recorded as not applicable with the reason it was.

Two things the standard says that a supplier would rather you did not read. Running an automated tool over the code does not verify a level. Neither does testing from the outside with no source, no configuration and no documentation.

One more worth saying plainly. OWASP does not certify vendors, verifiers or software. A level is a property of your application after it has been verified against the list, and it never belongs to the firm that did the verifying.

The order the work runs in

Progress is reported weekly against the agreed list, so you watch the scope being used up instead of discovering it at the invoice.

  1. Threat model and scope, in writing

    We model the ways your system can actually be reached and attacked, then agree the requirement list and the target level. What is out of scope is named.

  2. Review against the agreed list

    With source, configuration and time with the people who built it, because the standard is explicit that the higher levels cannot be verified without them.

  3. Validate every finding against the running system

    Anything a tool reported that does not reproduce is dropped before it reaches you. What survives is written in terms of your application.

  4. Rank by what is exploitable here

    Ordered by what someone could actually do inside your own running system, not by a generic severity score attached to a category name.

  5. We write the fix

    A pull request in your own repository, from the same team that found the problem, reviewed by a senior software engineer before it merges.

  6. The fix ships with a test that fails if the defect returns

    The fix ships with a test, and the secure default moves into the scaffold so the next service starts with it already in place.

  7. Retest, then the report

    The same team re-tests within the agreed scope. The report carries the scope, the passes, the exceptions and the requirements recorded as not applicable.

What a scanner actually catches on real code

A scan is not a review. On real repositories with known vulnerabilities, the best single tool in each language found well under half of them.

Show data table
The best-performing tool in each of three languages, from a 2024 head-to-head of 15 static analysis tools on real GitHub repositories labelled from vulnerability-fixing commits. The scale runs to the full set of labelled vulnerabilities in that corpus.
Item Share of labelled vulnerabilities detected
CodeQL, C 44.4%
Horusec, Java 37.5%
DevSkim, Python 30%
Figure The best-performing tool in each of three languages, from a 2024 head-to-head of 15 static analysis tools on real GitHub repositories labelled from vulnerability-fixing commits. The scale runs to the full set of labelled vulnerabilities in that corpus. Head-to-head evaluation of 15 static analysis tools on real GitHub repositories, 2024, arXiv:2407.16235. Synthetic-benchmark scores for the same class of tool come from the OWASP Benchmark project.

CodeQL leads the C column at 44.4 percent. In the same study it found none of the labelled Python vulnerabilities. Several other widely deployed scanners also scored zero. Put the identical class of tool on a synthetic benchmark and it looks precise, which is exactly why a benchmark score tells you nothing about how a tool performs on your code.

So the review here is done by a software engineer, and you meet that person before anything is signed. Not a salesperson and not an account manager. Ask them how they would approach your system, where they would look first, and what they would do if they found nothing. If the call convinces you that our method is wrong for what you have built, that is a useful answer and it has cost you nothing.

Ask for the call with the software engineer

One firm's published starting prices

Of the nineteen pages ranking for this work, seventeen publish no price at all. One that does publishes its own starting prices, so here they are, and a starting price is where a job begins rather than where it lands.

Show data table
Published starting prices from one firm's own 2026 price list, in US dollars. These are floors for that firm and nobody else, they are not ours, and not one of those nineteen pages publishes what moves a job above its floor.
Item Published starting price
Secure code training 5,000 USD
Mobile app test 5,400 USD
External network test 5,400 USD
Secure cloud review 6,200 USD
Internal network test 7,700 USD
Secure code review 9,300 USD
Web and API test 10,800 USD
AI systems test 10,800 USD
IoT test 10,800 USD
Hardware test 12,400 USD
Threat modelling 12,400 USD
Testing subscription 21,400 USD
Figure Published starting prices from one firm's own 2026 price list, in US dollars. These are floors for that firm and nobody else, they are not ours, and not one of those nineteen pages publishes what moves a job above its floor. Software Secured published price list, 2026. Resource-day sizing convention from UK National Cyber Security Centre penetration testing guidance.

The biggest lever on the number is the level you choose. Going from level 1 to level 2 takes an application from about 20 percent of the standard's requirements to about 70 percent of them, and that choice is yours rather than ours. After that it is five counts. How many applications and separately deployable services you run. How many endpoints and third-party integrations. How many distinct ways a person or a machine signs in and gets authorized. Whether money moves or bulk data can be exported. Whether source, configuration and the people who wrote it are available to us.

The industry sizes this work in days of a software engineer. One vendor sells credits worth eight hours each. Count those five things about your own system before any call, and the first conversation starts a long way in. We are not going to turn them into a number without asking, because nobody honestly can.

What we commit to in writing

The question that stalls this purchase is what happens if you find something serious. A serious finding is reproduced against your running system, brought to you the day it is confirmed rather than held back for the report, and fixed by us with a pull request into your repository. The same team re-tests within the agreed scope. If the repair changes the scope, you get a new estimate and you approve it first.

Everything above is agreed before work starts. A change to scope is a new estimate you approve first.
Included in the engagementNot included, and we would rather say so now
Included: the scope and the target level agreed in writing before work starts, with the requirements we are leaving out named rather than implied.Not included: a certificate of any kind, because OWASP does not certify vendors or software.
Weekly progress against that list.A compliance attestation, because we do not certify against frameworks ourselves.
Findings reproduced against your running system with tool noise removed.A price by return from the form, because a number before a scoping conversation would be a guess.
The fixes written by us and shipped with tests.Work outside the agreed list without a new estimate.
The retest within the agreed scope.
The report with the scope, the passes, the exceptions and the requirements recorded as not applicable.

Your code and your intellectual property are yours from day one. Everything lives in your repositories and your cloud accounts. There is an NDA from day one, access runs through SSO and your own repository permissions, and the report belongs to you to send to whoever asked for it.

Send the counts and get the scoping questions

You get back the questions we still need answered and a call with the software engineer who would run the review.

How we handle what you send is set out in our privacy notice.

What this will not find

  • Your people are outside it, so a convincing phone call to your finance team is not something this catches.

  • Your suppliers' own systems are outside it.

  • Physical access to your offices and hardware is outside it.

  • So is anything that only appears when a live adversary chains small weaknesses together over weeks.

Where to go instead

No review is complete, and a firm that tells you otherwise is selling. This method reads your applications and the systems around them, against an agreed list. That leaves real risk on your side of the line.

We do not certify against compliance frameworks ourselves. We engineer systems that pass your auditors' requirements. And where the work shows that incremental hardening will do, we say so rather than proposing a rewrite you do not need.

Before you book the call

The six questions this category actually asks, in the words they were originally asked in.

Who does the work, and can I speak to them first?
A software engineer, named, and yes. They are on the call before anything is signed, and they are not a salesperson. Ask how they would approach your system. The answer will tell you more than anything we could send you.
How do I know this is not just a scanner?
Tools do run, and we tell you which ones. Every finding is then reproduced by hand against your running system, and anything that does not reproduce is dropped before it reaches you. What survives is written in terms of your application: this endpoint, this role, this data. A finding nobody can trace to a line of your own code is not finished work.
What do I get, exactly, and can I see a sample first?
A report stating the scope, every requirement checked with its pass or fail, every exception with the reason, and every requirement recorded as not applicable. Plus the pull requests for the fixes, in your repositories. Ask before you sign and we will send you the report template.
What happens to the report, and can I show it to a customer or an investor?
It is yours. Send it to whoever asked for it. If they need a summary that leaves the exploit detail out, we write that version too.
We already paid for a pentest. Does that change anything?
Yes, so bring it. We check what it found, whether those fixes held, and which requirements on the list it already covers. Anything it covers comes off the list, which makes the list shorter and the work smaller.
Do you need our source code, and what access do you need?
Yes, for anything above the first level. The standard is blunt about this: verifying level 2 and level 3 needs documentation, source, configuration and time with the people who built the system, and testing from the outside alone is called an inefficient and ineffective way to verify. The NDA is in place from day one, and access runs through your own identity provider, which means we sign in as ourselves and you remove us in one place (SSO), and through your own repository permissions.

Send us the counts

How many applications and separately deployable services you run. How many endpoints and third-party integrations. How many distinct ways a person or a machine signs in. Whether money moves or bulk data can leave. Whether we can have source and configuration access. That is enough to begin.

What comes back is the questions we still need answered, and a call with the software engineer who would run the review. On that call we agree a target level, the scope we would work to, and what we would deliberately leave out of it. You get that in writing whether or not you hire us.

Two outcomes here are good. One is a scoped engagement with a written finish line. The other is you leaving with a scope your own team runs. If that is the honest answer for your system, it is what the call will say.

The senior software engineer who replies to enquiries
Tirth BodawalaSenior software engineer
  • A software engineer, not a salesperson
  • Scope and target level agreed in writing
  • The same team re-tests its own fixes

Start the scoping call

How we handle what you send is set out in our privacy notice.