# Resolv (USR stablecoin) - March 2026 exploit

## 1. What happened

- **Date:** March 22, 2026. First malicious tx 02:21:35 UTC, second 03:41 UTC [PM]. Reported as Sunday March 22 by [CD] and [BLK]. One Cointelegraph RSS entry shows an earlier timestamp but its body says Sunday [CT1].
- **Chain:** Ethereum (all cited txs and the USR Counter contract are Ethereum) [PM].
- **Amount:** ~**$25M taken in ETH** [PM]. Sources differ: Chainalysis says "roughly $23 million" [CHA]; Cyvers/Cointelegraph report ~11,400 ETH (~$24M) plus ~$1.1-1.3M residual wstUSR [CT2]. Differences track price-at-time and whether residual wstUSR is counted.
- **What happened:** the attacker **minted 80M unbacked USR** (50M then 30M) against ~$100K-$200K of USDC deposits, then swapped it out for ETH via wstUSR [PM][CHA]. Resolv states the **collateral pool was never touched** - the damage was supply inflation plus market impact, not stolen backing [PM]. USR depegged to ~$0.025 on its Curve pool within 17 minutes [BLK].

## 2. Root cause

**Not a smart-contract bug: a privileged-key / infrastructure (supply-chain) compromise** the contract could not contain. Resolv's post-mortem says the attack began outside its perimeter - a credential tied to a contractor's GitHub account at a third-party project was reused to reach Resolv repositories; attackers there ran a malicious CI/CD workflow that exfiltrated infrastructure credentials and escalated in the cloud [PM]. Early attempts to reach the signing key were denied; the attackers succeeded by using a higher-privileged role to **modify the key's access policy in AWS KMS directly**, gaining signing authority over the SERVICE_ROLE key used by the minting backend [PM][CHA]. With it, `completeSwap` minted whatever output the signer requested. The contract worked as designed; the design assumed the key never leaks [CHA]. No insider involvement was found [PM].

## 3. Pattern

**Key/signer compromise, amplified by missing on-chain limits and unvalidated input.**

```
requestSwap:  user deposits collateral (USDC) -> on-chain request
completeSwap: SERVICE_ROLE key (off-chain) passes finalMintAmount
              as an unchecked parameter
gated:   signature valid? yes -> mint finalMintAmount
missing: mintAmount <= f(collateral); per-tx / per-period cap; oracle price
```

Two flaws stack: (a) one privileged key authorizes unlimited issuance - no multisig, no ceiling; (b) the contract trusts the signed output with no ratio or price check [CHA][ZAC]. The SERVICE_ROLE was a plain EOA held since May 2024 that also controlled other infrastructure contracts [HAK]. Analyst Vadim states a prior audit finding was literally named "Missing upper [limit]" [ZAC].

## 4. The check that would have caught it

1. **Invariant / fuzz test on the mint path:** assert every completed swap satisfies `mintedUsr <= collateralIn * collateralPrice / (1 - maxSlippageBps)`, bounded by hard per-tx and per-period mint caps and a total-supply ceiling. Fuzz `completeSwap` with signer-supplied outputs far above deposit value and require a revert, not a mint. This fails on the real 500x case (100K USDC -> 50M USR) [BLK].
2. **Operational controls tied to this incident:** (a) move mint authorization off a single long-lived EOA - require multisig/MPC signing and scope each key to one contract; (b) add the on-chain mint cap and oracle price validation Resolv itself adopted, plus real-time monitoring wired to an **automatic pause** on anomalous mints - the exploit repeated ~3 times before anyone halted it [PM][QA].

## 5. Sources

- [PM] Resolv postmortem: https://resolv.xyz/blog/resolv-postmortem-march-22-2026-incident
- [CHA] Chainalysis: https://www.chainalysis.com/blog/lessons-from-the-resolv-hack/
- [REKT] rekt.news: https://rekt.news/resolv-labs-rekt
- [BLK] The Block: https://www.theblock.co/post/394582/resolvs-usr-stablecoin-depegs-after-attacker-mints-80-million-unbacked-tokens-extracts-roughly-25-million
- [CD] CoinDesk: https://www.coindesk.com/markets/2026/03/23/resolv-stablecoin-drops-70-after-usd80-million-exploit-after-attacker-mints-usr
- [CT1] Cointelegraph: https://cointelegraph.com/news/resolv-labs-stablecoin-depegs-attacker-mints-millions-of-tokens
- [CT2] Cointelegraph: https://cointelegraph.com/news/resolv-says-no-assets-lost-as-defi-partners-respond-to-usr-depeg
- [DEF] The Defiant: https://thedefiant.io/news/hacks/defi-has-seen-resolv-s-usd25m-usr-exploit-many-times-before
- [BE] BeInCrypto: https://beincrypto.com/resolv-usr-stablecoin-depegs-after-security-failure/
- [SEC] Resolv audits: https://docs.resolv.xyz/litepaper/resources/security
- [HAK] Hacken: https://x.com/hackenclub/status/2036062689772855687
- [QA] QuillAudits: https://x.com/QuillAudits_AI/status/2036027959765856625
- [ZAC] Vadim: https://x.com/zacodil/status/2035658779706974556
- [D2] D2 Finance: https://x.com/D2_Finance/status/2035560501070225770

Note: no standalone technical analysis from BlockSec, SlowMist, CertiK, Halborn or Verichains on this incident was found; their blogs carried no Resolv write-up or were unreachable at the time of writing, so their claims are not used here. Rekt entry and its $25M figure: https://rekt.news/leaderboard/ [REKT].
