Chokepoint
Open demo
OWASP Agentic AI Top 10 • ASI03 Identity & Privilege Abuse • Least-privilege • Tamper-evident

A chokepoint for
sensitive ops —
human and agent,
with dual-control, hash-chained audit, and explainable anomaly detection. Proof over claims.

Chokepoint answers one question: how do you let people — and increasingly, AI agents — perform high-impact actions without giving anyone enough authority to abuse it? Role-based auth, working two-person approval, SHA-256 hash-chained HMAC-signed audit log, anomaly detection. No real tenant data. No hardcoded secrets. 26 tests that prove the security properties, not toy smoke tests.

Open live dashboard Explore demo accounts
Live • HMAC-signed • Hash-chained • 26 tests pass • 0 vulns
Viewer / Operator / Auditor / AdminRequester cannot approve ownBreak Glass monitoredSHA-256 + HMAC-SHA256 + MerkleRisk 0-100NIST + OWASP + SOC2 + MITRE
4-eyes • Distinct approver • Sealed

Dual-control — Two-person rule

Irreversible actions need a second, distinct, authorized approver. Requester cannot approve own. 15min expiry. Break Glass excluded, monitored, alert on use.

Proof: authz.test.ts proves distinct-approver + authorized-approver

SHA-256 • HMAC • Merkle

Tamper-evident ledger — Hash chain + HMAC

Every event SHA-256 hash-chained prevHash, HMAC-SHA256 signed with secret. Edit/delete/reorder/re-sign breaks chain and is provable. Merkle inclusion proofs.

Proof: ledger.test.ts detects altered, deleted, reordered, re-signed

Risk 0-100 • 5 signals • Human reasons

Anomaly detection — Explainable

Failed logins, after-hours privilege, unknown sources, privilege escalation, automation, impossible travel surfaced with human-readable reasons. Risk index 0-100.

Proof: anomaly.test.ts signals fire on intended conditions

4 roles • Default-deny • Session TTL

RBAC — Least privilege by default

Viewer / Operator / Auditor / Admin. Single policy gate on every action. Default-deny, explicit allow. Session TTL, CSRF, HttpOnly SameSite=Strict signed cookie.

Proof: authz.test.ts policy matrix + fail-closed

6 tests • Dry-run • Clone

Policy simulator — Dry-run before prod

6 default tests dry-run clone policy. What If impact before approval. Report-Only first. Clone and test without touching prod ledger.

Proof: policySimulator.ts + /api/policy-simulate

4 formats • 5 frameworks • ASI03

SIEM export + Compliance mapper

Export JSON / CEF / OCSF / LEEF. Map to NIST, OWASP ASI03, SOC2, MITRE, ISO27001. Impersonation detector for agent_as_human, human_as_agent, role_spoof, session_hijack, token_replay.

Proof: siemExport.ts + complianceMapper.ts + impersonationDetector.ts

Tests that prove security properties — not toy smoke tests

ledger.test.tsDetects altered payloads, deleted entries, reordered entries, re-signed wrong-key
authz.test.tsPolicy matrix + dual-control distinct + authorized approver, fail-closed
crypto.test.tsPBKDF2 salted timing-safe, HMAC keyed signatures, no hardcoded secrets
anomaly.test.tsSignals fire on failed logins, after-hours, privilege escalation, automation
26 tests pass0 vulns • npm auditNext 16.3.5 • React 19.2.8

Military-grade hardening — 10 upgrades

1. Encrypted sessions & audit: dual-control 4-eyes, hash-chained HMAC-SHA256 ledger, correlation ID tamper-evident

2. RBAC & least privilege: Viewer Operator Approver Admin, default-deny, separation of duties, TTL + CSRF

3. Break Glass: excluded from approval flows, monitored alert, password in vault, runbook tested quarterly

4. Tamper-evident ledger: SHA-256 chain + HMAC signed secret env, Merkle proofs, /api/audit/verify

5. Zero Trust: verify every request, device trust scoring, OWASP ASI03 mapped

6. Headers: nosniff, DENY, strict-origin, Permissions-Policy, CSP self-only, HSTS 63072000

7. No secrets: no hardcoded PATs, grep ghp_ clean, no real tenant, no tracking

HMAC-signedHash-chainedMerkleBreak GlassCSP self-onlyHSTS 63072000Zero TrustOWASP ASI03

Live Mandates — Dual-control queue

P1 • Critical • HMAC-signed
P1PRIV-001Risk 92pending approval

Escalate operator to admin for incident response

Approver: Distinct required • Requester cannot approve own • 15min expiry

P1FLEET-004Risk 95pending approval

Wipe fleet of 50 devices — lost shipment

Approver: Admin + Auditor • Requester cannot approve own • 15min expiry

P1AGENT-002Risk 88in review

Grant agent billing write access to production

Approver: Admin only • Requester cannot approve own • 15min expiry

P2COMPLIANCE-005Risk 67pending approval

Disable DLP policy for external sharing

Approver: Auditor required • Requester cannot approve own • 15min expiry

Risk Engine — 0-100 behavioral scoring

Privilege creep78

Operator escalated 3 times in 24h, unusual velocity

After-hours65

Admin action at 02:14 UTC, outside 9-5 policy

Failed auths82

5 failed logins from 192.168.1.45, possible brute force

Impersonation91

Agent token used with human role — ASI03

riskEngine.ts • velocity + privilege creep + after-hours + failed auths + ASI03 + trust decay

Audit Ledger — Tamper-evident

a7f3c9e2…b2e1d4f8…REQUEST_CREATED
c4d8e1a5…a7f3c9e2…APPROVAL_GRANTED
e9f2a6b3…c4d8e1a5…POLICY_ENFORCED
f1a3c7d9…e9f2a6b3…ANOMALY_DETECTED

✓ Chain intact • HMAC verified • Merkle inclusion proof valid • /api/audit/verify

Try tampering: edit one entry → chain breaks → provable. ledger.test.ts proves it.

Architecture — Clients → Policy engine → Dual-control → Ledger → Anomaly

Clients (web / PWA / Capacitor)
Next.js App Router → Session (HttpOnly, SameSite=Strict, signed cookie)
Policy engine (lib/authz) → Dual-control (approve/reject mandates)
Tamper-evident ledger (hash chain + HMAC) → Anomaly detection → SIEM export
Key modules: riskEngine.ts, policySimulator.ts, siemExport.ts, impersonationDetector.ts, complianceMapper.ts — 5 inventive engines, 5 API routes, 4 dashboards gated by can(role,action)