Broken access control
Horizontal and vertical privilege escalation, insecure direct object references, forced browsing and multi-tenant isolation failures. Consistently our highest-impact finding class.
Application Security
Automated scanners find missing headers and known CVEs. They do not find the checkout flow that lets a customer set their own price, or the admin endpoint that trusts a header. That is the part that needs a person.
Most web application tests are run unauthenticated, because unauthenticated testing is cheap and easy to schedule. It also misses the majority of what matters. The serious flaws in a modern application are almost always behind the login: one tenant reading another tenant’s records, a support role that can escalate itself to administrator, an object identifier that is not checked against the session that requested it.
We ask for credentials for every role your application has — customer, staff, administrator, and any partner or API role in between. Then we test each boundary in both directions. Can a customer reach staff functionality? Can one customer reach another customer’s data by changing a number in a URL? Can a low-privilege staff account perform an action the interface never offers it?
Alongside that we run full automated coverage, because there is no reason a human should be hunting for an unpatched library version. Our engine carries version-aware rules across 50 technology packs and 27 languages, so framework, server and dependency issues are identified precisely — the exact affected build, not a guess from a banner. That frees the manual effort for the logic, which is where the money is.
Coverage
Coverage follows the OWASP Web Security Testing Guide, with the depth set by the ASVS level you need to reach.
Horizontal and vertical privilege escalation, insecure direct object references, forced browsing and multi-tenant isolation failures. Consistently our highest-impact finding class.
Credential handling, password reset flows, multi-factor implementation, session fixation, token lifetime and logout behaviour.
SQL, NoSQL, command, LDAP and template injection, including second-order cases where the payload lands somewhere other than where it was entered.
Workflow bypasses, race conditions, price and quantity manipulation, replay of one-time operations, and any sequence the developers did not expect anyone to attempt.
Reflected, stored and DOM-based XSS, plus CSRF on state-changing operations and the CORS policy that quietly permits it.
SSRF into internal services and cloud metadata endpoints, unrestricted upload, path traversal and unsafe deserialisation.
Transport configuration, at-rest handling of sensitive fields, key and secret management, and personal data appearing where it should not.
Framework and server hardening, security headers, error handling, exposed administrative interfaces, and third-party components carrying known vulnerabilities.
Approach
Five to eight working days of testing for a typical application, then two to three for reporting.
A short walkthrough with someone who knows it. What it does, who uses it, which data matters most, what a worst-case abuse would look like. This hour saves days.
Every route, parameter, role and integration point, including the endpoints the interface never calls but the server still answers.
Full sweep for known vulnerabilities, misconfiguration, exposed files, dependency risk and hardening gaps — matched against current vulnerability intelligence.
Access-control matrix testing across roles, injection and logic testing, and exploitation of anything the automated pass flagged as interesting.
Confirmed findings only. Each one carries the evidence, the reproduction steps and a plain statement of what an attacker gets out of it.
Ranked report, developer walkthrough, then a free retest once fixes ship.
Deliverables
The report is the product. If it cannot be acted on by a developer and understood by a director, we have not finished.
Screenshots, requests and responses, and steps a developer can follow to reproduce the issue in five minutes.
Remediation guidance specific to the framework you are actually using, not generic advice copied from a standard.
Which verification requirements were tested and which passed, if you are working towards a stated ASVS level.
A call with your engineering team to work through the findings and answer implementation questions.
Verification that fixes hold, and a shareable letter confirming the outcome.
Is this for you?
If none of them are, say so on the call and we will tell you honestly whether this is the right piece of work — or point you at the one that is.
Book a scoping callHow we work
The same engagement model applies to every piece of work we take on, so you always know what happens next.
A 30-minute call, then a written scope: what is in, what is out, what we need from you and what it costs. Nothing starts before you sign it.
Rules of engagement, testing windows, escalation contacts and a signed authorisation. Out-of-hours windows where production cannot take the load.
Automated coverage first, then manual testing where judgement is required. Critical findings are reported the day we confirm them, not at the end.
One report a developer can act on and an executive can read, with evidence, reproduction steps, business impact and a fix for every finding.
A walkthrough call with your engineers. We answer questions on the fix, not just the finding.
A free retest cycle to confirm the fixes hold, and a clean summary you can hand to a customer, auditor or board.
Questions
The questions clients actually ask during scoping. If yours is not here, ask it directly.
Yes, and preferably two accounts per role. Unauthenticated testing covers only the small part of an application that is exposed before login, and the highest-impact flaws we find — one user reading another user’s data, a support account escalating to administrator — are only reachable with valid sessions. Two accounts per role let us test isolation between users at the same privilege level, which is where multi-tenant applications usually fail.
If you want us to, yes, within agreed windows and with intrusive testing excluded by default. Many clients prefer a production-identical staging environment for the deeper work and a controlled subset of checks against production. Configuration differences between the two are themselves a common source of findings, so we usually recommend at least some production coverage.
A scan is one automated pass that reports known vulnerability signatures and misconfiguration. It cannot reason about your application. It will never notice that a discount code can be applied twice, that an order can be confirmed without payment clearing, or that changing a single identifier returns another customer’s invoice. Those are the findings that matter, and they require a person who understands what the application is for.
The Application Security Verification Standard defines three levels of rigour: Level 1 for low-assurance applications, Level 2 for most applications handling meaningful data, and Level 3 for the highest-value systems. You do not need to pick one, but naming a target level makes the test measurable — we can state which requirements passed rather than only listing what failed. Most commercial applications should be aiming at Level 2.
Yes. React, Angular, Vue and similar front-ends shift most of the interesting surface onto the API behind them, so an SPA test is largely an API test plus client-side analysis — DOM-based issues, secrets in bundled JavaScript, and logic wrongly enforced in the browser rather than on the server. Our definition library covers front-end and back-end frameworks across 27 languages and runtimes.
Annually as a minimum, and after any significant change to authentication, authorisation, payment flows or the data model. Applications that ship weekly benefit more from continuous coverage between annual manual tests, which is what the platform is for.
Next step
A 30-minute call, then a scope document with what is in, what is out and what it costs. No obligation, and no charge for the conversation.