CAIN-42 CAIN Studio
25CAIN-42 Top 25 › Fail-closed doctrine › Attack lab

Attack lab

Every button runs CAIN's real decision path on a throwaway tenant with enforcement forced on (POST /fabric/try). Then tamper with the request and see what a malformed or unknown input gets you: never an allow.

13 attacks 1 controls live: nothing pre-recorded

  1. Pick a preset. Red ones are attacks, green ones are honest requests that must still work.
  2. Tamper. Choose any field and drop it, null it, change its type, upper-case it, flip one character, or add a field the product never asked for.
  3. Send and read the real reply, or run every preset and watch the scoreboard fill.

What each preset tests

PresetRouteWhy it matters
controlHonest read, brand-new agentPOST /fabric/tryA reasonable action from a principal with no trust history. Unknown trust is held for a human, not allowed.
attackPrompt injection in the payloadPOST /fabric/tryThe risk stage screens every nested key and value; a hit on an enforcing stage blocks.
attackMalformed planPOST /fabric/tryA plan the checker cannot read is an unanswered check, and an unanswered enforcing check blocks.
attackMission escalationPOST /fabric/tryA tool outside the declared mission is refused even though the caller is authenticated.
attackConsequence horizon exhaustedPOST /fabric/tryThe uncertainty budget for this agent is spent; more autonomy is not granted on credit.
attackGovernance program needs re-authorizationPOST /fabric/tryA signed policy program that does not re-execute to ALLOW for exactly this call refuses it.
attackAction outside its predicted boundsPOST /fabric/tryPredictions can only restrict: an action the signed prediction does not cover is refused.
attackSwapped autonomy certificatePOST /fabric/tryA certificate issued for a different configuration does not transfer.
attackAuthority carried across domainsPOST /fabric/tryAnother governance domain's agreement never becomes permission here.
attackConfused-deputy continuity permitPOST /fabric/tryReplica receipts for a different action or arguments do not authorize this one.
attackProofs naming two different agentsPOST /fabric/tryEvery declared proof must name one subject; a mixed bundle is refused.
attackScenario nobody definedPOST /fabric/tryAn unknown name is an error, not the default scenario.
attackVerifier call with no API keyPOST /fabric/identity/passport/verifyNo credential is not an anonymous yes: the route refuses before it reads the body.
attackTenant-scoped call with no tenant keyPOST /fabric/trajectories/passport/verifyA tenant-scoped route with no tenant is refused, never served from a default tenant.

Public demo routes are rate limited per address; a 429 shows as rate limited, not as a failure. Our own lab; no independent test.

FIRME AI CORPORATION · CAIN-42 is a Byzantine trust fabric. Numbers marked "our own check" were run by us, not by an independent party. Nothing on these pages is a certification.