How a Single Compromised Key Let an Attacker Print $80M in Fake Stablecoins
At 2:21 a.m. UTC on Sunday, an attacker deposited 100,000 USDC into Resolv's minting contract and received 50 million USR in return. That's a 500:1 ratio on a token that's supposed to trade at a dollar. A second transaction minted another 30 million. Within 17 minutes, USR crashed to $0.025 on its most liquid Curve pool.
How the Minting Was Supposed to Work
Resolv's USR minting relied on an off-chain signing service — a server with a privileged private key that approved how much USR could be created for a given collateral deposit. The smart contract had a SERVICE_ROLE account that authorized mints, and this role was controlled by a single externally owned account (EOA), not a multisig. When you wanted to mint USR, you'd deposit collateral, the off-chain service would calculate the correct amount, sign the approval, and the contract would execute.
The problem: the contract itself had zero validation. No oracle checks to verify collateral value. No amount validation to compare deposit size against mint size. No maximum mint cap. According to CoinDesk, "nothing in the system checked whether that ratio made sense." The entire security model depended on one private key staying secret.
The Attack, Step by Step
With the key in hand, the exploit was trivial. D2 Finance identified three possible vectors: gamed oracle, compromised off-chain signer, or missing amount validation. Pashov, which audited Resolv's staking module in July 2025, pointed to a straight private key compromise.
The cash-out was textbook. USR → wstUSR → USDC/USDT → ETH, fragmented across Curve, Uniswap, Velodrome, and KyberSwap. Final haul per Cointelegraph: 11,409 ETH (~$23.7M) plus $1.1M in wrapped USR.
The Unanswered Questions
Here's what doesn't add up. Chainalysis confirmed the attacker breached Resolv's AWS Key Management Service (KMS) — the cloud environment where the team stored the privileged signing key. But nobody has explained how. AWS KMS is not trivial to compromise from the outside. The attack targeted a key that only the Resolv team had access to, stored in infrastructure only the Resolv team controlled.
Add up the design choices: a single EOA (not multisig) controlling unlimited minting, zero on-chain validation, no oracle checks, no mint caps. Any one of these missing safeguards could be an oversight. All four missing at once starts to look like a system designed to be exploitable. Multisig wallets, timelocks, and on-chain ratio checks are standard practice — not exotic security measures. Resolv had none of them.
Then there's the money trail — or lack of one. The attacker operated from 0x04a2...caed, deposited just $100K–$200K in USDC to trigger the mint, then fragmented the $23.7M in ETH proceeds across dozens of wallets through Curve, Uniswap, Velodrome, and KyberSwap. But no public reporting has traced where that initial USDC came from. Not from a CEX withdrawal. Not from Tornado Cash. Nobody has said. For an "external hacker" sophisticated enough to breach AWS KMS, the seed money is suspiciously untraceable — and suspiciously small. If you already have the minting key, $100K is just a prop.
To be clear: none of this proves an inside job. A sloppy security setup and an external breach are perfectly plausible. But in DeFi, "the private key was compromised" has become the go-to explanation that conveniently avoids further scrutiny. The attacker's wallet holds 11,409 ETH and is being tracked by Chainalysis, PeckShield, and law enforcement. KyberSwap has already blocked all linked addresses. If this was external, the on-chain trail should eventually lead somewhere. If it doesn't, that tells its own story.
The Fallout
Resolv paused all protocol functions, claiming the collateral pool "remains fully intact." Euler, Venus, Lista, Fluid, and KyberSwap all moved to isolate USR exposure. USR briefly touched $0.85 but was back at $0.27 by Monday. Resolv says it will offer redemptions for pre-incident holders — no timeline yet. If you're still holding, watch their official channels. Don't try to trade it.