{ "exploit_id": "EXP-001", "title": "Salami drain: serial sub-cap spends exhaust the treasury", "summary": "A 55% faction drains the commons with a series of individually modest spend proposals, each legal under kernel v0.1.", "mechanism": "Kernel v0.1 places no limit on aggregate spending: each spend proposal needs only quorum and a simple majority, and nothing connects one proposal to the next. The attacking faction (11 of 20 citizens) files eight proposals of 100 units each, votes them through one per turn, and removes 80% of a 1000-unit treasury in eight turns. No single proposal looks alarming; the sequence is ruinous, and the nine-citizen minority can do nothing within the rules. Worst-off impact: defenders' claim on the commons falls from 50 units/head to 10 units/head with zero compensation.", "severity": "critical", "capture_objective": "drain_treasury", "discovered_by": "treasury_drain", "tournament": {"id": "T1", "round": 14, "seed": 1103}, "status": "patched-v0.2", "initial_treasury": 1000.0, "citizens": [ {"id": "A01", "faction": "attacker"}, {"id": "A02", "faction": "attacker"}, {"id": "A03", "faction": "attacker"}, {"id": "A04", "faction": "attacker"}, {"id": "A05", "faction": "attacker"}, {"id": "A06", "faction": "attacker"}, {"id": "A07", "faction": "attacker"}, {"id": "A08", "faction": "attacker"}, {"id": "A09", "faction": "attacker"}, {"id": "A10", "faction": "attacker"}, {"id": "A11", "faction": "attacker"}, {"id": "D01", "faction": "defender"}, {"id": "D02", "faction": "defender"}, {"id": "D03", "faction": "defender"}, {"id": "D04", "faction": "defender"}, {"id": "D05", "faction": "defender"}, {"id": "D06", "faction": "defender"}, {"id": "D07", "faction": "defender"}, {"id": "D08", "faction": "defender"}, {"id": "D09", "faction": "defender"} ], "kernel_params_at_discovery": { "quorum": 0.5, "thresholds": {"spend": 0.5, "amend_kernel": 0.667, "expel": 0.5, "emergency": 0.5, "floor_breach": 0.75}, "review_period_turns": 1, "review_period_overrides": {}, "allow_call_question": true, "roll_snapshot_at_open": false, "turns_per_epoch": 10, "spend": {"per_proposal_cap": null, "epoch_rate_cap": null, "commons_floor": null}, "emergency": {"sunset_turns": null, "renewal_threshold": null, "spend_requires_vote": false, "expedited_review_turns": null, "suspends_review": true}, "delegation": {"max_depth": null, "max_weight_frac": null, "epoch_expiry": false}, "single_subject_rule": false }, "action_trace": [ {"t": "propose", "by": "A01", "id": "s1", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s1", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s1", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s2", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s2", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s2", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s3", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s3", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s3", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s4", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s4", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s4", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s5", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s5", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s5", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s6", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s6", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s6", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s7", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s7", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s7", "choice": "yes"}, {"t": "advance"}, {"t": "propose", "by": "A01", "id": "s8", "kind": "spend", "amount": 100.0, "to": "A01"}, {"t": "vote", "by": "A01", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A02", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A03", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A04", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A05", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A06", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A07", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A08", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A09", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A10", "on": "s8", "choice": "yes"}, {"t": "vote", "by": "A11", "on": "s8", "choice": "yes"}, {"t": "advance"}, {"t": "advance"}, {"t": "advance"}, {"t": "advance"}, {"t": "advance"}, {"t": "advance"} ], "success_predicate": {"type": "treasury_below_frac", "frac": 0.25}, "patched_assertions": [ {"type": "treasury_at_least_frac", "frac": 0.25}, {"type": "proposals_blocked_at_least", "n": 1} ], "proposed_patch": { "params": { "spend.per_proposal_cap": 0.2, "spend.epoch_rate_cap": 0.33, "spend.commons_floor": 0.25, "review_period_turns": 3 }, "rationale": "Three independent brakes: no single proposal may move more than 20% of the current treasury; aggregate spending per epoch is capped at 33% of the epoch-start treasury; and any spend that would leave the commons below 25% of its genesis level requires a 75% supermajority. A longer review period gives the minority time to organize, but it is the caps and the floor that actually stop the drain." } }