# CAIN-42 BFT security report

- **equivocation (primary)** (BFT-TV-06): REJECTED: no honest commit of conflicting ops
- **equivocation (replica PREPAREs)** (BFT-TV-08): DETECTED + QUARANTINED (evidence record)
- **false proposal (digest not bound)** (BFT-TV-05): REJECTED
- **false commit (unproposed digest)** (BFT-TV-07): REJECTED; no honest node signs or is framed
- **invalid digest / signature** (BFT-TV-04/05): REJECTED
- **stale commit / old-view proposal** (BFT-TV-19, RT-BFT-12): REJECTED
- **replayed commit** (BFT-TV-09): REJECTED (no re-execution)
- **forged replica identity (non-member)** (BFT-TV-18): REJECTED
- **conflicting governance state (state transfer)** (BFT-TV-20): REJECTED: only certified contiguous prefix applied
- **revocation suppression** (GOV-BFT-08, RT-BFT-01/10): REJECTED: revocation is local, needs no quorum
- **authorization escalation via lying replica** (GOV-BFT-04): REJECTED
- **evidence tampering** (RT-BFT-07, judge tests): DETECTED
- **runtime identity substitution (identity fingerprint)** (GOV-BFT-09, RT-BFT-06): REJECTED (snapshot miss)
- **malicious recovery state** (BFT-TV-20): REJECTED
- **compromised GATEWAY commits a wrong ALLOW** (GOV-BFT-10): EXECUTED_UNAUTHORIZED is POSSIBLE: replicas do not re-evaluate governance; consensus only makes the wrong ALLOW non-repudiable

Findings in this run:
- Replicas do not re-evaluate governance; BFT does not protect against a compromised gateway.
- An unpinned sender falls back to its self-supplied key in `verify_authentication`; membership checks elsewhere reject non-members (BFT-TV-18), but the fallback should be removed.
- Neither live cluster runs HEAD.
- Both live clusters are NOT_OPERATIONAL; with the fast path, permits continue for up to the snapshot TTL during an outage.
