Multi‑lens code security audit

See it all, in one pass.
Multi‑lens code security auditing.

Audit from a single angle and something always slips through. sec-audit reviews your source code through six deliberately different lenses, catching the vulnerabilities one angle misses. Every finding ships with a runnable proof-of-concept (PoC) and a regression test — and the report shows exactly how far the audit reached. The audit is carried out by us, working hand in hand with your team.

6 lensesmulti-angle audit
PoC + testsattached to every finding
StandardsOWASP ASVS / CWE / CVSS
sec-audit dashboard: uploaded audits with their phase and status
Our internally operated audit console. No action is needed on your side — we report progress and results to you.
§ 01 — THE PROBLEM

"We got it audited. But is it really safe?"

Even after a security assessment, these doubts tend to linger.

No proof of coverage

No evidence you "looked everywhere"

Reports list only what was found. What wasn't examined — and what risk remains — stays invisible, so there's no real basis for confidence.

One angle isn't enough

A single pass misses things

Scanners and one-shot AI reviews only catch what their angle is good at. Broken authorization, business-logic flaws and misconfig need a change of perspective.

Findings you can't act on

No reproduction code

"Possible XSS" with no steps and no PoC means the dev team can neither start nor verify the fix.

Ad-hoc severity

Priorities are fuzzy

Inconsistent severity makes it hard to know what to fix first — and hard to explain to leadership.

Regressions

Fixed once, reintroduced later

Without a regression test, the same hole comes back in the next release. It never becomes a durable fix.

Inconsistency

Results vary by who audits

Outcomes depend on the reviewer's experience. The same code yields different findings depending on when and who looks.

§ 02 — WHY A SINGLE PASS MISSES

Same code — what you find depends on the angle.

Each class of vulnerability has an angle it shows up best from. Some flaws are only visible when you follow the data flow; some authorization gaps only surface when you trace the business flow; some risks only appear when you comb through config and dependencies. Fix on one angle and its entire blind spot disappears.

1 lenscatches only the tip of the iceberg
6 lensesoverlap to cover each other's blind spots
One lens Six lenses (multi-angle) › comprehensive review only data-flow / threat / ASVS / sinks / business / broad
Same code — the number of vulnerabilities you find changes with the number of lenses (illustrative)
foundmissed
§ 03 — HOW IT WORKS

Audit from six angles, consolidate, attach the proof.

sec-audit reviews your codebase independently through six deliberately different lenses, then reconciles what each one found into a single, superior list.

LENS 1

Data flow

Trace untrusted input from source to dangerous sink.

LENS 2

Threat model

Apply spoofing / tampering / disclosure threats per trust boundary.

LENS 3

Standards (ASVS)

Verdict OWASP ASVS requirements chapter by chapter, building a coverage ledger.

LENS 4

Dangerous sinks

Sweep SQL, command, file and outbound calls by category.

LENS 5

Business flow

Follow login, authorization and billing flows to catch IDOR and privilege gaps.

LENS 6

Comprehensive

A baseline pass across the OWASP Top 10.

Upload→ Map attack surface→ Audit through 6 lenses→ Consolidate→ Generate PoC + tests→ Full report set
Completed audit: phase progress, deliverables, and a vulnerability summary
Completed audit — phase progress, deliverables and a vulnerability summary on one screen
§ 04 — SHOWING HOW FAR WE LOOKED

We report the degree of coverage — not just the count of findings.

Most assessments only show what was found. sec-audit also states how much of the recognised standard was verified and which areas remain unchecked — so confidence rests on numbers and evidence.

Coverage check

Verify the key standard items

Each OWASP ASVS requirement is judged pass / fail / not applicable. A ledger records what was examined and where things were healthy.

Honest remainder

Unchecked areas are disclosed

Anything static analysis cannot confirm (runtime config, actual values) is flagged as "not yet verified", with the recommended next step (dynamic testing).

Measure improvement

See the delta on re-audit

Re-audit after fixes to compare coverage and residual risk in numbers. Use it as a continuous quality gate.

Coverage check against OWASP ASVS key areas — sample audit
Authentication
Session management
Access control
Input validation
Cryptography
Errors & logging
Data protection
Files & resources
Configuration
Verified (pass) Issue found Not yet verified
* Figures are from an anonymized sample audit. "Not yet verified" areas are recommended for dynamic follow-up.
§ 05 — SAMPLE OUTPUT

