Trusted by teams at
Founded by the creator of Kontra Application Security Training.
AI security From the first prompt to autonomous agents
Hands-on exercises for every employee who uses AI tools, and deeper tracks for the engineers building with LLMs, agents and MCP. Compliance teams get the EU AI Act.
Explore the AI security catalogue
For every employee
Application security for developers
Five hands-on tracks in a simulated workstation. Exploit a real bug on the surface your team actually ships, then write the fix yourself.
$ login --user admin password: [ok] authenticated 1,284 rows exfiltrated
A single quote in a lookup form empties the customer table.
// concatenated input query(`... id = ${id}`) ✗ // parameterized query('... id = ?', [id]) ✓
Bind user input as a parameter and the quote stays data, never code.
$ GET /api/trips/50318 retry: 200 OK · rider_id 8814 another rider's receipts
Change one id in the path and the API hands over another rider’s trips.
// authenticated, not authorized return db.trip(req.params.id) ✗ // check the object owner if (trip.riderId !== me) return 403 ✓
Authentication proves who is calling. Only an owner check proves they may.
$ git log --all -p grep: commit 9f8e7d6 live key, deleted at HEAD
The key is gone from HEAD and still live three commits back.
// removed in a later commit git rm config/secrets.js ✗ // rotate first, then rewrite git filter-repo --invert-paths ✓
Rotate the credential first. A history rewrite alone does not un-leak it.
$ docker history checkout-api:1.4.2 layer: sha256:9c1f4e7a · 184 MB secret readable in the layer
Anyone who can pull the image can read the layer that built it.
// baked into the image ENV STRIPE_KEY=sk_live_... ✗ // mounted, never committed RUN --mount=type=secret,id=stripe ✓
A BuildKit secret mount lets the build read a value it never stores.
$ aws s3 ls --no-sign-request bucket: 4,102 objects listed patient exports downloadable
A support note names the bucket, and the bucket answers anonymously.
// public read on the bucket Principal: "*" ✗ // block public access, scope the reader Principal: cloudfront-oac ✓
Block public access, then let one named reader through the front door.
Covers the languages your team ships in
The vulnerable code and its fix are shown in the language your developers work in every day.
- JavaScript
- TypeScript
- Java
- C#
- Python
- Scala
- PHP
- Ruby
- Go
- Kotlin
- Secure-coding practice for injection, broken access control, XSS, CSRF, and SSRF
- Exploit and remediation side by side, so developers leave knowing the fix
- Built for engineering teams in PCI DSS 6.2 and secure-coding programs
Phishing simulations
Test your workforce against realistic phishing attacks delivered through direct mailbox injection. Track the full funnel from delivery to credential submission, and auto-assign targeted training to employees who click.
- M365 and Google Workspace direct injection bypasses spam filters
- Outlook and Gmail reporter buttons capture real-time employee reports
- Full-funnel analytics: delivered, opened, clicked, credentials, reported
- Auto-remediation assigns exercises to employees who fail simulations
- Smishing add-on runs the same test over SMS, where no email gateway filters the lure
Inside the phishing add-on
Real screens from the admin console.
Human risk management
Every employee gets a 0 to 100 risk score you can trace back to the events behind it. Rules then assign training to the people who need it. Included in every plan.
- A score per person, 0 to 100 Built from simulation and drill outcomes, phish reports, training status and a baseline assessment that finds each person’s knowledge gaps in two-minute weekly check-ins. Recent behavior counts most, and everyone lands in a Low, Moderate, High, or Critical band.
- Every score shows its work Open any score to see its five weighted sub-scores and the events behind it. Managers and admins can trace any number to the exact simulations, reports, and lessons that produced it. No dark web, no profiling.
- Bring your own signals and data Push risky sign-ins, SOC alerts, and privilege flags from your SIEM, identity provider, or a script over a REST API, or upload a CSV. Define custom signal types for anything the catalog misses, and dry-run every import before it lands.
- Warnings in the browser A free Chrome and Edge extension warns people on look-alike sites, new domains and risky consent screens, offers a 60-second lesson, and feeds what they chose into the score.
- Rules act on the score Auto-enroll remediation the moment someone crosses a threshold and alert their manager. Dry-run every rule first, with an audit log and a kill switch.
Talk to us about your rollout
Tell us your team size, your LMS and the frameworks you report against. We will show you the exercises, campaigns and reports that fit.





