Application Security
Secure Code Review (SCR) Services
We read your authentication, authorization, payment and data-handling code by hand, and use SAST only to point us at the right places. You get a ranked set of confirmed, exploitable findings and clear fixes, not a noisy scanner dump.
Overview
Automated tools flag thousands of possible issues and leave you to guess which ones matter. A secure code review flips that. We build a quick threat model, pick the paths that carry the most risk, and read them line by line. SAST helps us cover ground and spot patterns, but a person confirms every finding and proves it is reachable before it reaches your report. We review JavaScript and TypeScript, Python, Java, Kotlin, Go, PHP, C# and Swift, and we sit with your developers to make sure the fixes hold.
Methodology
How the Engagement Runs
Every phase has a named output, so you always know what is being worked on and what lands on your side of the table.
6 Phases, 6 Named Handovers
Flow
Flow chart of the Secure Code Review (SCR) engagement, 6 phases in order, each one selectable. Phase 1, Threat Modelling and Critical-Path Selection. We map your application, its trust boundaries and its sensitive flows, then agree which authentication, authorization, payment and data-handling paths we review first. Activities: Walk the architecture and trust boundaries with your engineers; Map authentication and authorization paths; Identify where payment and personal data move; Agree the review scope and repository access. Hands over Critical-Path Review Plan. Phase 2, Automated SAST Triage. We run and tune SAST across the codebase, then triage the output to remove noise and false positives so manual effort goes where it counts. Activities: Tune SAST rules to your languages and frameworks; Triage the SAST backlog and remove false positives; Cluster repeated patterns into single root causes; Map surviving alerts to CWE categories. Hands over Triaged SAST Backlog. Phase 3, Manual Code Review. Our engineers read the selected paths line by line, following data and control flow to find flaws that scanners miss in logic, access control and trust decisions. Activities: Read payment and data-export flows line by line; Trace user input from entry point to sink; Check every access decision against the intended role model; Review session, token and secret handling; Test business logic assumptions against OWASP ASVS. Hands over Findings Report with File and Line References. Phase 4, Exploitability Confirmation. We confirm each finding is reachable and abusable, rank it by real impact, and drop anything that cannot actually be exploited. Activities: Confirm exploitability in a local build; Write a minimal proof of concept for each confirmed issue; Discard findings that no reachable path can trigger; Rank what remains by business impact. Hands over Confirmed and Ranked Finding Set. Phase 5, Fix Guidance and Pairing. We give concrete, code-level remediation for every confirmed issue and pair with your developers so the fixes are correct the first time. Activities: Write the fix as a code diff, not a description; Pair with engineers on the fix; Suggest a regression test for each issue; Walk the team through the recurring patterns. Hands over Fix Guidance at Pull-Request Quality. Phase 6, Re-Review. Once fixes land, we re-review the changed code to verify the issue is closed and no new weakness was introduced. Activities: Read the fix commits against the original findings; Retest each proof of concept on the patched build; Check the fix did not open a new weakness nearby; Close out the report with verified status per finding. Hands over Re-Review Closure Report. Each phase begins from the artefact the phase before it produced.
Phase 01 Threat Modelling and Critical-Path Selection
We map your application, its trust boundaries and its sensitive flows, then agree which authentication, authorization, payment and data-handling paths we review first.
What Happens In This Phase
- Walk the architecture and trust boundaries with your engineers
- Map authentication and authorization paths
- Identify where payment and personal data move
- Agree the review scope and repository access
The Handover
Critical-Path Review Plan
The next phase starts from this.
Phase 01 Threat Modelling and Critical-Path Selection
We map your application, its trust boundaries and its sensitive flows, then agree which authentication, authorization, payment and data-handling paths we review first.
What Happens In This Phase
- Walk the architecture and trust boundaries with your engineers
- Map authentication and authorization paths
- Identify where payment and personal data move
- Agree the review scope and repository access
The Handover
Critical-Path Review Plan
The next phase starts from this.
- 01
Threat Modelling and Critical-Path Selection
We map your application, its trust boundaries and its sensitive flows, then agree which authentication, authorization, payment and data-handling paths we review first.
OutputCritical-Path Review PlanActivities
- Walk the architecture and trust boundaries with your engineers
- Map authentication and authorization paths
- Identify where payment and personal data move
- Agree the review scope and repository access
- 02
Automated SAST Triage
We run and tune SAST across the codebase, then triage the output to remove noise and false positives so manual effort goes where it counts.
OutputTriaged SAST BacklogActivities
- Tune SAST rules to your languages and frameworks
- Triage the SAST backlog and remove false positives
- Cluster repeated patterns into single root causes
- Map surviving alerts to CWE categories
- 03
Manual Code Review
Our engineers read the selected paths line by line, following data and control flow to find flaws that scanners miss in logic, access control and trust decisions.
OutputFindings Report with File and Line ReferencesActivities
- Read payment and data-export flows line by line
- Trace user input from entry point to sink
- Check every access decision against the intended role model
- Review session, token and secret handling
- Test business logic assumptions against OWASP ASVS
- 04
Exploitability Confirmation
We confirm each finding is reachable and abusable, rank it by real impact, and drop anything that cannot actually be exploited.
OutputConfirmed and Ranked Finding SetActivities
- Confirm exploitability in a local build
- Write a minimal proof of concept for each confirmed issue
- Discard findings that no reachable path can trigger
- Rank what remains by business impact
- 05
Fix Guidance and Pairing
We give concrete, code-level remediation for every confirmed issue and pair with your developers so the fixes are correct the first time.
OutputFix Guidance at Pull-Request QualityActivities
- Write the fix as a code diff, not a description
- Pair with engineers on the fix
- Suggest a regression test for each issue
- Walk the team through the recurring patterns
- 06
Re-Review
Once fixes land, we re-review the changed code to verify the issue is closed and no new weakness was introduced.
OutputRe-Review Closure ReportActivities
- Read the fix commits against the original findings
- Retest each proof of concept on the patched build
- Check the fix did not open a new weakness nearby
- Close out the report with verified status per finding
Specification
What We Run, and What We Measure You Against
The tooling our engineers use on this work, and the published standards the findings and evidence are mapped to.
What Is Examined, and What it Is Measured Against
Map
Map of the Secure Code Review (SCR) scope, running left to right in three stages. Stage one, what we run, 8 tools and techniques: Semgrep, CodeQL, SonarQube, Checkmarx, Fortify, Snyk Code, grep and ripgrep, IDE tooling. Stage two, findings from all of it are proven by hand and written up once. Stage three, measured against 6 published standards: OWASP Code Review Guide, OWASP ASVS, OWASP Top 10, CWE Top 25, SANS/CWE, NIST SSDF (SP 800-218).
What We Run
8 tools
- Semgrep
- CodeQL
- SonarQube
- Checkmarx
- Fortify
- Snyk Code
- grep and ripgrep
- IDE tooling
Converges On
One Set of Proven Findings
Every issue is reproduced by hand before it is written down, and it is written down once.
Measured Against
6 standards
- OWASPCode Review Guide
- OWASPASVS
- OWASPTop 10
- CWEMITRETop 25
- CWESANS, MITRETop 25
- NIST SSDF (SP 800-218)
Deliverables
What You Receive
- Ranked findings report with confirmed, exploitable issues and code-level fixes
- Executive summary tying risk to your critical paths and business impact
- Triaged SAST output separating real issues from noise
- Developer pairing sessions and remediation guidance
- Re-review confirmation once fixes are in place
Scope This Engagement
Tell us about your environment, your timelines and any audit dates you are working to. We come back with scope, effort and a start date.
Which languages and frameworks do you review, and what happens if our stack mixes several?
We review JavaScript and TypeScript, Python, Java, Kotlin, Go, PHP, C# and Swift, and the frameworks normally built on them. Language matters less here than you might expect. The flaws we hunt are access decisions taken in the wrong place, trust placed in a value the user controls, session and token handling that does not hold, and business logic that can be driven into a state nobody designed for. Those read much the same in Go as in PHP; what changes is where a framework hides them, which is why the first phase walks your architecture and trust boundaries with your engineers and agrees which authentication, payment and data-handling paths we read first. Where a stack mixes several of them, we watch the shared paths where they meet, because that boundary is where one service assumes the other already validated something. If your codebase sits outside that set, say so on the scoping call and we will tell you plainly whether we can review it.
Why read the code by hand when we already run SAST, and do we really need both?
You need both, because they do different jobs. SAST is good at volume and poor at judgement: it covers ground quickly, spots repeated patterns and points at places worth looking, but it returns possibilities rather than proof, and the list arrives with no sense of which entries matter. Manual review supplies the judgement. Our engineers read the selected paths line by line, follow data and control flow, and check each access decision against the role model the application is supposed to enforce. That is how flaws in logic, authorisation and trust surface, because they are correct-looking code doing the wrong thing. On this engagement the two are sequenced rather than run together: we tune and triage the scanner output first, cluster repeated alerts into single root causes, then read by hand. Each finding is confirmed reachable and exploitable before it is written down, so what reaches you is proven rather than suspected.
What do you need from us before a review can start?
Read access to the source, a pinned branch or commit, and enough to build and run the application. Manual review cannot be done from a description, and exploitability is confirmed on a working build rather than argued on paper, so build and environment instructions matter as much as the code. Pinning the revision matters too: if the branch moves mid-engagement, findings start referring to lines that have already changed, and the closing re-review loses its baseline. What we do not need is your production data. A local build with representative test accounts is enough, and it keeps real personal data out of the engagement entirely, which is the right answer under the DPDP Act as well as the practical one. If you would rather we worked inside your environment and your access controls, we do, and we stay on the paths agreed in the first phase rather than wandering the codebase. Whatever route you choose, everything is handed back when the engagement ends.
How do findings reach our developers, and can they act on them without a translation layer?
Findings arrive with file and line references and a fix written as a code diff, not as a description. The report is built for the people who have to close it. Each confirmed issue carries its location in the source, a minimal proof of concept showing the path is reachable, a rank based on business impact rather than scanner severity, and a suggested regression test so the fix stays fixed. We also pair with your engineers, walk them through the patterns behind the individual findings, and answer what a report cannot. An executive summary sits on top for the people who need risk tied to your critical paths rather than to line numbers. The phases run in order, so that session follows the manual review and the exploitability work rather than running beside them. Once your fixes land we re-review the changed code, retest each proof of concept on the patched build, and close each finding with a verified status.
Should we review the code or test the running application, and if both, in what order?
Review the code when you want to know why a flaw exists; test the running application when you want to know what an attacker can reach. They find different things. A review sees what is hard to reach from outside: dead authorisation checks, secrets committed to source, and logic that only misbehaves in a state you could not easily drive from a browser. A penetration test sees deployed reality, the configuration, the environment, the version actually running, and the chains that exist only once the parts are assembled. Neither substitutes for the other, and a clean review does not promise a clean deployment. If you must choose one, let the reason decide. An auditor or a customer questionnaire usually wants the running application tested, which is what our VAPT practice covers. A rewrite of your payment or authentication code is the moment for a review, and we will say which on the scoping call.
Related Reading
Articles on Secure Code Review (SCR)
Elsewhere
Other Practice Areas
- ComplianceCertifications and Privacy Programmes Across 13 Frameworks
- VAPTManual, Exploit-Driven Penetration Testing Across 7 Surfaces
- Software Composition Analysis (SCA)Know every third-party and open-source dependency you ship, and every risk it carries.
- Hardening and Configuration ReviewBenchmark-Based Configuration Hardening Across Cloud, OS, Network and Data Tiers
- Managed ServicesOngoing Offensive, Defensive and Advisory Security Run by Our Team