Penetration testing · Forensics · Engineering

A security report your engineers can act on.

Plenty of testing arrives as a scanner export with a certificate stapled to the front. We test by hand, work from your source where you allow it, and write every finding with the specific change that closes it. Then we retest until it is closed.

Web · API · Mobile · Network · Cloud · Source · Red team · LLM applications
Engagement map: stranger to outcome A flow from an external analyst with no account, through enumeration, across four tested hosts carrying findings, to a stated outcome of no breach. STRANGER External analyst no account, no keys enumerates METHOD CT logs + DNS 216 hostnames resolved reaches SURFACE — 4 OF 216 IN SCOPE checkout-api CL-0147-01 CRITICAL merchant-portal CL-0147-02, -03 HIGH identity CL-0147-04, -05 MEDIUM static-edge CL-0147-06, -07 LOW reach, not breach OUTCOME No breach nothing taken, nothing changed
Fig. 1 · Engagement map. Stranger to outcome, every node evidenced.
What we test

Nine surfaces, scoped in writing before anything runs.

You pick the surfaces. Each one has a defined depth, a named standard behind it, and an agreed window. Nothing is tested that is not on the signed scope.

01 / Web application

Business logic, not just injection

Authenticated and unauthenticated testing of access control, session handling, and workflow abuse. We test every role your users actually hold, not one demo account.

OWASP WSTG
02 / API

REST, GraphQL, and gRPC

Object and function level authorization, mass assignment, rate limiting, and what your schema introspection hands an attacker for free.

OWASP API Security Top 10
03 / Mobile

The binary and what it talks to

Android and iOS: local storage, certificate pinning, root and jailbreak handling, and the backend the app reaches once you get past the client.

OWASP MASVS
04 / External network

Everything reachable from outside

Exposed services, patch level, default credentials, and the forgotten host nobody on your team remembers provisioning.

NIST SP 800-115
05 / Internal network

Assumed breach from one workstation

Lateral movement, Active Directory attack paths, credential reuse, and how far a single compromised laptop gets before anything notices.

MITRE ATT&CK
06 / Cloud

Configuration and trust relationships

AWS, Azure, and GCP. IAM trust chains, public storage, key management, and the logging gaps that would hide an incident from you.

CIS Benchmarks
07 / Source review

Reading the code, not scanning it

Manual review of authentication, cryptography, and data handling paths, alongside dependency and secret scanning across history.

OWASP ASVS
08 / Red team

Goal-led and time-boxed

A named objective, multiple vectors, and a measured answer on detection and response. Phishing and pretexting only where the written scope allows it.

PTES
09 / LLM applications

Prompt injection and tool abuse

Injection through retrieved context, function and tool abuse, data exfiltration via the context window, and whether an agent can exceed its own authorization.

OWASP Top 10 for LLM Applications
Attack surface, mapped An isometric view of a client estate. Hosts are drawn as blocks on a grid, labelled with the service, version and transport found on each. One host is lit from above to mark where a critical finding was proven; two outlined blocks are assets discovered but out of scope. nginx 1.24 TLS 1.0 8443/tcp checkout.acme.example
Fig. 2 · What a scope looks like once it is mapped. Lit block: a proven critical finding. Outlined blocks: assets we found but were not authorised to test.
What you get

Every finding is written to the same six parts.

If an engineer cannot reproduce a finding from the report alone, without calling us, it is not finished and it does not ship.

01

Reproduction

The exact request, payload, account, and preconditions. Written so someone who was not on the engagement can trigger it on a Monday morning.

02

Evidence

Raw request and response pairs, screenshots, and a short capture where the issue only makes sense in motion. Everything timestamped against the test window.

03

Business impact

What the attacker actually gains, in your terms: which records, whose account, how much money, how far inward. A severity word on its own is not an impact statement.

04

Severity

CVSS 3.1 base score, and our own rating where your context changes the answer. Where we disagree with the CVSS number we print both and explain the gap.

05

Remediation

The specific change: the configuration value, the code path, the policy line. Never a sentence that just says to implement input validation.

