Historical-Incident Replay Benchmark
Generator: runner/replay_incidents.py
Source: documents/incidents/*.yml (architectural_fingerprint ground truth)
Scan results: runner/results/<corpus-id>.json
Topline
| Metric | Value |
|---|---|
| Total Solana incidents in catalogue | 39 |
| Mapped to corpus pre-hack source | 24 |
| Incidents detected (≥1 exact fingerprint rule fired) | 24 |
| Incidents detected (architectural CLASS, sibling rule OK) | 24 |
| Exact-rule detection rate (of mapped) | 24/24 = 100% |
| Class-level detection rate (of mapped) | 24/24 = 100% |
| Fingerprint rules in mapped incidents | 76 |
| Fingerprint rules surfaced by scan | 29 |
| Rule-level recall | 29/76 = 38% |
How to read this report
Each Solana incident in documents/incidents/*.yml carries an architectural_fingerprint: a list of SPECTRE rules that, if they had been wired into a continuous scanner running on the protocol's source, would have surfaced the architectural pattern that the exploit later weaponized. The replay reads each incident's pre-hack corpus snapshot, runs the rule pack against it, and reports which fingerprint rules SPECTRE actually emitted.
An incident is detected when at least one fingerprint rule fires on the pre-hack source. The topline measures the architectural-coverage hypothesis the rule pack is built around: that real exploits cluster into reusable bug classes, and that catching the class at static-analysis time is enough to surface the underlying risk.
Detection breakdown
We score detection at two levels. Exact-rule detection requires SPECTRE to emit the specific rule_id called out by the incident's architectural_fingerprint. Class-level detection is satisfied when SPECTRE emits ANY rule in the same architectural family (e.g., the fingerprint asks for ACC-010 and the scan emits ACC-011 — both are account-binding rules; the architectural class is caught even though the precision dial differs).
Exact-rule detection
| Incident | Protocol | Category | Fingerprint | Fired | Missed |
|---|---|---|---|---|---|
WORMHOLE-SIG-REPLAY-2022-02 |
Wormhole (Portal Token Bridge) | Bridge | ACC-014, ACC-010, CONFIG-010, CPI-021 | ACC-014 | ACC-010, CONFIG-010, CPI-021 |
CASHIO-FAKE-COLLATERAL-2022-03 |
Cashio | Stablecoin | ACC-015, ACC-010, ACC-011, PDA-030, MINT-001 | ACC-015 | ACC-010, ACC-011, MINT-001, PDA-030 |
MANGO-ORACLE-MANIPULATION-2022-10 |
Mango Markets | DEX/Lending | ORC-002, INV-002 | ORC-002 | INV-002 |
SOLEND-USDH-ORACLE-2022-11 |
Solend | Lending | ORC-002, INV-003, NONCE-002, CONFIG-010 | CONFIG-010, ORC-002 | INV-003, NONCE-002 |
RAYDIUM-ADMIN-KEY-2022-12 |
Raydium AMM v4 | DEX | AUTH-100, AUTH-120, AUTH-110 | AUTH-100 | AUTH-110, AUTH-120 |
METAPLEX-CMV2-REINIT-2021-12 |
Metaplex Candy Machine v2 | NFT | AUTH-100, ACC-013 | ACC-013 | AUTH-100 |
METAPLEX-CMV1-REINIT-2022-01 |
Metaplex Candy Machine v1 | NFT | ACC-021, AUTH-100 | ACC-021 | AUTH-100 |
JET-PROTOCOL-BREAK-2022 |
Jet Protocol | Lending | ITER-001, INV-003 | ITER-001 | INV-003 |
CYPHER-CACHE-INCONSISTENCY-2023-08 |
Cypher Protocol | DEX/Derivatives | INV-002, ACC-012, INV-003 | ACC-012 | INV-002, INV-003 |
DRIFT-DURABLE-NONCE-2026-04 |
Drift Protocol | Governance/Multisig | NONCE-002, AUTH-110, GOV-002, AUTH-120, ORC-002, GOV-001, CONFIG-010 | GOV-001, ORC-002 | AUTH-110, AUTH-120, CONFIG-010, GOV-002, NONCE-002 |
CASHIO-INFINITE-MINT-2022-03 |
Cashio | Stablecoin/AMM | ACC-013, ACC-010, MINT-001, INV-002, ACC-011 | ACC-013 | ACC-010, ACC-011, INV-002, MINT-001 |
WORMHOLE-SOLANA-2022-02 |
Wormhole (Portal) | Bridge | ACC-014, ACC-013, AUTH-100 | ACC-014 | ACC-013, AUTH-100 |
MANGO-PERP-ORACLE-2022-10 |
Mango Markets | Perp DEX | ORC-002, INV-003 | ORC-002 | INV-003 |
RAYDIUM-OWNER-KEY-2022-12 |
Raydium AMM v4 | AMM | AUTH-100, AUTH-110, GOV-001, CONFIG-010 | AUTH-100, GOV-001 | AUTH-110, CONFIG-010 |
JET-PUBKEY-DEFAULT-2022 |
Jet Protocol | Lending | ACC-021, CLOSE-070, CLOSE-080, INV-002 | ACC-021 | CLOSE-070, CLOSE-080, INV-002 |
CYPHER-SUBACCOUNT-MARGIN-2023-08 |
Cypher Protocol | Perp DEX | INV-002, ACC-021, ACC-012 | ACC-012, ACC-021 | INV-002 |
METAPLEX-AUCTION-BIDDER-POT-2022-01 |
Metaplex Auction House | NFT/AMM-adjacent | ACC-013, PDA-030, PDA-031, ACC-012 | ACC-013 | ACC-012, PDA-030, PDA-031 |
MANGO-V3-ORACLE-2022-10 |
Mango Markets v3 | Lending | ORC-002, INV-002 | ORC-002 | INV-002 |
MANGO-V3-DAO-SETTLEMENT-2022-10 |
Mango Markets v3 | Lending | GOV-001, GOV-002 | GOV-001 | GOV-002 |
SOLEND-SLND1-WHALE-2022-06 |
Solend | Lending | GOV-001, GOV-002, AUTH-110 | GOV-001 | AUTH-110, GOV-002 |
DRIFT-V2-DURABLE-NONCE-2026-04 |
Drift Protocol v2 | Perps | NONCE-002, AUTH-100, AUTH-110, GOV-001, CONFIG-010 | AUTH-100, GOV-001 | AUTH-110, CONFIG-010, NONCE-002 |
CYPHER-SUBACCOUNT-2023-08 |
Cypher Protocol | Perps | INV-002, ACC-013 | ACC-013 | INV-002 |
UXD-MANGO-CROSS-2022-10 |
UXD Protocol | Stablecoin | CROSS-007, CROSS-003 | CROSS-007 | CROSS-003 |
SPL-TOKEN-LENDING-ROUNDING-2021-12 |
SPL Token Lending (shared codebase) | Lending | ARI-040 | ARI-040 | — |
Unmapped incidents (future corpus additions)
15 incidents in documents/incidents/ do not have a pre-hack source snapshot in corpus-cache/. Adding the corresponding repositories at the commit immediately before each exploit would extend the replay to cover them. The rule pack already names which detectors should fire (see architectural_fingerprint).
| Protocol | Incidents | Rule classes called out by fingerprints |
|---|---|---|
| Allbridge Core | 1 (ALLBRIDGE-CORE-PRICE-2023-04) |
CROSS-001, INV-002, ORC-002 |
| Crema Finance | 2 (CREMA-FAKE-TICK-2022-07, CREMA-FLASH-LOAN-2022-07) |
ACC-010, ACC-011, ACC-013, ACC-021, PDA-030, PDA-031 |
| Drift Protocol v1 | 1 (DRIFT-V1-PNL-2022-05) |
INV-002, INV-003 |
| Loopscale | 2 (LOOPSCALE-RATEX-PRICE-2025-04, LOOPSCALE-RATEX-2025-04) |
CONFIG-010, INV-003, ORC-002 |
| Magic Eden | 1 (MAGIC-EDEN-UNVERIFIED-CREATOR-2023-01) |
META-001, META-002 |
| Nirvana Finance | 3 (NIRVANA-FLASHLOAN-PRICE-2022-07, NIRVANA-FLASH-LOAN-2022-07, NIRVANA-FLASHLOAN-2022-07) |
ARI-040, INV-002, ORC-002 |
| OptiFi | 1 (OPTIFI-PROGRAM-CLOSE-2022-08) |
AUTH-110, AUTH-120, CLOSE-070, CONFIG-010, GOV-002 |
| Pump.fun | 1 (PUMPFUN-WITHDRAW-AUTHORITY-2024-05) |
AUTH-100, AUTH-110, EVT-001, GOV-001 |
| Slope Wallet | 1 (SLOPE-SEED-LEAK-2022-08) |
AUTH-100, CONFIG-010 |
| Step Finance | 1 (STEP-FINANCE-EXEC-DEVICE-2026-01) |
AUTH-100, AUTH-110, GOV-001, GOV-002 |
| Tulip Protocol | 1 (TULIP-MANGO-CROSS-2022-10) |
CROSS-007 |
Per-incident detail
WORMHOLE-SIG-REPLAY-2022-02 — Wormhole (Portal Token Bridge) (2022-02-02)
Status: ✓ detected
Corpus snapshot: 01-wormhole-token-bridge-pre-hack
Category: Bridge
TVL impact: $325,000,000
Architectural fingerprint:
- ✓ ACC-014 (confidence: high) — Wormhole consumed the Instructions sysvar via load_instruction_at without first verifying accs.instruction_acc.key == solana_program::sysvar::instructions::ID. ACC-014 was added in spectre-solana-max specifically for this unchecked-sysvar-consumption class and matches the precise call-site shape across Anchor / native / Solitaire frameworks.
- ✗ ACC-010 (confidence: medium) — Sibling-family signal: account ownership / canonical-address constraint missing on the sysvar field. ACC-010's mut-without-authority scope doesn't catch this directly; retained as architectural-class neighbor.
- ✗ CONFIG-010 (confidence: high) — Reliance on a deprecated unchecked sysvar loader (load_instruction_at) when a checked equivalent existed. A pinned/version-aware API surface would have rejected the call site.
- ✗ CPI-021 (confidence: medium) — Cross-program trust boundary with Secp256k1 program was assumed but never actually crossed; the program parsed alleged sibling-instruction bytes without verifying the program-id of the producing instruction.
CASHIO-FAKE-COLLATERAL-2022-03 — Cashio (2022-03-23)
Status: ✓ detected
Corpus snapshot: 02-cashio-infinite-mint
Category: Stablecoin
TVL impact: $52,800,000
Architectural fingerprint:
- ✓ ACC-015 (confidence: high) — saber_swap.arrow: Box<Account<'info, Arrow>> is a typed Anchor account over a custom type with NO #[account(...)] constraint, yet handler bodies read arrow.vendor_miner.mint to gate the mint of CASH. ACC-015 was added in spectre-solana-max specifically for this untied-typed-account-sub-field-read class and matches the precise architectural shape across Cashio's brrr program.
- ✗ ACC-010 (confidence: medium) — Sibling-family signal: account ownership / canonical-address constraint missing on the intermediate arrow/crate accounts. ACC-010's mut-without-authority scope is narrower than the actual bug shape.
- ✗ ACC-011 (confidence: high) — No anchored root-of-trust PDA tied the arrow account to the crate account to the collateral mint; the chain was traversed without binding.
- ✗ PDA-030 (confidence: medium) — Arrow and crate accounts were not derived from program-controlled seeds in the validation chain, so attacker-owned lookalike accounts satisfied structural checks.
- ✗ MINT-001 (confidence: high) — Mint of CASH proceeded without verifying the underlying collateral mint authority or address.
MANGO-ORACLE-MANIPULATION-2022-10 — Mango Markets (2022-10-11)
Status: ✓ detected
Corpus snapshot: 19-native-mango-v3
Category: DEX/Lending
TVL impact: $117,000,000
Architectural fingerprint:
- ✓ ORC-002 (confidence: high) — Oracle price was used for thin-liquidity collateral with no liquidity-aware haircut, no TWAP buffer, and no per-asset borrow cap separating low-liquidity collateral from high-liquidity borrowable assets.
- ✗ INV-002 (confidence: high) — Cross-collateral borrow did not enforce an invariant that borrowed-value plus liquidation-slippage remained below the realistically-liquidatable collateral value.
SOLEND-USDH-ORACLE-2022-11 — Solend (2022-11-02)
Status: ✓ detected
Corpus snapshot: 16-native-solend-lending
Category: Lending
TVL impact: $1,260,000
Architectural fingerprint:
- ✓ ORC-002 (confidence: high) — Single-pool oracle source with no second-source verification and no liquidity-aware confidence interval; price could be moved with low capital.
- ✗ INV-003 (confidence: medium) — Oracle update was timed against pool write-lock window; protocol invariant 'oracle reflects market price' was broken when the only market was the attacker's deposit.
- ✗ NONCE-002 (confidence: low) — Account-spam strategy was effectively a freshness/staleness exploit on the oracle update path
- ✓ CONFIG-010 (confidence: medium) — Per-pool oracle configuration permitted listing an asset whose only price input was a single thin AMM, with no aggregator or fallback feed
RAYDIUM-ADMIN-KEY-2022-12 — Raydium AMM v4 (2022-12-16)
Status: ✓ detected
Corpus snapshot: raydium-amm-v4-architectural-reference
Category: DEX
TVL impact: $4,400,000
Architectural fingerprint:
- ✓ AUTH-100 (confidence: high) — Admin authority on AMM v4 was a single-key signer with no multisig or timelock guarding withdraw_pnl and parameter setters.
- ✗ AUTH-120 (confidence: high) — withdraw_pnl was a privileged transfer-out instruction reachable directly from the compromised authority with no timelock and no per-action limit.
- ✗ AUTH-110 (confidence: medium) — Authority transfer was direct (one-step) rather than propose-then-accept, so even rotation could not have detected the compromise window.
METAPLEX-CMV2-REINIT-2021-12 — Metaplex Candy Machine v2 (2021-12-31)
Status: ✓ detected
Corpus snapshot: metaplex-candy-machine-v2-reinit-2021-12
Category: NFT
Architectural fingerprint:
- ✗ AUTH-100 (confidence: high) — Account constraint did not enforce signer-equals-authority on a state-mutating instruction; missing authority check on candy_machine account.
- ✓ ACC-013 (confidence: medium) — Anchor attribute mismatch (declared mut without proper has_one/authority binding) is the same shape as ACC-013 unconstrained mutable account.
METAPLEX-CMV1-REINIT-2022-01 — Metaplex Candy Machine v1 (2022-01-04)
Status: ✓ detected
Corpus snapshot: metaplex-candy-machine-v1-reinit-2022-01
Category: NFT
Architectural fingerprint:
- ✓ ACC-021 (confidence: high) — Initializer instruction did not check that the account was uninitialized (account discriminator zero); a re-initialization rewrote authority.
- ✗ AUTH-100 (confidence: high) — Initialize did not assert that the existing on-account authority (if any) had signed; first-writer-wins semantics permitted overwrite.
JET-PROTOCOL-BREAK-2022 — Jet Protocol (2022-04-01)
Status: ✓ detected
Corpus snapshot: 24-jet-v1-set-market-owner
Category: Lending
Architectural fingerprint:
- ✓ ITER-001 (confidence: high) — Loop body contains
if <slot>.account == Pubkey::default() { break; }over a sparse fixed-size position array. ITER-001 was added in spectre-solana-max specifically to detect this Jet architectural class; matches the precise AST shape across both for- and while-loops. - ✗ INV-003 (confidence: medium) — Collateral aggregation invariant (sum over live positions) was violated when iteration terminated early on a sparse array.
CYPHER-CACHE-INCONSISTENCY-2023-08 — Cypher Protocol (2023-08-07)
Status: ✓ detected
Corpus snapshot: cypher-protocol-cache-2023-08
Category: DEX/Derivatives
TVL impact: $1,035,000
Architectural fingerprint:
- ✗ INV-002 (confidence: high) — Cached risk state was not invalidated on every relevant instruction path; the invariant 'cache reflects underlying positions' was conditional rather than enforced.
- ✓ ACC-012 (confidence: medium) — Aggregate state account was treated as authoritative without re-validation against the source-of-truth position accounts.
- ✗ INV-003 (confidence: medium) — Solvency invariant evaluated against stale cache rather than live positions.
DRIFT-DURABLE-NONCE-2026-04 — Drift Protocol (2026-04-01)
Status: ✓ detected
Corpus snapshot: 25-drift-v2-architectural-reference
Category: Governance/Multisig
TVL impact: $295,000,000
Architectural fingerprint:
- ✗ NONCE-002 (confidence: high) — Durable-nonce signing decoupled the validity window of approver signatures from the proposal-execution timeline; signatures collected weeks earlier remained executable with no monotonic floor on the multisig's proposal counter.
- ✗ AUTH-110 (confidence: high) — Admin authority transfer was a single-step privileged action with no separate propose-then-accept handshake on the destination side, so two pre-signed transactions plus zero timelock equalled instant takeover.
- ✗ GOV-002 (confidence: high) — Multisig migration to zero-timelock governance eliminated the detection window between proposal and execution; this is the canonical GOV-002 timelock-removal anti-pattern.
- ✗ AUTH-120 (confidence: medium) — Post-takeover, admin had unbounded ability to whitelist new collateral, set oracle source, and relax withdrawal limits in a single instruction surface; no per-action limits.
- ✓ ORC-002 (confidence: medium) — Attacker-supplied oracle for the CVT asset was accepted as authoritative; no second-source verification or cross-venue divergence guard.
- ✓ GOV-001 (confidence: high) — Zero-timelock on the privileged admin-migration handler eliminated the cancel-window between sign and execute
- ✗ CONFIG-010 (confidence: medium) — Council migration to zero-timelock was a config change with no on-chain delay protecting the prior policy
CASHIO-INFINITE-MINT-2022-03 — Cashio (2022-03-23)
Status: ✓ detected
Corpus snapshot: 02-cashio-infinite-mint
Category: Stablecoin/AMM
TVL impact: $52,800,000
Architectural fingerprint:
- ✓ ACC-013 (confidence: high) — saber_swap.arrow account was accepted without validating its mint field, allowing a forged collateral account to satisfy the type check
- ✗ ACC-010 (confidence: high) — Missing ownership/discriminator verification on the saber_swap.arrow account allowed a fake arrow account to pass
- ✗ MINT-001 (confidence: high) — Mint authority for CASH was used without verifying the underlying collateral mint, enabling unbounded mint with worthless backing
- ✗ INV-002 (confidence: medium) — Vault accounting invariant (CASH supply backed by real collateral value) was not enforced at mint time
- ✗ ACC-011 (confidence: high) — Owner program of the arrow and crate accounts was not pinned to the trusted Saber program, so the attacker substituted look-alike accounts they owned
WORMHOLE-SOLANA-2022-02 — Wormhole (Portal) (2022-02-02)
Status: ✓ detected
Corpus snapshot: 01-wormhole-token-bridge-pre-hack
Category: Bridge
TVL impact: $326,000,000
Architectural fingerprint:
- ✓ ACC-014 (confidence: high) — Wormhole consumed the Instructions sysvar via load_instruction_at without first verifying the supplied account's key matches solana_program::sysvar::instructions::ID. ACC-014 is the precise detector for this unchecked-sysvar-consumption class across Anchor / native / Solitaire frameworks.
- ✗ ACC-013 (confidence: medium) — Sibling-family signal: account-binding constraint missing. ACC-013's mut-without-authority scope doesn't directly fire on the Solitaire
Info<'b>field, but the family signal is correct. - ✗ AUTH-100 (confidence: medium) — Effective authority (guardian set signature) was bypassed because the verification stack trusted a forgeable input
MANGO-PERP-ORACLE-2022-10 — Mango Markets (2022-10-11)
Status: ✓ detected
Corpus snapshot: 19-native-mango-v3
Category: Perp DEX
TVL impact: $117,000,000
Architectural fingerprint:
- ✓ ORC-002 (confidence: high) — Oracle composition relied on three venues with shallow MNGO liquidity, no twap, no deviation circuit-breaker, no separation between mark-to-market price and borrow-collateral price
- ✗ INV-003 (confidence: medium) — Borrow-against-collateral invariant not bounded by oracle confidence or asset liquidity; thin-market collateral could back unlimited stable borrows
RAYDIUM-OWNER-KEY-2022-12 — Raydium AMM v4 (2022-12-16)
Status: ✓ detected
Corpus snapshot: raydium-amm-v4-architectural-reference
Category: AMM
TVL impact: $4,400,000
Architectural fingerprint:
- ✓ AUTH-100 (confidence: high) — A single non-multisig key held a privileged withdrawPnl authority over many pools; key compromise drained all of them in one go
- ✗ AUTH-110 (confidence: high) — No timelock or multisig gating on privileged fee-withdrawal authority
- ✓ GOV-001 (confidence: medium) — Privileged-handler timelock gap: withdrawPnl had no delay or multi-party check between key signature and pool-balance change
- ✗ CONFIG-010 (confidence: low) — Pool-owner field on each pool was a mutable single-key authority not protected by upgrade-authority controls
JET-PUBKEY-DEFAULT-2022 — Jet Protocol (2022-08-01)
Status: ✓ detected
Corpus snapshot: 24-jet-v1-set-market-owner
Category: Lending
Architectural fingerprint:
- ✓ ACC-021 (confidence: high) — Position-list iteration assumed a sentinel layout that no longer held after the close-account feature was added; constraint set on positions changed across releases
- ✗ CLOSE-070 (confidence: high) — Account-close logic introduced a state shape (zeroed slots interleaved with live ones) that earlier read paths did not anticipate
- ✗ CLOSE-080 (confidence: medium) — Closure path did not enforce post-condition compaction or list normalization, leaving stale-shape readers exposed
- ✗ INV-002 (confidence: medium) — Solvency invariant relied on completing the position iteration; a loop break could under-count debt
CYPHER-SUBACCOUNT-MARGIN-2023-08 — Cypher Protocol (2023-08-07)
Status: ✓ detected
Corpus snapshot: cypher-protocol-cache-2023-08
Category: Perp DEX
TVL impact: $1,035,000
Architectural fingerprint:
- ✗ INV-002 (confidence: high) — Aggregate solvency invariant across sub-accounts not enforced before issuing a borrow; per-sub-account checks were necessary but not sufficient
- ✓ ACC-021 (confidence: medium) — Sub-account constraint set used for margin reads differed from the set used for borrow authorization
- ✓ ACC-012 (confidence: medium) — Sub-account-to-master-account binding was not enforced consistently across instruction paths
METAPLEX-AUCTION-BIDDER-POT-2022-01 — Metaplex Auction House (2022-01-01)
Status: ✓ detected
Corpus snapshot: metaplex-auction-house-bidder-pot-2022-01
Category: NFT/AMM-adjacent
Architectural fingerprint:
- ✓ ACC-013 (confidence: high) — bidder_pot_token account was constrained by ownership only, not bound to the specific bidder PDA; account confusion across bidders for the same auction
- ✗ PDA-030 (confidence: high) — Token account was not derived as a PDA tied to the bidder identity, so an attacker could substitute another bidder's pot account
- ✗ PDA-031 (confidence: medium) — Seed mutability across bids: same auction allowed multiple distinct bidder identities to map to the same token account
- ✗ ACC-012 (confidence: medium) — Cross-bidder binding constraint missing on account inputs
MANGO-V3-ORACLE-2022-10 — Mango Markets v3 (2022-10-11)
Status: ✓ detected
Corpus snapshot: 05-mango-markets-oracle-cap
Category: Lending
TVL impact: $117,000,000
Architectural fingerprint:
- ✓ ORC-002 (confidence: high) — Single program co-located oracle price reader, collateral valuation, and borrow-withdrawal settlement, so an attacker who could move the externally-fed price could borrow against the inflated mark in the same instruction set
- ✗ INV-002 (confidence: medium) — No invariant bound between extreme single-asset price moves and aggregate borrow capacity, so a 13x move in a thinly-traded governance token translated directly into a $117M withdrawal
MANGO-V3-DAO-SETTLEMENT-2022-10 — Mango Markets v3 (2022-10-15)
Status: ✓ detected
Corpus snapshot: 05-mango-markets-oracle-cap
Category: Lending
TVL impact: $47,000,000
Architectural fingerprint:
- ✓ GOV-001 (confidence: high) — Governance vote weight derived from current token balance with no quarantine for tokens that just exited the attacked program, allowing the attacker to vote with proceeds of the exploit
- ✗ GOV-002 (confidence: medium) — No emergency freeze on governance proposals while the underlying program was in active incident response
SOLEND-SLND1-WHALE-2022-06 — Solend (2022-06-19)
Status: ✓ detected
Corpus snapshot: 16-native-solend-lending
Category: Lending
Architectural fingerprint:
- ✓ GOV-001 (confidence: high) — Quorum threshold of roughly 1% combined with a six-hour voting window allowed an emergency proposal to grant administrative override of user accounts to clear in a single news cycle
- ✗ GOV-002 (confidence: high) — Governance was empowered to mutate per-account authority on positions held by non-participating users, with no separation between parameter governance and asset custody governance
- ✗ AUTH-110 (confidence: medium) — Admin path created on demand by governance had no timelock between vote success and execution
DRIFT-V2-DURABLE-NONCE-2026-04 — Drift Protocol v2 (2026-04-01)
Status: ✓ detected
Corpus snapshot: 25-drift-v2-architectural-reference
Category: Perps
TVL impact: $285,000,000
Architectural fingerprint:
- ✗ NONCE-002 (confidence: high) — Admin transactions were anchored to durable nonce accounts whose lifetime is unbounded, so signatures collected weeks earlier executed against state the signers had not seen
- ✓ AUTH-100 (confidence: high) — Single Squads multisig held authority to list markets, configure oracles, and change withdrawal limits, with no role separation by blast radius
- ✗ AUTH-110 (confidence: high) — Zero-second timelock between admin signature execution and effect, leaving no window for off-chain detection or for honest signers to revoke
- ✓ GOV-001 (confidence: medium) — 2-of-5 threshold concentrated total protocol authority such that compromising two endpoint workstations was sufficient to drain the entire vault
- ✗ CONFIG-010 (confidence: high) — Admin path could create a new spot market with attacker-controlled oracle inside the same authority that controlled withdrawal limits
CYPHER-SUBACCOUNT-2023-08 — Cypher Protocol (2023-08-07)
Status: ✓ detected
Corpus snapshot: cypher-protocol-cache-2023-08
Category: Perps
TVL impact: $1,000,000
Architectural fingerprint:
- ✗ INV-002 (confidence: high) — Master account's tracking of sub-account isolation state diverged from the actual sub-account state, breaking the invariant that the borrow margin check relied on
- ✓ ACC-013 (confidence: medium) — Borrow instruction read margin from a derived account whose freshness was not enforced relative to the sub-account's own state
UXD-MANGO-CROSS-2022-10 — UXD Protocol (2022-10-11)
Status: ✓ detected
Corpus snapshot: uxd-mango-cross-2022-10
Category: Stablecoin
TVL impact: $19,900,000
Architectural fingerprint:
- ✓ CROSS-007 (confidence: high) — UXD CPIs into Mango v3 (Perps-class, Single admin) with no programmatic exposure cap. CROSS-007 was added in spectre-solana-max specifically for this delegation-risk class: the source's solvency is bounded above by a weakly-gated downstream venue's blast radius, regardless of the source's own admin posture (which for UXD is Unknown, so CROSS-001's strict-trust-downgrade comparator doesn't apply).
- ✗ CROSS-003 (confidence: medium) — No degraded-mode fallback when the dependent perp venue was unavailable; UXD mint was paused operationally rather than by program logic
SPL-TOKEN-LENDING-ROUNDING-2021-12 — SPL Token Lending (shared codebase) (2021-12-06)
Status: ✓ detected
Corpus snapshot: spl-token-lending-rounding-2021-12
Category: Lending
Architectural fingerprint:
- ✓ ARI-040 (confidence: high) — Rounding direction in deposit/withdraw arithmetic favored the user over the protocol, the canonical rounding-bias pattern