Real audit output (anonymized sample)

Below is an excerpt from an actual audit of a web app. All targets and identifying details are anonymized.

Target

Anonymized sample: a Flask document-management web app (~8k LOC)

Audited through six lenses. Where a single-angle audit would surface ~10 issues, sec-audit found 30 vulnerabilities.

30vulnerabilities found (Critical 1 / High 13 / Medium 12 / Low 4)
~3×vs. a single-angle audit
Allwith CVSS score and fix priority

Severity heat map

SeverityCountRepresentative issues
CRITICAL1Protected endpoints with authentication effectively disabled
HIGH13SSRF, XSS (×3), plaintext secrets, wildcard CORS, unauthenticated file access (×3), known-CVE dependencies, denial of service (×2), and more
MEDIUM12Path traversal, no account lockout, unvalidated input, log tampering, unbounded upload size, and more
LOW4Timing-based inference, verbose error disclosure, missing external-resource integrity, and more

Individual report examples (5 representative)

Every one of the 30 findings gets a report at this depth. Below are five (all anonymized). Each ships with the offending code, a fix, a proof-of-concept (PoC) and a regression test.

F-001CRITICALCWE-284 · CVSS 4.0 = 9.1

Authentication bypass from decorator ordering (5 endpoints)

Found by: comprehensive · data-flow · threat-model · ASVS · sinks · business-flow (6 lenses)

The authentication decorator was written in the wrong order, so on five "auth-required" endpoints authentication was never actually applied. An unauthenticated attacker could freely upload and retrieve files that were meant to be protected.

Impact: theft of sensitive files, arbitrary file upload (a foothold for stored XSS). Fix: swap the order at the 5 sites (5 lines, immediate).

Fix (before / after)
# Before (vulnerable): auth decorator above route → never applied
@login_required
@app.route('/files/<name>')
def download(name): ...

# After (fixed): just swap the order
@app.route('/files/<name>')
@login_required
def download(name): ...
✔ Repro steps✔ Code evidence✔ Fix✔ PoC✔ Regression test
F-002HIGHCWE-918 · CVSS 4.0 = 8.7

SSRF in a URL-fetch feature (internal network reachable)

Found by: comprehensive · data-flow · threat-model · sinks · business-flow (5 lenses)

A URL-import feature fetched the supplied URL with no scheme validation, host restriction or timeout. An authenticated user could reach internal services and cloud metadata (IAM credentials), enabling internal API scanning and credential theft.

Impact: disclosure of internal APIs and cloud credentials. Fix: validate scheme, block internal IPs, disable redirects and set a timeout.

Fix (block internal IPs / metadata)
def is_safe_fetch_url(url):
    p = urlparse(url)
    if p.scheme not in {'http','https'}: return False
    ip = ipaddress.ip_address(socket.gethostbyname(p.hostname))
    if ip.is_private or ip.is_loopback or ip.is_link_local:
        return False        # block internal / cloud metadata
    return True

resp = requests.get(url, allow_redirects=False, timeout=10)
✔ Repro steps✔ Code evidence✔ Fix✔ PoC (proves internal reach)✔ Regression test
F-003HIGHCWE-79 · CVSS 4.0 = 8.2

XSS in Markdown rendering (incomplete sanitization)

Found by: comprehensive · data-flow · ASVS · sinks · client-side (5 lenses)

Markdown-to-HTML rendering was incompletely sanitized, allowing arbitrary code to run in a viewer's browser. Only an exact <script> match was stripped, so <img onerror=…> slipped through. The bundled DOMPurify was not being used.

Impact: session-cookie theft, account takeover. Fix: sanitize with the already-bundled DOMPurify before rendering.

Code evidence → fix
// Vulnerable: only exact <script> removed → onerror attribute slips through
html = html.replace(/<script>/gi, '').replace(/<\/script>/gi, '');

// Fix: use the bundled DOMPurify
return DOMPurify.sanitize(html, {
    FORBID_ATTR: ['onerror','onload','onclick'],
    FORBID_TAGS: ['script','iframe','object']
});
✔ Repro steps✔ Code evidence✔ Fix✔ PoC (attack HTML)✔ Regression test
F-004HIGHCWE-312 · CVSS 4.0 = 8.5

API keys, passwords and secrets stored in plaintext

Found by: comprehensive · threat-model · ASVS · sinks · config/deps (5 lenses)

