2026-11-02 upgrade
We attacked our own credential system and found that "single use" and "only narrows" were not true through delegation, and that some paths could be read differently by the server behind it.
| # | Finding | Before | After |
|---|---|---|---|
| F1 | single use defeated by attenuation: attenuate(parent) with no change mints a fresh credential for the identical action; parent + 3 clones = 4 uses | 4 of 4 accepted | parent accepted, 3 clones refused (replayed): parent and children share one use (root_jti) |
| F2 | approval bypass: a person-approved DELETE /invoices/INV-9 could be narrowed to DELETE /invoices/INV-9/lines with any body, and the parent stayed usable | accepted | refused (attenuation_widens); an approved credential can only be repeated exactly, once |
| F3 | any credential could be narrowed to any deeper path, e.g. /orders/A-1 -> /orders/A-1/x, with any body | accepted | only a collection credential (path ends in '/', no body, no approval) narrows to one bodiless member |
| F4 | paths servers interpret differently were minted: '/orders/..;/admin' (Tomcat reads '..;' as '..'), '%252e' double encoding, full-width dots, ';' path parameters, CR/LF and tab | ALLOW | DENY at mint, refused at verify, and refused by the downloadable verifier |
Fixed in the engine and in the downloadable verifier. 12 new tests; all BROKER, APPROVAL and GOVERNOR tests pass. The live demo serves the fix (checked 15:31Z: a delegated child of a used credential is refused, 403).
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.