Skip to main content
Coverage class · Source

Secure code review ends at a line, not an alert

You grant access to the repository and B-52 reads it directly, across the languages that are in it. What comes back is a file, a line, the path an attacker would take to reach that line, and the change that closes it — written against the framework your codebase already uses. The code is deleted after thirty days of inactivity.

What lands in the ticket

A finding is a file, a line and a path

The reason a code review gets ignored is almost never that it found nothing. It is that what it found arrived in a shape nobody could act on.

Always

The file and the line

Where the defect is, in the branch you nominated, at the commit you nominated it at. Not a rule identifier and a list of candidate locations to go and check.

Always

The path from input to defect

How something an attacker controls reaches that line: which parameter, through which functions, past which checks. The path is what tells your engineer whether this is reachable at all.

Always

The change that closes it

Written against the framework and the idiom the repository already uses, rather than a generic remediation paragraph that has to be translated before it can be applied.

Where the system is in scope too

The exchange that reaches the line

When the deployed system is inside the same engagement, the finding carries the request and the response that reach the line as well as the line itself. Where it is not, the path is established in the code and the finding says so.

Always

The classification

Severity with its CVSS v4.0 vector, the CWE, and the ASVS requirement the defect fails.

Why the path is carried

Reachability is the whole difference

A defect on a line that nothing can reach is a code-quality note. The same defect on a line that a request parameter reaches is the reason the review was commissioned — and nothing about the line itself tells the two apart. Establishing which of the two you are looking at is the judgement that turns a static result into a security finding, and it is the judgement a rule set cannot make, because it needs to know what the application is for. That is why every finding here carries the path, and why one whose path could not be established is reported as what it is rather than at the severity a path would have justified.

Class and boundary

What is reviewed, and which class the next question belongs to

Access to the repository is granted by you. Language coverage is broad, and the review is worked against a named branch or tag rather than against whatever moved since.

Inside the class

The repository as it stands

Application source across the languages present in it, the dependency manifests and what they resolve to, the configuration, and the build and deployment definitions that sit alongside them.

Adjacent

The system once it is running

What the code does when it is deployed and reachable is the web application class, or the API class where the interface is the product. The two answer different questions and are strongest in one engagement: the review says why, the assessment says whether.

Where it fits naturally

Inside the pipeline, where the code already is

A build already holds the source at the commit that matters. B-52 runs in the pipeline and a result can fail a build against a severity threshold you set, which is the same work at the moment it is cheapest to act on.

Out of scope

Physical, hardware and wireless

Out of scope for the platform entirely, in every class. It is the only exclusion, and it is stated the same way everywhere on this site.

Who this page is for

Two readers, and one of them has stopped reading their tooling

Both are answered here. Where they should start is not the same.

01 Signal

The team whose analyser output nobody opens

What brought them
A static analysis queue that grew past the point where triaging it was anybody’s job, and a suspicion that something real is inside it.
What they need
Findings with reachability established, so the queue has an order. Start at what lands in the ticket, and at the comparison lower down.
What they check first
Whether the output is a rule identifier or a path from a parameter to a line.
02 Filing

The buyer whose obligation names source-code review

What brought them
A requirement that software is reviewed before it is released, and an auditor who will ask how the review was done and by whom.
What they need
A review tied to a named commit, with a report whose signature the obligation accepts. Start at the regulatory mapping.
What they check first
Which delivery model produces a signable report. Coverage is the same in all three.

By phase

How a review runs, phase by phase

The phase names are the platform’s. What enters and leaves each of them on this class is what makes a review different from a scan of the same repository.

PhaseWhat entersWhat leaves
Discovery Read access to the repository, and the branch or tag you nominate. The languages, frameworks, entry points and dependency surface actually present — read from the repository rather than from a description of it that may be a release behind.
Planning The surface discovery found. A review plan written for this codebase: which entry points, which trust boundaries, which flows. A payments service and a content service are never handed the same list.
Scanning The source, in full. Candidates. Nothing leaves this phase as a finding, and nothing is reported from it.
Exploitation A candidate, and the path that would have to reach it. A finding where the path holds, a drop where it does not. Where the deployed system is in the same engagement, the path is walked rather than argued.
Reporting Confirmed findings. File, line, path and the change that closes it, landing in your dashboard as each is confirmed.
QA The finished report. A gate that can send it back to reporting before you see it. It is where a code-quality note is separated from a security finding.

Discovery

