Open-source · Local-first

Verify authorization across users, roles, and tenants.

Define expected access by user, role, and tenant. VardrSec compares those rules against real API behavior and reports mismatches with request and response evidence.

What "write the rules down" looks like

A real VardrGate policy. You state how an endpoint should treat each caller; VardrGate runs the request as every one of them and reports where behavior disagrees, with request and response evidence.

profile_ownership.policy.yaml YAML
api:
  endpoint: GET /users/{user_id}/profile
  owner: identity:owner
  resource:
    type: user_profile
    id_param: user_id
    tenant_field: tenant_id

expect:
  owner: allow
  other_user: deny
  anonymous: deny

response:
  deny_status: [401, 403, 404]
  sensitive_fields:
    forbidden_for:
      - other_user
      - anonymous

What it catches

  • potential_bola — a non-owner reached an identified object
  • cross_tenant_access — an identity from another tenant got through
  • missing_authentication — an anonymous caller reached a protected resource
  • sensitive_data_exposure — a caller saw fields it must not (evidence names the fields, never the values)

Run it once, or on every commit:

vardrgate run --job job.json --out result.json

The Tools

Built and maintained in the open. Read the code, run it, tell me what's wrong with it.

VardrGate

Purpose
Verifies API authorization against a declared policy
How it works
Replays one request as every identity and compares the result to the policy
Why it matters
Runs in CI, so authorization is tested on every commit
GoApache-2.0 GitHub →

VardrMap

Purpose
Untracked assets, unanswered testing hypotheses, and incomplete assessment coverage
How it works
Keeps scope, assets, hypotheses, evidence, and findings in one workspace
Why it matters
Tracks what has already been tested, not just what exists
PythonMIT GitHub →

VardrRunner

Purpose
Executes security workflows locally
How it works
Claims queued jobs, runs them locally, and streams results back
Why it matters
Credentials, scan traffic, and tool execution remain on your machine
PythonMIT GitHub →

All tools, including what's still in development →

Who's behind this

VardrSec is built by Jorge Aquino, a software engineer focused on broken access control and practical security tooling. His background in the Marine Corps and emergency services shaped a bias toward clear scope, reproducible evidence, and systems that fail safely.

Security testing requires written authorization and a defined scope. Scope allowlists are compiled into the tools rather than left to memory.

Read the longer version →
Open source Apache-2.0 and MIT. Read the code before you trust it.
Local-first Scans run on your machine. No vendor holds your credentials.

Focus

Authorization is the through-line. Everything here comes back to whether the right caller reached the right resource.

Application & API security

Manual testing of authorization logic, business logic, and injection paths, with reproducible evidence for every reported finding.

OWASP API Top 10 · authorization bypass · session management

Authorization design review

Reviewing a permissions model while it is still cheap to change, and turning the intended rules into something a machine can test.

Tenant isolation · role boundaries · ownership checks

Security tooling

Building and maintaining the open-source tools above, and helping teams wire authorization testing into a pipeline they already run.

CI integration · policy authoring · local-first workflows

Working on something that needs a second pair of eyes?

Whether it's a question about one of the tools, an authorization design you're unsure about, or a review you want scoped—tell me what you're building. If I'm not the right fit, I'll say so and point you somewhere better.