The config file stored the session key, external API keys, mail credentials and user passwords in plaintext. If that file ends up in the repo or a backup, or is exposed by a misconfig, every credential leaks at once.

Impact: session forgery, takeover of external services, billing abuse. Fix: move to environment variables / a secrets manager and exclude the file from version control.

Code evidence (values masked) → fix
# config.yaml — secrets stored in plaintext (values hidden)
secret_key:        "***"   # session forgery possible
ai_api_key_a:      "***"   # external AI service billing abuse
ai_api_key_b:      "***"
mail_app_password: "***"   # mail account takeover
users.*.password:  "***"   # user credentials

# Fix: move to env vars; keep the config file out of version control
app.secret_key = os.environ["APP_SECRET_KEY"]
✔ Detection script (PoC)✔ Impact list✔ Migration steps✔ Regression test
F-022HIGHCWE-306 · CVSS 4.0 = 7.3

Denial of service via an unauthenticated bulk-processing endpoint

Found by: threat-model · business-flow (only 2 lenses)

A heavy bulk-processing endpoint had neither authentication nor rate limiting. An unauthenticated attacker could spawn unbounded worker threads just by calling it repeatedly, exhausting CPU, memory and file handles until the service stops.

Impact: full outage (loss of availability). Fix: add authentication, rate limiting and a concurrency guard.

Code evidence → fix
# Vulnerable: no auth, no rate limit, no thread cap
@app.route('/bulk-extract')        # ← no auth / rate limit
def bulk_extract():
    threading.Thread(target=extract_all).start()   # unbounded spawn

# Fix: auth + rate limit + concurrency guard
@app.route('/bulk-extract')
@login_required
@limiter.limit("2 per minute")
def bulk_extract(): ...
Note: this one was found by only the threat-model and business-flow lenses. It's a textbook case of what a comprehensive-only check misses — the value of multi-angle auditing, made concrete.
✔ Repro steps✔ Code evidence✔ Fix✔ PoC (proves DoS)✔ Regression test
+ Executive summary (1 page)

A summary for decision-making, too

Alongside the technical report, we attach a one-page summary of business risk (data leakage, outage, credential compromise) and "what to do this week", in language non-technical stakeholders understand.

Individual report example: CWE, CVSS, lenses, offending code, repro steps
Individual report example — CWE, CVSS 4.0, the lenses that found it, the offending code and repro steps, per finding
§ 06 — DELIVERABLES

What you receive after the audit

We don't stop at "found it". You get everything your team needs to fix it directly and prevent regressions.

01

Vulnerability list

A consolidated, superior list with severity, CVSS score and fix priority.

02

Individual reports

One file per vulnerability: CWE class, repro steps, code evidence, before/after fix.

03

Proof-of-concept (PoC)

A script that actually triggers the vulnerability — concrete proof the attack works.

04

Regression tests

Tests that fail on the vulnerable code and pass once fixed. Wire them into CI to block recurrence.

05

Coverage report

How far the recognised standard was verified, and what remains — the basis for confidence.

06

Executive summary

Business risk and a remediation roadmap on one page — ready for decisions and reporting.

§ 07 — POSITIONING

What makes it different.

It combines the coverage visibility and the actionable evidence that a lone scanner or a single review can't provide together.

DimensionManual pentestAutomated scanner
(SAST/DAST)
One-shot AI reviewsec-audit
Multi-angle auditingreviewer-dependent✗✗✔
Coverage made visible△✗✗✔
PoC attached✔✗rare✔
Regression tests attached✗✗✗✔
Standards-based (ASVS/CWE/CVSS)reviewer-dependent△△✔
Reproducible / consistentlowhighmediumhigh
Cost / speedcostlyfastfastfast
§ 08 — WHAT WE STAND ON

Judgments are grounded in the industry's common language.

Not "trust us, it's our own scale" — we audit, classify and score against standards used worldwide, so the results are explainable to third parties.

Verification requirements

OWASP ASVS

The de-facto standard for web-app security verification. Used as the pass/fail criteria for what must be satisfied.

Vulnerability taxonomy

CWE

Every finding is classified with the standard MITRE CWE taxonomy — a shared vocabulary.

Severity scoring

CVSS 4.0

Reproducible, explainable severity scoring that makes prioritization defensible.

§ 09 — WHERE IT FITS

Where it pays off.

