Toutes les vulnérabilités
CRITICALWeb3exploited in the wild

WEB3-ABRACADABRA-2025

Web3 · Arbitrum · Abracadabra Money (GmxV2 Cauldron / MIM)

Résumé

In late March 2025 Abracadabra.Money lost about $13 million (roughly 6,260 ETH) on Arbitrum when an attacker abused the GMX V2 gmCauldrons that accept GMX GM liquidity tokens as collateral. GMX deposits are asynchronous, so the attacker submitted deposit orders with unsatisfiable minOut values that GMX rejected, returning the input USDC to the cauldron's order/router contract while the cauldron's accounting still counted that pending position as live collateral. Functions such as sendValueInCollateral removed real tokens during liquidation without clearing inputAmount/minOut state, so orderValueInCollateral kept reporting phantom collateral. Inside a single cook() batch the attacker borrowed MIM against this ghost collateral, self-liquidated to pull out the real returned tokens, and reborrowed, while the end-of-cook solvency check still read the stale inflated collateral value and passed. The accounting bypass let the attacker borrow against effectively non-existent collateral and extract MIM.

Comment l’éviter dans votre code

  • Decrement internal collateral accounting atomically whenever real tokens leave the contract, so liquidation cannot leave phantom collateral behind.
  • Treat failed or cancelled async GMX orders as returned funds, clearing inputAmount/minOut and never counting pending orders as live collateral.
  • Run the solvency check against freshly recomputed collateral inside cook(), not against cached or pre-action values.
  • Disallow self-liquidation that lets a borrower reuse the same collateral across borrow, liquidate and reborrow within one batch.
  • Reconcile cauldron internal balances against actual token holdings before approving borrows in async-collateral integrations.

Références

Vulnérabilités liées

Tout Web3 →