Makina

The attacker used flash‑loaned USDC (Morpho + Aave) to temporarily skew spot‑based on‑chain state (Curve pools and oracle inputs, including the ERC4626 convertToAssets path used in pricing). In the same transaction, they invoked accountForPosition and updateTotalAum, locking an inflated AUM into lastTotalAum for DUSD.

In Caliber’s accountForPosition, _execute runs a scripted sequence that calls the MIM‑3CRV calc_withdraw_one_coin, which relies on the Curve 3pool get_virtual_price and balances. After manipulation, it returns overstated amounts. Those amounts flow into _accountingValueOf, which values them via OracleRegistry.getPrice at the spot rate.

When updateTotalAum runs, MachineUtils._getTotalAum aggregates Caliber’s getDetailedAum (positions + base tokens) using the same spot pricing logic, and writes the result into lastTotalAum.

MachineShareOracle.getSharePrice then reads Machine.lastTotalAum() directly—no TWAP or bounds. During subsequent Curve DUSD/USDC pool operations (add_liquidity, exchange, remove_liquidity_one_coin), _stored_rates pulls this inflated share price, so DUSD is overpriced and the attacker can swap in/out to extract USDC, then unwind to WETH and repay the loans.

The attacker also leveraged EIP‑7702 delegation to execute a calldata‑driven command stream from an EOA, which compresses/obscures the flow, but the root weakness is the reliance on manipulable spot state across dependent pricing paths.