06

Retest and closure

We re-run the finding after you fix it. The closure letter lists what closed, what did not, and what you consciously accepted as business risk.

Three documents land at the end: a technical report for the people fixing it, a management summary for the people funding it, and a closure letter after retest for the people asking about it.

Page 1 · Cover

Who tested what, and when.

Engagement reference, the window, the retest date, the document version, and the named tester who answers for it. Version 1.2 supersedes two earlier issues, and the cover says so.

Page 3 · Findings register

Every finding, with two severities.

The CVSS 3.1 base score your auditor expects, and our rating after applying your environment. Where the two disagree the finding explains the gap rather than quietly picking one.

Page 4 · Finding CL-0147-01

Reproducible without calling us.

The exact request, the response that should not have come back, the line of code that caused it, and the specific change that closes it. Personal data is masked in the published copy only.

Page 5 · Retest and closure

What closed, and what did not.

One finding is still open and the document says so. Two were accepted as business risk and stay in the register permanently, because a report that deletes them misleads whoever reads it next year.

Specimen report cover page showing engagement reference, test window and document version.
Specimen findings register listing seven findings with severity, CVSS score and retest status.
A specimen finding written out in full, with reproduction steps, evidence and the code that caused it.
Specimen retest and closure page recording what closed, what stayed open and what was accepted.
What we decline

The part most firms leave off the website.

It is easier to judge a security firm by what it refuses to do than by what it promises.

We will not sell a scan as a test

Automated tooling is the first hour of an engagement, not the engagement. Where a scanner found something, the report says a scanner found it.

We will not issue a certificate we cannot defend

You get a report and a closure letter, both of which we will walk through with your auditor. If what you need is a PDF that says the word secure, we are the wrong firm.

We will not claim accreditation we do not hold

We state which empanelments and certifications we carry and which we do not, in writing, before you think to ask for them.

We will not test without written authorization

A signed scope, named contacts on both sides, an agreed window, and a number that reaches a human at two in the morning. Nothing starts until all four exist.

Beyond testing

We ship software too. That is why the remediation is specific.

A tester who has built and operated an authentication system writes different advice than one who has only read about them. The same team does both here, and investigates it when something goes wrong.

01 / CONFIDENTIAL

Cyber Forensics

What happened, in what order, and what left the building. Evidence handled with chain of custody from the first image, written to survive a lawyer reading it line by line.

Forensics →
02 / BUILT

Software Development

Web, mobile, data, and platform work, including replacing the system everyone is afraid to touch. Auditability designed in at the start rather than retrofitted before a review.

Engineering →
03 / INTELLIGENT

AI Agent Development

Agents with narrow tool permissions, a full log of every run, and evaluation against cases you define. We test the authorization boundary before it reaches your data.

Agents →
Before you ask

Questions we get on the first call.

How long does an engagement take?

A scoped web application test is usually five to ten working days of testing plus two days of writing. Network and red team run longer. You get that number in the scope document before you sign, not as a surprise afterwards.

Do you need our source code?

No, but the findings are better with it. Grey-box testing with source and working test accounts finds more in less time than black-box, because the hours go into exploitation instead of guessing at structure. We will work either way and the scope document says which you chose.

Will you test production?

If you ask us to in writing, within an agreed window, with a rollback contact on standby. We prefer a staging environment that genuinely matches production. Where a test carries real risk to live data or availability, we say so and we will not run it without you accepting that in writing.

What do you need from us to start?

A signed scope and mutual NDA, one named technical contact who can answer questions during the window, test accounts covering each user role, and the window itself. That is usually the whole list.

What happens if you do not find anything serious?

You get a report that says so, listing the surfaces tested and the depth reached, which is a result you can show an auditor. We do not inflate severity to justify the invoice. A quiet report from a deep test is worth more than a loud one from a shallow one.

Who actually does the work?

The people you meet on the scoping call. We do not pass engagements to a subcontractor, and the name on the report is the person who ran the test and will answer for it.

Engage

Tell us what you run and who is asking you to prove it is safe.