Skip to content
Start a conversation
  1. Home
  2. Services
  3. CodeSight
Application security

CodeSight

AI-Led Code Review · evidence-first · runs on our machines

Review that reads intent and data flow, then proves the finding against a live instance.

189

Vulnerability classes checked

16

Review phases, P0 through P15

LIVE

Findings replayed against a real running instance

0

Source code that leaves our machines

A scanner matches patterns. It has no idea what your code is trying to do, which is why it misses the broken authorization check and flags the string concatenation that was never reachable. Reading intent is the whole job, and until recently it was the part only a person could do.

CodeSightAI is the engine we built to do that work at scale. It uses a language model's reasoning to understand how data moves through your codebase - what a function intends, where the trust boundaries actually sit, which entry points reach which sinks - and then holds that reasoning to account.

It reviews the AI and LLM code itself, not only the application around it. When it finds a model SDK, prompt files or agent and tool definitions, it runs a dedicated phase against the OWASP Top 10 for LLM Applications and MITRE ATLAS: prompt injection, including through retrieved documents, excessive agency, insecure output handling, secrets in prompts and retrieval isolation. Sending us just an agent or a prompt library? We can run the AI review on its own.

Every finding has to carry written evidence: source location, CWE, OWASP category, a CVSS vector, the MITRE ATT&CK technique it would enable - or, for AI findings, the MITRE ATLAS technique - and a narrative explaining how it would actually be exploited. No finding is marked complete until that evidence exists and passes an audit gate.

When the application can be run, we switch on live validation. CodeSightAI stands up a sealed, network-isolated instance of your own application for the review and replays each finding against it, saving the screenshot and the full request and response as proof. The instance is built when the run starts and torn down the moment it stops.

Where a sealed sandbox is not the right place to prove a finding, the same validation can run against an environment you have authorised us to test - your own staging or production-like target. That path is gated: your written attestation is stored first, then every request is checked against an allowlist of hosts and paths, rate-limited per minute, non-destructive unless you say otherwise, credentialled from encrypted storage and logged in full. It drives a real browser session, so single-page applications, WebSockets and data loaded by POST behave as they do for a real user, and a live feed shows what was allowed and what was blocked.

It runs entirely on our own machines, on a model backend we control, and your source never leaves that boundary. Everything the tool reads from a repository is treated as data rather than instruction, so a file that tries to steer the reviewer gets flagged instead of obeyed.

Today we run CodeSightAI as part of our own engagements rather than selling it. We are weighing up licensing it to teams who want to run it in-house - if that would be useful to you, tell us and it will inform where this goes.

A pattern scanner

Sees syntax.

CodeSightAI

Sees intent - then reproduces the exploit against a live, sealed instance to prove it is real.

Same repository, two reports

Most of what a scanner reports is noise

A pattern scanner produces a long list that looks thorough. Apply a real review and much of it falls away - and the flaws that matter most were never on the list, because they match no pattern. The code is tidy. Its logic is wrong.

An illustration of a typical result, not a client report.

Pattern scanner

7 findings
  • High String concatenation in a database query A one-off migration script. Never deployed, never reachable. False positive
  • High Hard-coded secret detected An example value copied from the documentation. False positive
  • Medium Outdated dependency with a known issue Real, but the vulnerable function is never called. Upgrade during routine maintenance. Confirmed, lower risk
  • Medium Weak hash algorithm in use Used for a cache key, not for anything security-relevant. False positive
  • Medium Missing security response headers Real. Two headers are missing on every page. A quick fix. Confirmed
  • Low Debug logging enabled Worse than reported: the debug log writes session tokens in production. Confirmed, higher risk
  • Low Session cookie without SameSite attribute Real, though browsers already default to Lax. Set it explicitly. Confirmed

Not on this list: the settings endpoint resolves a share scope of ".." for an anonymous caller - a full read above the intended directory. No signature fires, because nothing is syntactically wrong.

CodeSightAI

6 findings, 0 false positives, 1 reproduced live
Critical No login required Confirmed Reproduced in sandbox F-028

Broken access control on the settings endpoint via parent-directory scope

An anonymous request resolves a share scope of "..", so the handler joins it onto the share root and lists files above the intended directory - no authentication, no containment check.

