BlackHartBlackHart
Hacks Feed/Thetanuts Finance

Thetanuts Finance

June 15, 2026·Ethereum·Flash-loan share inflation
$105K
total loss

An attacker stole about $105,000 from Thetanuts Finance, an options vault protocol, on Ethereum. They abused how the protocol's index vault tracked shares: by taking a flash loan and calling the vault's mint function 37 times, they inflated their balance in the underlying put-option vaults without ever depositing the matching USDC. They then redeemed the fake Bitcoin and Ether vault shares for about $105,000 of real USDC and repaid the flash loan. There is no tradeable NUTS governance token, so token holders were not affected; the loss came out of vault deposits.

NUTS token holderssafe(no tradeable governance token exists)
Bitcoin and Ether put vaultsdrained(about $105,000 USDC drained)
AVAX, BNB and MATIC put vaultspartially affected(shares inflated and taken, but left unredeemed because the vaults were illiquid)
What the score saw

We had not published a live score for Thetanuts Finance. The weakness here is a kind we track closely though: a vault that mints shares through an internal accounting hook without checking that real funds back them. When a deposit can be credited for free and then redeemed for real money, a single flash loan turns it into a drain.

Exploit anatomy

The attacker deployed an exploit contract that flash-borrowed index tokens, then called mint 37 times on the Thetanuts index vault. Each mint credited shares in the underlying Bitcoin put vault and Ether put vault with no USDC behind them. The attacker then redeemed those shares for about $105,000 USDC and repaid the flash loan.

FUND FLOWROOT CAUSE / ENABLERS
Stage 1 · FLASH LOAN + INFLATE
Thetanuts index + 5 sub-vaults
TN-IDX-USDC-PUT over 5 CSCPv1 vaults
0xc2c3ae0a...b86ac7
~ $105K drainable, dominant
Exploit contract
flash-borrows index tokens
0xaf3a0fdb...2f2299
drives the mint loop
mint() runs a zero-value transferFrom hook
each index mint credits sub-vault shares via transferFrom(attacker, index, 0) with no matching USDC deposit
share inflation
Aave flash loan of index tokens
0x2ca7641b841a79cc70220ce838d0b9f8197accda
flash loan
Sub-vault accounting trusts the index hook
shares minted on credit, never reconciled against real collateral
Stage 2 · MINT LOOP x37
Shares inflated across 5 sub-vaults
mint(2) called 37 times
0xbba9...9fec
~49.7K BTC + ~24K ETH vault shares
No deposit check on the mint path
37 mints credited share balances for free; nothing required USDC to back them
Stage 3 · REDEEM
Exploit contract
initWithdraw BTC + ETH vaults
0xaf3a0fdb...2f2299
105,471.50 USDC, flash loan repaid
Illiquid AVAX, BNB, MATIC shares stolen but unredeemed
those sub-vaults had no liquidity to cash out, so only the BTC and ETH shares were realized
missing control
Untouched

Safe. The exploit hit the index and cash-secured-put vault accounting. There is no tradeable NUTS governance token at risk.

Mechanism

Each index mint ran a zero-value transferFrom hook that credited cash-secured-put vault shares with no USDC deposit. An Aave flash loan amplified it across 37 mints, then the inflated BTC and ETH shares were redeemed for real USDC. Not a price oracle bug, a share-accounting flaw.

Source
blackhart.io/hacks/thetanuts-index-vault-share-inflation
verified on-chain$105.47K USDC realized; illiquid vault shares left unredeemed
Full forensic detail

Step-by-step reconstruction, root cause, counterfactuals, remediation, and disclosure timeline.

Exploit anatomy

1.
The attacker deployed an exploit contract whose constructor runs the whole attack, and flash-borrowed about 153,000 index vault tokens from Aave.
2.
The contract called mint on the index vault 37 times. Each mint ran a zero-value transferFrom on all five underlying put vaults, an accounting hook that credited the attacker shares without moving any tokens.
3.
After the loop the contract held about 49,700 Bitcoin put vault shares and 24,000 Ether put vault shares, none backed by real USDC.
4.
The attacker called initWithdraw on the Bitcoin and Ether put vaults, pulling 105,471.50 USDC out to the exploit contract.
5.
The attacker repaid the Aave flash loan and kept about 105,471 USDC. The AVAX, BNB and MATIC put vault shares were also inflated and taken, but left unredeemed because those vaults were illiquid.

Root cause

Thetanuts' TN-IDX-USDC-PUT index vault sits on top of five cash-secured-put sub-vaults (BTC, ETH, AVAX, BNB, MATIC). The index vault's mint path updates the caller's position in each sub-vault through an accounting hook implemented as a zero-value transferFrom on each sub-vault. Because that hook credited share accounting while moving no tokens, repeatedly calling mint inflated the caller's sub-vault share balances with no matching USDC deposit. The attacker flash-borrowed index tokens from Aave, looped mint 37 times to inflate their Bitcoin and Ether sub-vault shares, redeemed those shares for about 105,471 USDC, and repaid the flash loan. The fix is to back every credited share with a real deposit and reconcile shares against collateral.

Prevention analysis

Similar incidents

ERC4626 share-inflation class

Vaults that credit or price shares without verifying the underlying deposit are repeatedly drained, often with a flash loan to amplify. Same root cause: share accounting decoupled from real collateral.

Flash-loan vault manipulation (2023 to 2025)

Multiple vault hacks used a flash loan to inflate an internal balance, then redeemed it for real assets in the same transaction. Same shape as this exploit.

Remediation

1.Back every share credited through the index vault with a real, transferred deposit; never credit shares on a zero-value transfer.
2.Reconcile each sub-vault's total shares against its actual collateral on every mint and withdraw, and revert if they diverge.
3.Add a same-block or flash-loan guard so a position cannot be minted and redeemed within one transaction.
4.Pause the index and cash-secured-put vaults, account for the stolen shares, and make depositors whole before re-enabling.

Timeline

2026-06-15Attacker deploys an exploit contract and flash-borrows index vault tokens from Aave.
2026-06-15The contract calls mint 37 times, inflating its share balance across five put vaults with no USDC deposited.
2026-06-15The attacker redeems the inflated Bitcoin and Ether vault shares for 105,471.50 USDC, repays the flash loan, and keeps the profit.
Continuous adversarial monitoring

Get your protocol scored across 12 dimensions, or request ongoing coverage.