All vulnerabilities
HIGHWeb3

WEB3-VOW-2024

Web3 · Ethereum · Vow (Vowcurrency) USD rate setter

Summary

On August 13, 2024 the Vow (Vowcurrency) protocol lost about $1.2 million (~452 ETH) when its own admin temporarily misconfigured a price setter and an MEV bot pounced. Vow's usdRateSetter admin key called setUSDRate and changed the VOW-to-vUSD exchange rate from 1 to 100 - the team later said it was testing the rate-setter while preparing a lending pool - then reverted it. The function had no input validation and no rate-change delay or timelock, and the inflated rate was readable on-chain for the window between the two transactions. An attacker-controlled MEV bot, its contract deployed 110 days earlier and funded via Tornado Cash, detected the change and within two blocks swapped VOW into vUSD at the 100x rate, minting roughly 148.7 million vUSD far above its backing, then dumped it for ETH and USDT on Uniswap. The VOW token fell 80-87%. The root cause was an unbounded, unprotected privileged setter exposed without a timelock, turning a careless admin action into instantly exploitable on-chain state.

How to avoid it in your code

  • Put privileged parameter changes (exchange rates, oracle values, mint controls) behind a multisig and a timelock so no single key can flip them instantly.
  • Bound and validate setter inputs; reject implausible values such as a 100x rate change in a single call.
  • Never test rate or oracle setters against live, exploitable production state; use a fork or testnet.
  • Assume any exploitable on-chain state will be front-run by MEV bots within blocks - there is no safe 'temporary' misconfiguration.
  • Monitor admin parameter changes and add a pause path that triggers on anomalous rate or supply movements.

References

Related vulnerabilities

All Web3 →