Gitsentry.dev
GitHubPricingInstall AppSign in
security review · every pull request

AI writes the code.
We secure it.

Hardcoded secrets, IDOR, SQL injection, missing auth checks. Gitsentry finds them on the pull request, before anything merges.

Install GitHub App →View source

Secures code written with

Cursor
Copilot
Claude Code
Gemini
Windsurf
0
Repos protected
0
Issues caught
0
Critical vulns stopped
0
Scans run

// setup guide

Setup in Under 5 Minutes

Watch this short tutorial to learn how to set up and use Gitsentry.dev to automatically scan your code for vulnerabilities on every pull request.

Security Scan · PR #47
gitsentry.dev · setup
Runs on every pull request
37 vulnerability categories
Every finding re-checked
Blocks unsafe merges · Pro
Frontier models

The problem

AI tools write code fast. Security review didn't get faster with them.

AI tools ship code that works. Nothing in them checks how it holds up against someone trying to break it.

The output reads clean, the tests pass, a teammate approves it in ninety seconds. The IDOR ships with it.

src/routes/users.js
// AI-generated code. Looks fine at first glance
router.get('/users/:id', async (req, res) => {
const user = await db.query(
`SELECT * FROM users WHERE id = ${req.params.id}`
);
// No ownership check. Any user can fetch any ID.
🔴 CRITICAL · IDOR · line 4

The solution

The finding appears before the merge

The review comment shows up the moment your push lands, right where your team already works.

gitsentry.devcommented just now

🔐 Gitsentry.dev Security Scan

Found 2 issues in this PR (1 critical, 1 high)


🔴 CRITICAL — Hardcoded Secret

File: src/services/payment.js · Line: 12

const stripeKey = "sk_live_abc123...";

Issue: Live Stripe secret key hardcoded in source. Anyone with repo access can use this key.

Fix: Move to process.env.STRIPE_SECRET_KEY and rotate the exposed key immediately.


Powered by Gitsentry.dev · View full report · False positive?

Threat coverage

What Gitsentry catches

37 categories in six families, written against the mistakes AI coding assistants make rather than ported from generic SAST rules.

critical

Hardcoded Secrets

Live keys and tokens committed into source. Matched by format rules, so these never come back as a model's guess.

critical

Missing Auth

A route lands with no authentication check, or a PR deletes the one that was guarding it.

critical

IDOR

A user-controlled ID reaches a query with nothing verifying who owns the record.

critical

Injection

User input shaping SQL, NoSQL query operators, shell commands, templates, or an LLM prompt.

critical

Attack Chains

Two changes that each look fine and combine into a path an attacker can walk.

high

Race Conditions

A check and the action it guards sitting far enough apart for a second request to slip between them.

Full coverage

All 37, on every plan, in PR scans and sweeps alike

Injection and taint
SQL · NoSQL · Command · Template · LLM prompt · SSRF · Path traversal · XSS · Open redirect · Unvalidated input
Access control
Missing auth · IDOR · Privilege escalation · Mass assignment · Password reset · Session management · CSRF
Secrets and exposure
Hardcoded secrets · Token leakage · Sensitive data · Insecure storage · Verbose errors · Crypto misuse
Logic and timing
Business logic abuse · Race conditions · Replay · Timing attacks · Cache poisoning · Missing rate limits
Platform and supply chain
CORS · Security headers · Debug exposure · Cloud config · Dependency risk · File upload · Deserialization
Composite
Attack chains spanning several files or commits

Gitsentry drops the categories your project type rules out before the scan runs.

Signal over noise

A scanner nobody trusts gets muted in a week

Six layers sit between a model's guess and your pull request.

Taint paths, not pattern matches

Each finding has to name the untrusted source, the sink it reaches, and the control that is missing. “This function doesn’t check ownership” gets thrown out. “This route is reachable without an ownership check” gets reported.

A second model argues against it

One call hunts. Another re-reads the same diff and tries to disprove every candidate. Findings it cannot pin to your code get dropped before the comment posts.

Credentials match on format

AWS keys, GitHub tokens, Stripe live keys, and private key blocks are caught by pattern rules. No model gets a vote on those, and they outrank it when both flag the same line.

It works out what it is reading

Gitsentry classifies your project first (API service, static frontend, CLI, library) and drops the categories that cannot apply. A static site never gets asked about SQL injection.

It learns from your dismissals

Mark a category as a false positive twice in one repo and Gitsentry demands proof of an exploitable path before raising it there again.

A failed scan says failed

When a scan breaks on our side, we refund the credit and label it failed. A scan that never finished never shows up in your dashboard as clean.

Security sweeps

One diff at a time misses the chain.

A PR scan reads one diff. A sweep reads your recent history on the default branch as one body of work: attacker profiles, entry points, trust boundaries, then the paths that run through several commits.

You get a threat model and named attack chains alongside the findings. Sweeps run on a stronger model than PR scans. Run one after a big refactor or the week before a launch.

Every plan includes sweeps. Free gets one to try, Starter one a month, Pro ten. Compare plans.

Sweep report

// threat model

Attacker: authenticated tenant user
Entry: POST /api/invites, PATCH /api/orgs/:id
Asset: org membership rows

// attack chain

1. invite accepts a role field from the body (a1b2c3d)

2. role is written straight to memberships (e4f5g6h)

3. the org guard trusts that same role column

→ any member invites themselves an owner

Neither commit is a finding on its own.

// how it works

From PR event to security review in seconds

From install to first finding in under two minutes.

01

Install the GitHub App

One click, no config files.

02

Open a PR

Gitsentry reads the diff, the lines around it, and what your repo already does for auth.

03

Findings land inline

Exact line, severity, and a concrete fix, posted in the PR. Push again and Gitsentry edits the same comment.

04

Answer back

Comment /gitsentry rescan to re-run on the current HEAD. Put auth that lives outside the repo in .gitsentry/context.md and every scan reads it.

MIT Licensed

Open source and self-hostable

Read the prompts, run the scanner on your own infrastructure, keep findings in your own database. Point it at Gemini, an OpenAI-compatible endpoint, or a model you host. Your diffs go to the AI endpoint you configure and nowhere else.

View source on GitHub

Get started

Secure your PRs. One click.

Free for public repos, forever. No config required. Most teams see their first finding within two minutes of opening a PR.

Install GitHub App, it's free →
Gitsentry.dev

Security scanning for the AI era.

Product

HomePricingStats

Legal

PrivacyTermsRefund

Connect

GitHub[email protected]

© 2026 Gitsentry.dev · a Charavol product

Payments processed by Paddle