Pre-release final check

Surface vulnerabilities with a coverage trail before you go live. Launch with confidence.

M&A / investment due diligence

Assess the security health of a target's code assets with a standards-based report.

Periodic re-audit

Re-audit each quarter and track coverage and residual risk in numbers.

In-house quality gate

Wire the regression tests into CI to mechanically block the same vulnerability from returning.

Vendor deliverable acceptance

Audit outsourced code from a third-party angle before acceptance, returning findings with concrete evidence.

Post-incident review

After an incident, sweep for similar holes elsewhere from a fresh set of angles.

§ 10 — SECURITY & TRUST

Answers to safety and operational concerns

Confidentiality

Code is handled in isolation

Code you entrust to us is analyzed by us in an environment isolated per engagement (under NDA; deleted after the work). The audit is primarily static (reading the code) and does not send it externally.

Honest limits

We don't hide "unknown"

Anything static analysis can't confirm (runtime config, actual values) is stated as "not yet verified" — neither overstated nor understated. We do not guarantee zero residual risk; we raise coverage with our multi-lens method and show how far it reached, in numbers.

Handling false positives

Confidence is stated

Findings we couldn't corroborate are marked "confidence: low". We don't present guesses as certainties.

Reproducibility

Not reviewer-dependent

Because we audit against standards, coverage is consistent whenever it runs.

§ 11 — ACADEMIC BACKING

Our method is published as an academic preprint

It documents the design rationale, the evaluation method and the empirical data so third parties can verify the methodology. sec-audit's multi-lens audit is based on this research.

VSAT: Measurable-Completeness Multi-Lens LLM Auditing for Web Application Vulnerabilities

Hirashima, Daishiro (Toyo System Co., Ltd.) ·  Preprint ·  2026 ·  DOI: 10.5281/zenodo.21402202

The method audits one codebase through several different lenses and, from the overlap structure of what they find, statistically measures "how completely the vulnerabilities were discovered". Across three benchmark apps it achieved 94.7–100% category recall and 2.4–3.4× more vulnerabilities than a single-pass audit.

Zenodo preprint ·  https://zenodo.org/records/21402202
Read the preprint (PDF) ↗
§ 12 — FAQ

Frequently asked questions

Which languages and frameworks are supported?

Major web-app stacks (various server-side languages and frameworks, plus the front end). We tune which lenses to emphasize to the target's makeup. Ask us for specifics.

How is this different from a penetration test?

A pentest mainly attacks a running service from the outside. sec-audit reads the source code from multiple angles; its strengths are coverage visibility and fix-ready PoCs and regression tests. The two are complementary — we recommend dynamic pentesting to corroborate after the important fixes.

Do you do dynamic verification (actually attacking)?

The core is static source analysis. If you provide a running URL, triggering some PoCs against the live environment is also under consideration.

Does a low coverage figure mean "dangerous"?

No. Coverage honestly reflects how much remains unverified; apps with a broad attack surface naturally leave more margin. It's not danger itself — think of it as a map of "how far we looked / what to look at next".

Are audit results kept confidential?

Yes. Code is handled in an environment isolated per engagement, and deliverables are treated under confidentiality. We explain the specific terms when you get in touch.

How large a codebase can you audit?

From small apps to large codebases. We set a focus scope by size to get the most coverage within the available time.

How is pricing structured?

Pricing is a quote based on the scope and duration of the engagement (a professional-services / quasi-mandate engagement). We estimate it after hearing your codebase size and scope. Please get in touch.

What kind of contract is this?

A professional-services (quasi-mandate) engagement. We work alongside your team with due professional care, drawing on your knowledge through interviews to carry out the audit together. It is not a build-to-completion contract; we provide the reports and outputs that emerge through the engagement.

§ 13 — HOW WE WORK

A hands-on, quasi-mandate engagement

Rather than one-sidedly delivering a finished product, we carry out the audit together with your team, learning your context as we go. We provide professional services with due care — this is not a build-to-completion contract.

Inquiry & NDA→ Receive code & scope interview→ Multi-lens audit (carried out by us)→ Hand over vulnerability list, PoCs, tests, coverage report→ (Optional) re-audit after fixes
§ 14 — CONTACT

Is your code really safe?
We hand you "how far we looked", too.

Start with a free consultation. Tell us the target and goal, and we'll propose the right audit scope.

Contact us — free consultation