Front-running and MEV vulnerabilities in disclosed reports
Public mempools make transaction ordering an attacker-controlled parameter, and any protocol that assumes otherwise is exploitable for free.
- Reports indexed
- 87
- Total paid
- $45k
- Critical
- 0
- Largest payout
- $45k
Every pending transaction is a public announcement of intent. Front-running findings are the cases where acting on that announcement is profitable: sandwiching a swap with no slippage bound, claiming a first-mover reward someone else paid to discover, or racing a governance execution.
The class also covers the inverse — back-running and censorship — and the protocol designs that make ordering matter more than it should. Auctions settled in a single transaction, liquidations open to anyone with no commitment phase, and reveal steps that can be observed before they are committed all show up repeatedly.
Remediations in these reports are more varied than in other classes: commit-reveal, private submission, slippage and deadline parameters that are actually enforced, and batch settlement at a uniform clearing price.
What reviewers look for
- Swap or redemption paths with default or unenforced slippage limits
- Reward claims where discovery and settlement happen in separate transactions
- Reveal steps whose value is derivable from the earlier commit
- Auctions or liquidations settled purely on arrival order
- Deadline parameters accepted but never compared to `block.timestamp`
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
Sandwichable liquidation bonus enables MEV extraction from borrowers
A lending protocol's liquidation routine executed collateral swaps through an AMM router with zero slippage protection (`amountOutMin` set to zero) while relying on spot prices for bonus calculations. Mempool searchers could sandwich pending liquidation transactions by driving up local pool prices beforehand, forcing the swap to settle at severely degraded exchange rates. This allowed MEV bots to siphon excess value from the liquidated borrower's remaining collateral pool.
Good Entry: First depositor can break minting of liquidity shares in GeVault
GeVault's deposit function issues liquidity shares proportional to the vault's live token balances as reported by getTVL(), which reads the contract's aToken balances. Because the very first mint sets the initial share price at a fixed 1e10 wei baseline, a malicious first depositor can mint a negligible share, withdraw down to one wei of shares, and directly donate a large amount of the underlying to the vault, inflating the per-share value dramatically. A subsequent legitimate depositor then receives a near-zero share count for a large deposit, so most of their funds are effectively stolen, and the require(liquidity > 0) check bricks small deposits. The judge confirmed this as Medium severity since it requires front-running a brand-new zero-supply vault and only affects vault deployment.
PoolTogether: Increasing reserves breaks PrizePool accounting
An accounting flaw in PoolTogether's `PrizePool` contract allows external reserve contributions to be misattributed and extracted by prize vaults. When `increaseReserve` is invoked, prize tokens are transferred into the contract and added to `_reserve`, but the helper `_accountedBalance()` is not updated. As a result, subsequent calls to `contributePrizeTokens` evaluate the unallocated token delta as total contract balance minus accounted balance, treating the newly deposited reserve funds as excess contributions. Any vault can claim these tokens, inflating its distribution accumulators and causing contract token balances to fall below accounted protocol liabilities.
Putty: `acceptCounterOffer()` May Result In Both Orders Being Filled
The Putty protocol suffered from a race condition in the acceptCounterOffer() function that allowed users to be unintentionally over-leveraged. An attacker could front-run the cancellation of an original order by filling it, which allowed the protocol to subsequently fill both the original and the new orders. This occurred because the cancellation function lacked a check to verify that the order was not already filled, leading to potential financial loss and excessive market exposure for users.
PoolTogether: `Vault.mintWithPermit()` can be DoS'd
The `Vault.mintWithPermit` function allowed users to deposit into the vault using an ERC-2612 permit signature; however, it required the exact asset amount calculated from the current exchange rate. Because the exchange rate could fluctuate between signature generation and transaction execution, the hardcoded amount often caused the permit validation to fail. Attackers could front-run these transactions to manipulate the exchange rate, effectively creating a Denial-of-Service condition that prevented users from successfully minting shares. The protocol team eventually mitigated this issue by removing the problematic function entirely.
PoolTogether: `Claimer.claimPrizes` can be front-runned in order to make losses for the claim bot
The PoolTogether V5 prize-claiming mechanism was vulnerable to front-running, where malicious actors could cause large batch-claim transactions from automated bots to revert entirely. By claiming a single prize ahead of a bot's batched transaction, attackers exploited the contract's strict requirement that every prize in a batch must be eligible for claiming. This resulted in significant gas losses for the bots, undermining the economic incentive structure of the protocol's VRGDA-based claimer system. The flaw allowed attackers to disrupt honest market participants and potentially manipulate the dynamically adjusting prize fees for personal gain.
All reports in this group
- Putty: Order cancellation is prone to frontrunning and is dependent on a centralized databaseFront-running / MEV$0
- Notional Exponent: Missing Slippage Protection in Expired PT Redemption Causes User Fund LossFront-running / MEV$0
- Yearn yBOLD: A malicious attacker can steal 25% of the funds of the first depositor in a strategyFront-running / MEV$0
- Burve: An attacker can drain assets from a Closure by exploiting the NoopVault via a donation attackFront-running / MEV$0
- SEDA Protocol: Attacker can front-run Withdraw and steal the withdrawalFront-running / MEV$0
- SEDA Protocol: Anyone can front-run the creation of a vesting account to block itFront-running / MEV$0
- Chakra: Malicious actors can manipulate the `cross_chain_callback` callbackFront-running / MEV$0
- Rubicon: First depositor bug on unmodified Compound forkFront-running / MEV$0
- Peapods: MEV bots will steal from users due to an incorrectly manipulated valueFront-running / MEV$0
- Rubicon: No deadline parameter in `sellAllAmount()` and `buyAllAmount()` functions:Front-running / MEV$0
- Peapods: Malicious actors can front-run setYieldConvEnabledFront-running / MEV$0
- Superposition: No slippage control when withdrawing a position leads to loss of fundsFront-running / MEV$0
- Ethos Network Financial Contracts: Missing slippage protection on `sellVotes()`Front-running / MEV$0
- The Wildcat Protocol: `AccessControlHooks` `onQueueWithdrawal()` does not check if market is hooked which could lead to unexpected errors such as temporary DoSFront-running / MEV$0
- Phi: Attacker can DOS user from selling shares of a `credId`Front-running / MEV$0
- Reserve: Broken assumptions can lead to the inability to seize RSRFront-running / MEV$0
- Reserve: Users can dodge losses due to StRSR era changes with instant operationsFront-running / MEV$0
- Size: Sandwich attack on loan fulfillment will temporarily prevent users from accessing their borrowed fundsFront-running / MEV$0
- Size: Users may incur an unexpected fragmentation fee in the `compensate()` callFront-running / MEV$0
- Flayer: Donation fees are sandwichable in one transactionFront-running / MEV$0
- ZeroLend One: Malicious actors can execute sandwich attacks during market addition with existing fundsFront-running / MEV$0
- ZetaChain: Gas Coin Setup Result In Immediate Profitable ArbitrageFront-running / MEV$0
- Thorchain: A malicious user can steal money out of the vault and other usersFront-running / MEV$0
- Curves Protocol: Single token purchase restriction on curve creation enables snipingFront-running / MEV$0
- Curves Protocol: Withdrawing with amount `= 0` will forcefully set name and symbol to default and disable some functions for token subjectFront-running / MEV$0
- Fenix : Ineffective slippage protection allows for sandwich attacksFront-running / MEV$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Selling sUSDe is vulnerable to sandwich attack when staked token is DAIFront-running / MEV$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Lack of slippage control on `_redeemPT` functionFront-running / MEV$0
- Palmera: Malicious users can front-run host users safe management actions and add those safes as root for wrong orgFront-running / MEV$0
- Arbitrum Foundation: Edge from dishonest challenge edge tree can inherit timer from honest tree allowing confirmation of incorrect assertionFront-running / MEV$0
- DYAD: Attacker can frontrun to prevent vaults from being removed from the dNFT owner's positionFront-running / MEV$0
- LoopFi: Availability of deposit invariant can be bypassedFront-running / MEV$0
- Renzo: Potential arbitrage opportunity in the `xRenzoDeposit` L2 contractFront-running / MEV$0
- Lavarage: Innocent borrower could incur losses caused by a malicious lenderFront-running / MEV$0
- Revert Lend: `AutoRange` execution can be front-ran to avoid protocol fee, causing loss for protocolFront-running / MEV$0
- Revert Lend: Repayments and liquidations can be forced to revert by an attacker that repays minuscule amount of sharesFront-running / MEV$0
- Gamma - Locked Staking Contract: `earlyExitById()` and `exitLateById()` calls near the end of `lockPeriod` are vulnerable to attacks.Front-running / MEV$0
- Napier Finance - LST/LRT Integrations: Users can frontrun LSTs/LRTs tokens prices decrease in order to avoid lossesFront-running / MEV$0
- Exactly Protocol: DoS on liquidations when utilization rate is highFront-running / MEV$0
- Abracadabra Money: Adjusting "_I_" will create a sandwich opportunity because of price changesFront-running / MEV$0
- Wise Lending: Borrowers can DoS liquidations by repaying as little as 1 share.Front-running / MEV$0
- Abracadabra Money: Factory::create() is vulnerable to reorg attacksFront-running / MEV$0
- Acala Network: Incentive accumulation can be sandwiched with additional shares to gain advantage over long-term depositorsFront-running / MEV$0
- Teller Finance: `LenderCommitmentGroup_Smart_test::addPrincipalToCommitmentGroup/burnSharesToWithdrawEarnings()` are vulnerable to slippage attacksFront-running / MEV$0
- Taiko: Invocation delays are not honoured when protocol unpausesFront-running / MEV$0
- Amphora Protocol: Reorg attack on user's Vault deployment and deposit may lead to theft of fundsFront-running / MEV$0
- Salty.IO: MinShares Slippage Parameters Are Ineffective For Initial DepositFront-running / MEV$0
- HydraDX: No `safe_withdrawal` option in `withdraw_protocol_liquidity` function in omnipool can be abused by frontrunners to cause losses to the admin when removing liquidityFront-running / MEV$0
- Althea Liquid Infrastructure: Malicious users can prevent holders from claiming their rewards during a reward cycle by skipping it.Front-running / MEV$0
- reNFT: All orders can be hijacked to lock rental assets forever by tipping a malicious ERC20Front-running / MEV$0
- Tapioca: Composing approval with other messages is subject to DoSFront-running / MEV$0
- Opus: ERC4626 inflate issue mitigation is not sufficientFront-running / MEV$0
- Rio Network: Deposits may be front-run by malicious operator to steal ETHFront-running / MEV$0
- Rio Network: Stakers can avoid validator penaltiesFront-running / MEV$0
- Napier: Napier pool owner can unfairly increase protocol fees on swaps to earn more revenueFront-running / MEV$0
- INIT Capital: SwapType.CloseExactOut balance check too strict can be DOSedFront-running / MEV$0
- Ethereum Credit Guild: The gauge status wasn't checked before reducing the user's gauge weight.Front-running / MEV$0
- Ethereum Credit Guild: Anyone can steal all distributed rewardsFront-running / MEV$0
- INIT Capital: `fillOrder` executor can be front-run by the order creator by changing order's `limitPrice_e36`, the executor's assets can be stolenFront-running / MEV$0
- INIT Capital: Order's creator can update `tokenOut` to arbitrary tokenFront-running / MEV$0
- Collective: Since buyToken function has no slippage checking, users can get less tokens than expected when they buy tokens directlyFront-running / MEV$0
- Paladin: Possible to grief and prevent all users from claiming via front-running `multiClaim()` callsFront-running / MEV$0
- Olas: Missing slippage protection in `liquidity_lockbox::withdraw`Front-running / MEV$0
- Asymmetry Finance: Functions in the `VotiumStrategy` contract are susceptible to sandwich attacksFront-running / MEV$0
- Particle Protocol: AddLiquidity and decreaseLiquidity missing slippage protectionFront-running / MEV$0
- Covalent: New staking between reward epochs will dilute rewards for existing stakers. Anyone can then front-run `OperationalStaking.rewardValidators()` to steal rewardsFront-running / MEV$0
- Covalent: Frontrunning validator freeze to withdraw tokensFront-running / MEV$0
- INIT Capital: `_handleRepay` of `MoneyMarketHook` does not consider the actual debt shares of the `posId` inside the position manager and could lead to a user's tokens getting stuck inside the hookFront-running / MEV$0
- INIT Capital: Liquidations can be prevented by frontrunning and liquidating 1 debt (or more) due to wrong assumption in POS\_MANAGERFront-running / MEV$0
- Wildcat Protocol: `codehash` check in factory contracts does not account for non-empty addressesFront-running / MEV$0
- Tapioca DAO: Potential 99.5% loss in `emergencyWithdraw()` of two Yieldbox strategiesFront-running / MEV$0
- Tapioca DAO: `BaseTOFT.sol`: `removeCollateral` can be used to manipulate other user's positions and steal tokens due to absent approval checkFront-running / MEV$0
- Tapioca DAO: `BaseTOFT.sol`: `retrieveFromStrategy` can be used to manipulate other user's positions due to absent approval checkFront-running / MEV$0
- Maia DAO Ecosystem: Some functions in the Talos contracts do not allow user to supply `slippage` and `deadline`, which may cause swap revertFront-running / MEV$0
- Maia DAO Ecosystem: A lack of slippage protection can lead to a significant loss of user fundsFront-running / MEV$0
- Lybra Finance: Volatile prices and lack of checks on `rigidRedemption()` can cause users to purchase stETH at unwanted pricesFront-running / MEV$0
- Asymmetry Finance: Lack of deadline for uniswap AMMFront-running / MEV$0
- Ethos Reserve: In `ReaperVaultV2`, we should update `lockedProfit` and `lastReport` before changing `lockedProfitDegradation`Front-running / MEV$0
- Biconomy: Attacker can gain control of counterfactual walletFront-running / MEV$0
- Biconomy: Theft of funds under relaying the transactionFront-running / MEV$0
- Biconomy: Griefing attacks on `handleOps` and `multiSend` logicFront-running / MEV$0