Worked example · 2026-05
THORChain — a node that joined two days earlier failed 864 signing rounds on purpose, collected leaked key fragments, and reconstructed a vault's private key — THORChain / Ethereum, BSC, Base, Bitcoin, Avalanche, Tron and others — 2026-05-15
Summary
On 2026-05-13 a new node operator churned into THORChain's active set and was assigned to one of six Asgard vaults. Over the next ~2.5 days it deliberately caused 864 signing rounds to fail at the MtA step, each failure leaking a fragment of the vault's key through the three weaknesses in THORChain's GG20 library. Once enough material had accumulated it reconstructed the vault's private key and, on 2026-05-15, moved the vault's funds to attacker addresses in single transactions per chain. Because the key was already compromised before the outflow, THORChain's solvency checker and automatic halts could not intervene in time. ZachXBT raised the alert; node operators halted trading and signing via Mimir; the network stayed paused for over a month while validators upgraded to v3.19.1 and every vault was verified.
Timeline (UTC)
| When | Event | OAK ref |
|---|---|---|
| late April 2026 | Attacker funds node bond via Monero (Chainalysis) | (preparation) |
| 2026-05-01 | Node operator asks on developer Discord how to churn in quickly | (preparation) |
| 2026-05-06 | THORNode commit signs the full ObservedTx wrapper (separate, unexploited weakness) |
— |
| 2026-05-13 | Malicious node churns in (~635K RUNE bond), assigned to one Asgard vault | T10.001 (insider position) |
| 2026-05-13 → 05-15 | 864 deliberately failed signing rounds leak key material | T10.001, T11.013 |
| 2026-05-15 | Vault key reconstructed; funds moved out (~$6.77M on Ethereum alone to 0xd477b695…90Bd) |
T10.001 extraction |
| 2026-05-15 | ZachXBT alert; Mimir trading and signing halt; official statement >5 h later | (response) |
| 2026-05-20 | THORChain Exploit Report #1 | (disclosure) |
| 2026-07-03 | THORChain Exploit Report #2 — root cause published | (disclosure) |
| ~2026-06 | Trading resumes after >5-week pause; validators on v3.19.1 | (recovery) |
What defenders observed
- Signing-failure concentration. One validator responsible for a disproportionate share of failed signing rounds over a short window. THORChain names this as the early-warning signal it missed.
- New-entrant exposure. The node had been active for two days and was immediately trusted with a share of a live vault. THORChain is weighing wallet-age requirements and gradual vault exposure for new validators.
- Upstream drift. The TSS fork predated public fixes for exactly the classes of weakness exploited.
Root-cause evidence
- Technique: OAK-T10.001
- Source: https://blog.thorchain.org/thorchain-exploit-report-2
- Source type: operator
- Confidence: confirmed
- Evidence: THORChain Exploit Report #2: a validator that churned in two days earlier caused 864 MtA signing rounds to fail, harvesting key material through three weaknesses in its tss-lib v0.1.6 fork (unverified Paillier modulus, unbound range proof, narrow blinding), and reconstructed a vault key. The report does not mention Bifrost, observers or a direction flag.
Public references
[thorchainreport2_2026]— THORChain, "THORChain Exploit Report #2" (2026-07-03): https://blog.thorchain.org/thorchain-exploit-report-2[thorchainreport1_2026]— THORChain, "THORChain Exploit Report #1" (2026-05-20): https://blog.thorchain.org/thorchain-exploit-report-1[rektthorchain3_2026]— rekt.news, "THORChain - Rekt III" (2026-05-21): https://rekt.news/thorchain-rekt3[cointelegraphthorchain2026]— Cointelegraph, "THORChain's $10M Exploit Caused by MPC Vulnerability, Private Key Leak": https://cointelegraph.com/news/thorchains-10m-exploit-mpc-vulnerability-private-key-leak[quillthorchain2026]— QuillAudits, "THORChain $10.7M GG20 TSS Exploit (Explained)": https://www.quillaudits.com/blog/hack-analysis/thorchain-gg20-hack[oblivionsagegist2026]— Oblivionsage, on-chain analysis proposing the observer-wrapper mechanism (2026-05-15; superseded by THORChain's report): https://gist.github.com/Oblivionsage/9859e3281ec41627b8dc5fb8f9c963c3
Discussion
Why this was misfiled, for the record. The first technical explanation available was a detailed, confident third-party analysis built on a real code change: THORNode had just patched an unsigned field in observer signatures. It read the vault-migration that followed churn as a forged migration to an attacker address — but that address was the new vault itself, which the attacker sat inside as a signer. OAK minted a new Technique (T10.008) from that single analysis on the day of the exploit and never revisited it when THORChain published its root cause seven weeks later. This is the same failure as the KelpDAO entry: an open investigation recorded as settled, and never re-checked against the operator's report.
Boundary with T10.001. T10.001's classic anchors (Ronin, Harmony) are keys stolen from signers by phishing or intrusion. Here the attacker was a signer, admitted permissionlessly, and extracted the shared key through the protocol. The Technique fits — the attacker ended up holding the signing key — but the sub-shape is distinct and is recorded in TAXONOMY-GAPS as a candidate: threshold-signature key extraction by a malicious participant.