What enters
Read access to the repository, and the branch or tag you nominate.
What leaves
The languages, frameworks, entry points and dependency surface actually present — read from the repository rather than from a description of it that may be a release behind.

Planning

What enters
The surface discovery found.
What leaves
A review plan written for this codebase: which entry points, which trust boundaries, which flows. A payments service and a content service are never handed the same list.

Scanning

What enters
The source, in full.
What leaves
Candidates. Nothing leaves this phase as a finding, and nothing is reported from it.

Exploitation

What enters
A candidate, and the path that would have to reach it.
What leaves
A finding where the path holds, a drop where it does not. Where the deployed system is in the same engagement, the path is walked rather than argued.

Reporting

What enters
Confirmed findings.
What leaves
File, line, path and the change that closes it, landing in your dashboard as each is confirmed.

QA

What enters
The finished report.
What leaves
A gate that can send it back to reporting before you see it. It is where a code-quality note is separated from a security finding.

On the code itself

What happens to the repository afterwards

Access is granted by you, to the repository and the branch you nominate. The code is held while the engagement is active and deleted after thirty days of inactivity — a rule tied to the work stopping rather than to a calendar, so a review that pauses while a fix is written does not lose the material it was working from partway through. Where the review runs inside your own pipeline the source never leaves it at all, which is why this class pairs with the pipeline integration rather than sitting beside it: the code is already there, at the commit that matters, at the moment acting on a finding is cheapest.

The boundary

What a review does on its own, and what waits for you

Three actions need written approval on every coverage class. On this one the interesting row is the third, because a repository hands you things that are tempting to test.

What a review does on its own, and what waits for you
StateWhat it meansWhat follows
Writing anything to your repository Nothing is committed, branched, or opened as a pull request. A review reads. Where you want fixes proposed as changes, that is asked for in writing and scoped as its own thing. Stops and waits, in writing.
Using a credential found in the code A key, token or connection string committed to the repository is reported as a finding on the evidence of the commit. Establishing whether it still works means using it somewhere. Stops and waits, in writing.
Walking a path against the running system Where the deployed system is inside the same engagement, the path from input to line is proved rather than argued — bound by that system’s own authorised scope, not by this one. Runs inside the assessment scope you authorised.
Everything else inside the access you granted Terminal Reading and analysing the source, the manifests, the configuration and the build definitions; generating the review plan; working it through; reporting. Runs without asking.
Key
  • Requires your written approval before B-52 proceeds
  • Authorised by the running system’s own scope, where it is in the engagement
  • Authorised by the repository access you granted
  • TerminalNo state follows this one

Why the second row matters

A key in a repository is a finding, not an invitation

A credential committed to a repository is a finding you can quote: it is in the file, and the file is in the history. Establishing whether it still works is a different act — it means using it against a live system, and that carries a different authorisation. B-52 reports the credential and where it was committed, and goes no further unless you have said in writing that it may. The distinction matters because the two look like one step from a distance, and the second one is the step that puts somebody else’s data in the report.

What the review reaches

The defect classes source shows and a running system does not

Every row below is something visible in the code and difficult or impossible to provoke from outside it. That is the argument for reading the source at all.

ClassWhy the source is where it is visible
Authorisation logic, as written Whether the check exists at all, on each path, rather than whether one role reached one record during a timeboxed test. Source is the only place the absence of a check is visible as an absence.
Cryptographic use Mode, key derivation, initialisation vectors, and whether the key is in the repository. A running system presents a ciphertext; the source presents the decision that produced it.
Injection at the point of construction Every place a query, a command, a path or a template is assembled — including the ones behind a code path no external test ever triggered.
Secrets committed to the repository Keys, tokens and connection strings in source, configuration and build definitions. Nothing has to be exploited for these to be facts.
The dependency surface, as resolved What the manifests actually pull in at the versions they resolve to, including the transitive ones nobody chose and nobody has looked at.
Error and exception handling What a failure discloses, and what it leaves half-finished. Both are far easier to read in source than to provoke reliably from outside.
Order of operations in a flow Whether the sequence the code enforces is the sequence the flow requires, and what the code does when a step arrives out of it.

Authorisation logic, as written

Why the source is where it is visible
Whether the check exists at all, on each path, rather than whether one role reached one record during a timeboxed test. Source is the only place the absence of a check is visible as an absence.

Cryptographic use

Why the source is where it is visible
Mode, key derivation, initialisation vectors, and whether the key is in the repository. A running system presents a ciphertext; the source presents the decision that produced it.

