Security that ships
as a pull request.
Perfai Security is black-box AppSec for engineers. Point it at staging or a spec. Get reproducible exploits, a typed model of your API, and a scoped PR that closes the bug. Runs in CI on every commit.
$ npx perfai scan --target https://staging.acme.dev \
--spec ./openapi.yaml
→ mapping surface .......... 142 routes, 38 auth-scoped
→ synthesizing payloads .... 8,412 cases
→ running adaptive attacks . OK
HIGH BOLA GET /api/v2/invoices/:id
MED SSRF POST /api/v2/webhooks/test
MED AuthZ GET /api/admin/users
✓ opened PR #4412 · patch verified · exploit failsThe classes that actually get you breached.
Perfai Security prioritizes the bug classes that show up in real incident reports, not the ones that pad a CVSS table. Every finding includes a working exploit and the exact patch that closes it.
Authorization checks missing on object IDs. Perfai Security fuzzes path and body params across tenants and proves cross-account reads.
User-controlled URLs hitting internal services. We probe metadata endpoints, link-local ranges, and DNS rebinding.
SQL, NoSQL, OS command, and template injection. Time-based and error-based oracles, no source needed.
Indirect injection through documents, RAG sources, and tool outputs. Tested against your real prompt graph.
Map. Attack. Patch. Re-test.
Staging URL, an OpenAPI spec, or a Postman collection. Optional service account for authenticated routes. SSO and short-lived tokens supported.
Crawls routes, parses your spec, infers auth boundaries, and builds a typed graph of endpoints, params, and roles.
Per-endpoint payload synthesis. Stateful chains for multi-step bugs. Every finding ships with a curl repro and HTTP transcript.
Diff scoped to the smallest safe change. Re-tests the patch in an ephemeral branch and only marks resolved when the exploit fails.
# .github/workflows/perfai.yml
name: perfai
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: perfai/action@v1
with:
target: ${{ secrets.STAGING_URL }}
spec: ./openapi.yaml
token: ${{ secrets.PERFAI_TOKEN }}
fail-on: high{
"id": "F-9c41",
"severity": "high",
"cwe": "CWE-639",
"endpoint": "GET /api/v2/invoices/:id",
"evidence": {
"actor": "user_A (org_1)",
"target": "invoice_8821 (org_2)",
"status": 200,
"leaked": ["customer_email","total_cents"]
},
"repro": "curl -H 'Authorization: Bearer $A' \\
https://api.acme.dev/api/v2/invoices/8821",
"fix_pr": "https://github.com/acme/api/pull/4412"
}No queue. No triage. No security ticket purgatory.
Old AppSec produced a CSV. You owned the rewrite. Perfai Security produces a diff. You review and merge. If the patch does not kill the exploit, the finding does not close.
Engineer questions, answered straight.
How is this different from DAST tools like ZAP or Burp?+
Legacy DAST fuzzes blindly and floods you with noise. Perfai Security builds a typed model of your API first, then synthesizes payloads per-endpoint with awareness of auth, state, and tenancy. You get exploits, not alerts.
Do you need source code?+
No. Perfai Security works black-box against a running environment. If you want richer fixes, connect the repo and Fix Agent will scope diffs to the smallest safe change.
How do you handle authenticated routes?+
Service accounts, refresh tokens, OAuth client credentials, SAML assertions, or a login script. Perfai Security rotates identities to test BOLA and tenant isolation across roles.
Can I run this in CI?+
Yes. GitHub Actions, GitLab CI, CircleCI, and Jenkins. Gate PRs on severity, post results as PR comments, and re-test on every push.
What about LLM endpoints and agents?+
Perfai Security tests prompt injection, tool abuse, system prompt leakage, and unsafe tool chains. Works against OpenAI, Anthropic, Bedrock, and self-hosted models.
Is the traffic safe?+
Payloads are non-destructive by default. Write operations are gated behind explicit allow-lists and run only against environments you tag as non-prod.
Ship secure AI apps
Try Perfai Security now
Point us at a URL. First finding in under 20 minutes. No credit card.