handlers/share.go
func (h *ShareHandler) List(w http.ResponseWriter, r *http.Request) {    scope := r.URL.Query().Get("scope")      // from query    path := filepath.Join(h.shareRoot, scope) // ".." escapes root    files, _ := os.ReadDir(path)              // no auth, no check    writeJSON(w, files)}
  • Reproduced against a live, sealed instance, with screenshot and transcript
  • Remote and pre-auth: CVSS 9.1, scope changed
  • Mapped to CWE-639, OWASP A01 and ATT&CK T1190

handlers/share.go:88 · settings.go:471

Also found by CodeSightAI

5 more, 1 missed by the scanner
  • High Report download skips the ownership check A second handler serves any team's reports to any signed-in user. Missed by the scanner
  • High Debug logging leaks a session token Tokens written to the production log can be replayed to sign in. Also flagged by the scanner
  • Low Missing security response headers Two headers, set once in the middleware. Also flagged by the scanner
  • Low Session cookie without SameSite attribute Defence in depth: set it explicitly instead of relying on browser defaults. Also flagged by the scanner
  • Low Outdated dependency with a known issue The advisory's vulnerable function is never called. Upgrade during routine maintenance. Also flagged by the scanner
Under the hood

What the engine does

Reproduced in a live sandbox

Optionally stands up a sealed, network-isolated instance of the target and replays each finding against it, capturing real screenshots and request and response transcripts. It is torn down the moment the run stops, finishes or is killed, and isolation is hardened with a gVisor or Kata runtime.

Beyond the sandbox: an authorised live target

The same replay can run against an environment you have authorised, gated by a stored written attestation, an allowlist of hosts and paths, a per-minute rate limit, non-destructive-by-default mutation control, encrypted credentials and a full audit trail - with a live feed of allowed and blocked requests and one-click evidence capture onto the finding.

189 vulnerability classes

Inventories the repository, maps every entry point and walks each file for real data flow - injection, authentication, access control, SSRF, XXE, CSRF and more.

Sixteen review phases

P0 to P15, run in order: the early phases build the map that the vulnerability phases depend on.

Reviews AI code, not just app code

A dedicated AI/LLM phase covers the full OWASP Top 10 for LLM Applications (2025) and MITRE ATLAS whenever it finds model SDKs, prompts, or agent and tool definitions.

Full review, or AI only

For an agent or a prompt library, the review can run just the AI assessment, so you get exactly the testing that applies to the code you sent.

Evidence for every finding

Each one writes a Markdown evidence file and a database snapshot with source location, CVSS vector, CWE, OWASP category and an exploit narrative.

MITRE ATT&CK and ATLAS

Application findings map to the ATT&CK technique they would most likely enable, and AI findings to MITRE ATLAS, so the report speaks the language your detection and threat teams use.

Nothing quietly dropped

The moment something looks exploitable it is captured and pinned to that file until fully reviewed, so no half-checked lead is lost to a context reset.

An auditable record

One database is the authoritative record of the review, written only through its helper tool and integrity-checked on every resume, so results cannot quietly drift.

Reports in five formats

A print-ready PDF, an editable Word document, a self-contained HTML page, structured JSON, or SARIF for GitHub code scanning and your SAST dashboard - all from the same evidence, and only once the audit gates pass.

The review pipeline

Sixteen phases, run in order

Each phase runs a full coverage matrix rather than a single check - 189 vulnerability classes in all. The early phases build the map - inventory, framework, entry points - that the vulnerability phases depend on. The AI/LLM phase runs after the core review whenever AI code is present, and a completion gate blocks the final phase while any finding is still unvalidated or missing evidence.

  1. P0
    Workspace init the database, schema and audit log the review is recorded in
  2. P1
    Repository inventory files, tech stack, AI artifacts, dead code
  3. P2
    Framework review pack sources, sinks and sanitizers for the frameworks in use
  4. P3
    Attack surface & routes entry points, GraphQL, WebSocket, webhooks, jobs
  5. P4
    Authentication JWT, OAuth/OIDC, SAML, MFA, sessions, resets
  6. P5
    Authorization IDOR/BOLA, function-level access, privilege escalation, tenant isolation, mass assignment
  7. P6
    Injection 36 classes: SQL, command, NoSQL, LDAP, XPath, SSTI, XXE, SSRF, deserialization, prototype pollution
  8. P7
    File handling upload, arbitrary read/write, Zip-Slip, path traversal
  9. P8
    Client-side & XSS reflected, stored and DOM XSS, CSP, clickjacking, client-side token storage
  10. P9
    Secrets, crypto & config hardcoded secrets, CSRF, CORS, TLS, security headers, weak crypto
  11. P10
    Dependencies & supply chain CVEs, typosquatting, lockfile integrity, install-time scripts
  12. P11
    Sensitive data & logging data exposure, log injection, audit trail, privacy
  13. P12
    Rate limiting & DoS brute force, race/TOCTOU, request smuggling, resource exhaustion
  14. P13 · AI
    AI / LLM application security 15 classes: OWASP LLM Top 10 and ATLAS - prompt injection (direct and through retrieved content), excessive agency, tool-call SSRF, output handling, secrets in prompts, retrieval isolation
  15. P14
    Variant analysis & quality gate attack chains, deduplication, evidence completeness
  16. P15
    Report export readiness export integrity, evidence recovery

An authorised live target. Where a sealed sandbox is not the right place to prove a finding, the same replay can run against an environment you have authorised us to test. Your written attestation is stored first; then every request is checked against an allowlist of hosts and paths, rate-limited per minute, non-destructive unless you say otherwise, credentialled from encrypted storage and logged in full - with a live feed of what was allowed and what was blocked, and one-click evidence capture onto the finding. It drives a real browser session, so single-page applications, WebSockets and data loaded by POST behave as they do for a real user.

Live validation. When it is switched on, a sealed, network-isolated instance of the target runs for the whole review: findings are replayed against it as they are raised, and the captured screenshots and transcripts feed the P14 quality gate. The sandbox is built when the run starts and torn down the instant it stops, finishes or is killed - nothing is left running.

Output

What a finding looks like

One record, fully populated.

Critical · 9.1 Remote · Unauth Confirmed Reproduced in sandbox Confidence: High F-028

Broken access control on the settings endpoint via parent-directory scope

An anonymous request resolves a share scope of "..", so the handler joins it onto the share root and lists files above the intended directory - no authentication, no containment check.

Class
Path traversal to broken access control
CWE
CWE-639 · Authorization Bypass Through User-Controlled Key
OWASP
A01:2021 Broken Access Control
CVSS
9.1 · Critical
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
ATT&CK
T1190 Exploit Public-Facing Application
Found in
P5 · Authorization
Status
Confirmed, validated live in sandbox

settings.go:471 · handlers/share.go:88

Vulnerable code

handlers/share.go:88
scope := r.URL.Query().Get("scope")   // from querypath  := filepath.Join(shareRoot, scope) // ".." escapes rootfiles, _ := os.ReadDir(path)             // no auth / check

Attack chain

  1. unauthenticated request
  2. scope=..
  3. Join escapes the root
  4. ReadDir lists the parent
  5. files disclosed

Why it matters

Any unauthenticated caller can walk out of the share root and read arbitrary directories the process can see - configuration, other tenants' uploads, secrets on disk. It is remote, pre-auth, and needs no special conditions, which is why it scores 9.1 with a changed scope.

Suggested fix

handlers/share.go
path := filepath.Join(shareRoot, scope)clean := filepath.Join(shareRoot, filepath.Clean("/"+scope))if !strings.HasPrefix(clean, shareRoot+string(os.PathSeparator)) {    http.Error(w, "forbidden", http.StatusForbidden); return}// and require an authorized session before listing

Live evidence captured in sandbox

  • Proof of concept: GET /api/settings?scope=..%2f..%2f returned 200 OK, listing files above the share root
  • Screenshot of the traversed listing and the full request and response transcript saved to the finding
  • Read-only exploit - no state changed, so no snapshot revert was needed
How it runs

Why teams keep it

  1. It stops when it's stuck, not when the budget runs out

    A no-progress guard ends a run that keeps re-examining blocked work instead of burning tokens in a loop. When a review finishes with items it could not close, it says so plainly - never disguised as failed, or as done.

  2. A control panel, not a black box

    We import the code as an archive, a public GitHub repository or a project package, set the run options, and watch live status, findings by severity, per-phase timing and token accounting, live sandbox status, a source browser, and a full audit trail. When a live target is in use, the same panel shows every request as it is allowed or blocked.

  3. Your code stays put

    The engine runs on our own hardware against a model backend we control. Nothing is uploaded to a third-party review service, and the boundary is written into the engagement agreement. It also runs on fully local models, so if your code must not leave our network, it does not.

  4. It reports complete only when it is

    Findings-audit and evidence-audit gates must both be clean before a review can be called finished. Only then is the report exported - as PDF, Word, HTML, JSON or SARIF - and anything blocked is listed as blocked.

Point it at the code that worries you

Tell us what the application does and what it protects, and we will tell you what a review would take - including whether we can run it in a sealed sandbox to prove each finding live.