Injection at the point of construction

Why the source is where it is visible
Every place a query, a command, a path or a template is assembled — including the ones behind a code path no external test ever triggered.

Secrets committed to the repository

Why the source is where it is visible
Keys, tokens and connection strings in source, configuration and build definitions. Nothing has to be exploited for these to be facts.

The dependency surface, as resolved

Why the source is where it is visible
What the manifests actually pull in at the versions they resolve to, including the transitive ones nobody chose and nobody has looked at.

Error and exception handling

Why the source is where it is visible
What a failure discloses, and what it leaves half-finished. Both are far easier to read in source than to provoke reliably from outside.

Order of operations in a flow

Why the source is where it is visible
Whether the sequence the code enforces is the sequence the flow requires, and what the code does when a step arrives out of it.

Three of them, read twice

The same defect, from outside and from the source

Each of these is either invisible or ambiguous from a running system, and unambiguous in the code.

01 Authorisation

A check that is missing on one path of several

From the running system
Found only if a test happened to take that path, holding the right role, at the right moment.
From the source
Visible as a difference between paths that should have been the same.
What the run does
Compares the paths to a resource against each other, rather than testing each one in isolation and calling the set covered.
02 Cryptography

A key that never leaves the repository

From the running system
Indistinguishable from a well-managed key. The ciphertext looks the same either way.
From the source
A constant, in a file, with the algorithm and the mode beside it.
What the run does
Reports the key and where it was committed, and stops there unless the live system is in scope and you have authorised the next step.
03 Dependencies

A version nobody chose

From the running system
Sometimes inferable from a banner, often not, and rarely for anything transitive.
From the source
The manifest says what was asked for; the resolution says what arrived.
What the run does
Reads what resolved rather than what was declared, because the two disagree more often than a declaration suggests.

Methodology

The standards a review is worked against

Each cited at the version current on the date beside it. On this class the reader is frequently an engineer who already knows these documents, which is the reason the versions are printed.

StandardVersionWhat it carries here
OWASP ASVS 5.0.0, May 2025. 17 categories The verification requirement a finding fails, and the level the review is agreed against at scoping.
The first major release in six years; 4.0.3 is superseded.
OWASP Top 10 2025 edition The category each finding is reported under, so a report reads the same way as the assessment of the running system.
Superseded the 2021 edition in January 2026.
CWE Current The weakness identifier on every finding, so one defect can be followed across tools that otherwise agree about nothing.
CVSS v4.0, November 2023. Read 2026-09-13 The severity vector, so your team can recompute the score against its own environmental metrics instead of taking ours.

OWASP ASVS

Version
5.0.0, May 2025. 17 categories
What it carries here
The verification requirement a finding fails, and the level the review is agreed against at scoping.

The first major release in six years; 4.0.3 is superseded.

OWASP Top 10

Version
2025 edition
What it carries here
The category each finding is reported under, so a report reads the same way as the assessment of the running system.

Superseded the 2021 edition in January 2026.

CWE

Version
Current
What it carries here
The weakness identifier on every finding, so one defect can be followed across tools that otherwise agree about nothing.

CVSS

Version
v4.0, November 2023. Read 2026-09-13
What it carries here
The severity vector, so your team can recompute the score against its own environmental metrics instead of taking ours.

Before a review starts

What is fixed in writing, and what is never in scope

The scope agreement for a code review As of 2026-09-13
  • The repository and the branch or tag, named. A review of a branch that keeps moving is a review of something that no longer exists by the time the report does.
  • The ASVS level the review is worked to, which sets how deep rather than how wide.
  • Which parts of the repository are in scope, where one repository holds more than the application under review.
  • Whether the deployed system is in the same engagement, because that decides whether a path can be walked or only established in the code.

Deliberately excluded

  • Physical, hardware and wireless testing, which are out of scope for the platform in every class.
  • Writing to your repository. Nothing is committed, branched or opened as a pull request unless you have asked for it in writing.
  • Using a credential found in the code against a live system, unless that system is in scope and you have authorised it.

Where this sits

Against what is already running on every commit

No vendor is named here — these are categories of work. Two of the four run on every push already, and this class is not a replacement for either.

Static analysis on commitDependency scanningA human code auditB-52
What it works from A rule set, applied to every path it can see. A manifest and a vulnerability database. An auditor reading, for the days that were bought. A review plan written from what this repository turns out to be.
Coverage of the repository Complete, against its own rules. Complete, against what is declared. Sampled to fit the timebox. The generated plan worked through in full.
Reachability of a finding Partial, and it is where the noise comes from. Not attempted; the version is the claim. Yes, by judgement. Established per finding, and walked where the running system is in scope.
What a finding costs you to confirm Triage, which is why the queue stopped being opened. Little. The resolved version is the fact. Usually nothing; it was read and understood. Nothing. File, line, path and the change that closes it.
Cadence Every commit. Every commit. When it is scheduled and staffed. Every build, or the interval you set.
Whose signature it carries None. None. The firm that ran it. Security Brigade’s, in the two models with an empanelled auditor in them.

What it works from

Static analysis on commit
A rule set, applied to every path it can see.
Dependency scanning
A manifest and a vulnerability database.
A human code audit
An auditor reading, for the days that were bought.
B-52
A review plan written from what this repository turns out to be.

Coverage of the repository

Static analysis on commit
Complete, against its own rules.
Dependency scanning
Complete, against what is declared.
A human code audit
Sampled to fit the timebox.
B-52
The generated plan worked through in full.

Reachability of a finding

Static analysis on commit
Partial, and it is where the noise comes from.
Dependency scanning
Not attempted; the version is the claim.
A human code audit
Yes, by judgement.
B-52
Established per finding, and walked where the running system is in scope.

What a finding costs you to confirm

Static analysis on commit
Triage, which is why the queue stopped being opened.
Dependency scanning
Little. The resolved version is the fact.
A human code audit
Usually nothing; it was read and understood.
B-52
Nothing. File, line, path and the change that closes it.

Cadence

Static analysis on commit
Every commit.
Dependency scanning
Every commit.
A human code audit
When it is scheduled and staffed.
B-52
Every build, or the interval you set.

Whose signature it carries

Static analysis on commit
None.
Dependency scanning
None.
A human code audit
The firm that ran it.
B-52
Security Brigade’s, in the two models with an empanelled auditor in them.

On the analyser you already run

Keep it — it is doing a job this one does not

A static analyser on every commit is the right instrument for catching a regression in the minute somebody writes it, and nothing here replaces that. What it cannot do is decide which of its own results matter, because that decision needs to know what the application is for and what an attacker can actually reach. Making that decision is the work that produces the queue nobody opens — and it is exactly the work this class exists to do properly, once, against a named commit.

Filing

What a review is evidence for

Coverage is identical across the three delivery models. What changes between them is whose signature the report carries.

PCI DSS v4.0.1

Requirement 6.2.3 — reviewed before release

Bespoke and custom software is reviewed prior to release into production, to identify and correct potential coding vulnerabilities. A review tied to a named commit inside the pipeline is the shape that requirement is written around. Requirement text read 2026-09-13.

Release gating

A result that can stop a build

Where an obligation asks for review before release, the evidence is stronger when the review is the gate rather than a document filed beside it. B-52 runs in the pipeline and can fail a build on a severity threshold you set.

Remediation

The state a finding closes in

Each finding carries through open, fixed, retested and closed, and closes on a retest against the commit that claims to fix it.

Delivery

Choosing a model for a filing

Where the report goes to a regulator or an assessor, start with the expert-verified model.

Worked example

A chain that starts with one constant

Four steps. The first is a line a reviewer might mark as a code-quality issue; the fourth is why the review was worth commissioning.

A chain from a review, read step by step and then in sequence
LinkAloneIn sequence
1 A constant in a file A key, written into the configuration.It is the key the application encrypts with.
2 The same constant in what ships A string inside a built artefact.Everyone who downloads the client already holds it.
3 What the key was protecting A field the application treats as opaque.Readable, and writable, by anybody holding the key.
4 The request that follows A well-formed request.Composed rather than intercepted, and the server has nothing to tell it apart by.
A chain from a review, read step by step and then in sequence Reconstructed from a real engagement. Sector, technology and every identifier are generalised; the structure is what carries across.

Measured

Benchmarked against our own assessors

B-52 and Security Brigade’s expert assessment team were run against the same targets in parallel, and their findings pooled into one set with each item counted once. B-52 reached 90–95% of that set. Part of what it reached the team had not, which is why the pooled set is larger than either side’s own output — and why the expert-verified model is the honest recommendation wherever the stakes justify paying for both.

One repository, one named commit, from $500

One scan is one application or target, and the entry tier is $500. Where the repository holds more than one application, or the report has to carry a signature, a scoping call settles it faster than a form.