DEX vulnerabilities in disclosed bug bounty reports
Automated market makers hold liquidity and publish a price, which makes them both a target and the instrument used against other protocols.
- Reports indexed
- 382
- Total paid
- $1.2M
- Critical
- 1
- Largest payout
- $900k
A DEX is an invariant plus a pool of assets, and almost every finding is a way to push the invariant somewhere it was not meant to go: rounding that favours the swapper, fee accrual that can be zeroed, callback hooks in concentrated-liquidity designs that re-enter mid-swap, and router paths that trust a user-supplied token list.
Just as often the DEX is not the victim. Its spot price is read by a lending market, its LP token is valued by a vault, and a pool with thin liquidity becomes the cheapest lever available against a much larger protocol.
Reports here pair naturally with the price manipulation and oracle manipulation categories.
What reviewers look for
- Invariant checks skipped or performed before external interaction
- Router paths accepting arbitrary intermediate tokens
- Swap callbacks re-entering pool state
- Rounding direction favouring the caller
- Pool depth low enough to move within a single transaction
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
Spot TWAP oracle manipulated via single-block flash loan
A perpetual derivatives protocol relied on a Uniswap V3 TWAP oracle whose pool observation cardinality was capped at 12, severely reducing its intended 30-second time-weighted average window. An attacker executed a single-block flash loan to heavily distort the underlying spot price without triggering any secondary price feed validation. This allowed the attacker to open oversized leveraged positions at an artificial mark price and force liquidations against counterparties in a single atomic transaction.
Unchecked arithmetic in Move coin split enables balance underflow
A custom coin-splitting helper in a Move-based decentralized exchange implemented unsafe u128 downcasting that bypassed native Move checked arithmetic. Combined with a stale balance check preceding an internal callback, an attacker could request a swap amount exceeding their actual balance. The resulting u128 subtraction underflow truncated upon downcasting into a valid u64 value, crediting the attacker with an artificially inflated balance that could subsequently be drained from the exchange.
Flash-loanable veToken balance inflates emissions gauge weights
A design flaw in the gauge voting system allowed real-time veToken balance checks instead of utilizing checkpointed block or epoch snapshots. An attacker could execute a flash loan to acquire governance tokens, temporarily lock them to generate veToken voting power, vote to direct reward emissions toward their target gauge, and release the lock to repay the flash loan within the same block. This enabled uncollateralized, risk-free manipulation of protocol reward distributions.
Oracle-free AMM invariant rounding allows slow drain
A directional rounding flaw in the Newton-Raphson solver for a StableSwap invariant enabled subtle value extraction during token exchanges. When computing invariant values and target balances, both routines rounded down, yielding an extra wei of token output to the user on specific balance ratios. On low-fee Layer 2 blockchains, an automated script could execute high-frequency minimal swaps to steadily extract pool reserves over time.
Good Entry: When price is within position's range, `deposit` at TokenisableRange can cause loss of funds
Good Entry's TokenisableRange.deposit charges a portion of a user's fresh deposit as protocol fees whenever the pool's live slot0 spot price sits inside the position's tick range, splitting the amount using LiquidityAmounts.getAmountsForLiquidity at that transient price. Because the split is computed from the momentary spot price, a price move between transaction submission and execution — whether from market fluctuation or a deliberate frontrunner — can push the price out of range, which returns a zero token amount for one leg and converts that leg's entire deposit into fees. The follow-on increaseLiquidity call still succeeds because the per-leg 95% minimum is satisfied by the discounted remaining amount, so the depositor loses a full token leg to fees instead of gaining position liquidity. The sponsor initially disputed the report, then confirmed it and removed the fee-clawing mechanism entirely in PR#4.
Good Entry: V3Proxy swapTokensForExactETH does not send back to the caller the unused input tokens
Good Entry's V3Proxy wraps the Uniswap V3 router, exposing a swapTokensForExactETH entry point that pulls a caller-specified maximum amountInMax of an input ERC-20 but only pays the router the exact input consumed by the swap. Because the function never returns the delta between amountInMax and the actually-consumed amount to the caller, every user who specifies an input allowance larger than the swap needs permanently loses that excess, with the funds left stranded in the V3Proxy contract. The flaw is confirmed by the sponsor and was fixed in a follow-up PR that refunds the unused balance; a reproducible Foundry PoC demonstrates the missing refund via a failing balance assertion. Economically this amounts to a systematic overcharge equivalent to locked funds for the protocol's users, which is why it is rated high severity.
All reports in this group
- Good Entry: V3 Proxy does not send funds to the recipient, instead it sends to the msg.senderLogic error$0
- Good Entry: Incorrect Solidity version in FullMath.sol can cause permanent freezing of assets for arithmetic underflow-induced revertOracle manipulation$0
- Good Entry: Overflow can still happen when calculating `priceX8` inside `poolMatchesOracle` operationOracle manipulation$0
- Good Entry: TokenisableRange's incorrect accounting of non-reinvested fees in "deposit" exposes the fees to a flash-loan attackOracle manipulation$0
- Good Entry: Incorrect calculations in deposit() function in TokenisableRange.sol can make the users suffer from immediate lossLogic error$0
- Good Entry: addDust does not achieve the goal correctly and may overflow revertLogic error$0
- Metric: Premature E8 confidence flooring erases configured swap feesLogic error$0
- Metric: Stop-loss checks can miss a 10% drawdown in a normal USDC/WBTC poolLogic error$0
- Metric: A permissionless swapper will extract principal from exact-share liquidity providersLogic error$0
- Metric: ChainlinkOracle cannot pay Data Streams verification fees, causing oracle updates to failLogic error$0
- Metric: Discarding sub-quantum oracle precision lets low-priced assets trade below their signed valueOracle manipulation$0
- Fluid DEX v2: User can steal funds using `_processNormalSupplyAction` uncapped withdrawalLogic error$0
- stNXM by EaseDeFi: Owner can steal funds on withdraw by burning wrong Uniswap V3 position liquidityAccess control$0
- Centrifuge Protocol V3.1: Pool managers can steal all other pools' pending deposits from `globalEscrow` via malicious `requestManager` swappingAccess control$0
- Super DCA Liquidity Network: Attackers will steal rewards from legitimate pools by making duplicate pools for listed token.Logic error$0
- Super DCA Liquidity Network: Fee collection will always fail for initial positions of SuperDCA pools that contain native tokensLogic error$0
- Dango DEX: Inconsistent multiplication during order creation and cancellation can lead to panics and Denial of Service during order cancellationInteger overflow/underflow$0
- Dango DEX: Ineffective minimum order size check for ASK limit orders can lead to Denial of ServiceLogic error$0
- Dango DEX: Attacker can exploit thin liquidity in xyk pool to save on fees.Logic error$0
- Dango DEX: A newly deployed pool can be DoSLogic error$0
- Dango DEX: User can pause all auctions by overflow in mid-price averageInteger overflow/underflow$0
- Dango DEX: Any change in bucket size will DOS order cancellation leading to frozen user funds and halts the entire auctionLogic error$0
- Dango DEX: XYK reflect_curve omits swap fee in order sizing, leaking LP feesLogic error$0
- Dango DEX: The first Liquidity Provider can perform a fee less swap by providing unbalanced liquidity.Logic error$0
- Dango DEX: `OwnerMsg::ForceCancelOrders` is unusable due to the DEX contract lacking a `receive` function to accept refunds from cancelled passive liquidity ordersLogic error$0
- Brevis Pico ZKVM: wrong sign handling when x == 0 produces non-canonical / out-of-range x = pLogic error$0
- Dango DEX: Overflow in geometric can dos swapLogic error$0
- Dango DEX: Users may fail to add liquidity because of overflowInteger overflow/underflow$0
- Ammplify: All taker collateral and collected fees can be stolen by re-entering via `RFTLib.settle` to manipulate uniswap spot price when adding Maker liquidityReentrancy$0
- Ammplify: Attackers can drain the protocol tokensLogic error$0
- Ammplify: Accrued maker fees not yet compounded can be stolen by manipulating uniswap pool spot price to reduce fees equivalent liquidity and liquidity share price on maker liquidity depositPrice manipulation$0
- Ammplify: `Maker.adjustMaker` always reverts when trying to reduce maker liquidity while current price is below position rangeLogic error$0
- Ammplify: NFTManager `burnAsset` always triggers JIT penalty on removalLogic error$0
- Ammplify: transferVaultBalance function is unusable and mistransfers user's funds due to hardcoded asset IDLogic error$0
- Ammplify: JIT penalty on fresh fees can be bypassedLogic error$0
- Ammplify: `Maker.collectFees` re-targets liquidity to original amount even if the maker position was adjusted, causing unexpected position change when the user expected to collect fees only.Logic error$0
- Ammplify: Missing width scaling in FeeWalker.up (non-visited) undercredits compounding maker feesLogic error$0
- Ammplify: DoS of pool if uniswapV3MintCallback's tokenAmountOwed is 0 for a `Revert on Zero Value Transfers` token.Logic error$0
- Ammplify: Uncollected fees from user's NFT position are stuck in `NFTManager` if `NFTManager.decomposeAndMint` function is usedLogic error$0
- Ammplify: Some legitimate `UniV3Decomposer` decompose attempts will always revert due to incorrect liquidity offset calculationLogic error$0
- Ammplify: `UniV3Decomposer` will always revert due to incorrect `RFTPayer` support and lack of token approvals to `MakerFacet`Logic error$0
- Ammplify: Makers can permanently lock JIT penalty revenue from the protocol treasuryLogic error$0
- Ammplify: `View::queryAssetBalances` does not account for JIT penaltiesLogic error$0
- Ammplify: `ViewFacet.queryAssetBalances` doesn't unclude uncollected uniswap fees for compounded maker positionLogic error$0
- Ammplify: User can lose all funds when creating or increasing compounded Maker position due to share inflation first deposit attack in any segment of the user's rangeInteger overflow/underflow$0
- Ammplify: Wide cross-zero ranges revert (InvertedRange) due to sign-loss in tick→index and no wrap supportLogic error$0
- Ammplify: Can't remove compounding maker asset if any visit node in route has only liquidity for itLogic error$0
- BMX Deli Swap: Attacker can swap wBTC in the DeliHook multiples times to not pay / pay less swap feesInteger overflow/underflow$0
- BMX Deli Swap: Users always pay fee on the full swapped amount in the `DeliHook`, even if the swap is smallerLogic error$0
- BMX Deli Swap: `DeliHookConstantProduct` swapping `exactOutput` and `_feeFromOutput` is incorrectLogic error$0
- BMX Deli Swap: In the `IncentiveGauge._upsertIncentive()` function, `_updatePoolByPid()` should be called outside the `if` statementLogic error$0
- BMX Deli Swap: Unconditional lastUpdated advance in RangePool.sync leads to loss of streamed BMX when pool liquidity == 0Logic error$0
- BMX Deli Swap: Finalize-window vote-changing vulnerability: auto-voters can alter choices post-epoch to manipulate resultsLogic error$0
- BMX Deli Swap: Integer Truncation in Incentive Rate Permanently Locks Unstreamed RewardsLogic error$0
- BMX Deli Swap: Protocol fee conversion uses pre‑swap price snapshotLogic error$0
- BMX Deli Swap: Gas consumed in `notifyUnsubscribe` is underestimated during tests and is greater than 300,000 without pre-warmingLogic error$0
- BMX Deli Swap: Reward Token Loss for LPs During NFT Position TransferLogic error$0
- BMX Deli Swap: Users' voting weight can be double-counted when finalize epoch is processed in multiple stepsLogic error$0
- BMX Deli Swap: `Voter::finalize()` incorrect rewards distribution due to transfering WETH before calling `distributor::setTokensPerInterval()`Logic error$0
- BMX Deli Swap: DoSed `Voter::finalize()` due to unbounded pending removals lacking a batch argument variableLogic error$0
- Oku Trade Order Types: Precision loss allows a mallicious user to drain amount received from ordersOracle manipulation$0
- Notional Exponent: Hardcoded `useEth = true` in `remove_liquidity_one_coin` or `remove_liquidity` lead to stuck fundLogic error$0
- Notional Exponent: `migrateRewardPool` Fails Due to Incompatible Storage Design in `CurveConvexLib`Logic error$0
- Notional Exponent: Users unable to claim rewards when Curve LP tokens are staked to Curve Gauge.Logic error$0
- Notional Exponent: Missing Slippage Protection in Expired PT Redemption Causes User Fund LossFront-running / MEV$0
- Notional Exponent: Minting yield tokens single sided can be impossible if CURVE_V2 dexId is used on redemptionsLogic error$0
- Notional Exponent: Incorrect asset matching for ETH/WETH leads to potential DoS of exitPosition in CurveConvexStrategyLogic error$0
- Superfluid Locker System: Staked tokens inside FluidLocker can be withdrawn without calling UnstakeLogic error$0
- Superfluid Locker System: Locker owners can leverage low liquidity pools to bypass the tax mechanismLogic error$0
- Burve: Incorrect handling of ERC4626 vaults with feesLogic error$0
- Burve: User can backrun an admin calling `setEX128` and steal the difference in tokensLogic error$0
- Burve: Protocol fee resides in the diamond contract can be wrongly sent to users if the underlying vault temporarily disables withdrawalLogic error$0
- Burve: Incorrect earnings calculation in `removeValueSingle()` function causes partial user lossesLogic error$0
- Burve: Reserve Share Overflows Due to Too Strict Reward Calculation MechanismInteger overflow/underflow$0
- Burve: Simplex ownership cannot be transferredLogic error$0
- Burve: Attacker captures unclaimed fees by timing deposit with range re-entry and price manipulationLogic error$0
- Burve: The value of each closure is not the same, and the same ValueToken cannot be used for all cidsLogic error$0
- Yieldoor: Strategy main ticks are not symmetric when the tick spacing is one due to incorrect isLowerSided inequalityLogic error$0
- Yieldoor: Integer overflow in observation index calculation leads to denial of serviceInteger overflow/underflow$0
- Yieldoor: `Strategy::checkPoolActivity()` incorrect check leads to vulnerable priceOracle manipulation$0
- Yieldoor: Incorrect modulo calculation in secondary position ticks leads to active position and division by zeroLogic error$0
- Yieldoor: Incorrect tick parameter in collectFees() function leads to loss of vesting position fees or possible complete protocol lockupLogic error$0
- Yieldoor: Strategy main ticks are set according to the tick in slot0, leading to incorrect allocation and loss of fundsLogic error$0
- Nibiru: Vesting account preemption attack preventing future contract deploymentLogic error$0
- Rubicon: DOS of market operations with malicious offersLogic error$0
- Rubicon: The return value of `buyAllAmount` is incorrectLogic error$0
- Peapods: Zapper `_swapV3Single()` has multiple integration issues with V3 swap.Logic error$0
- Peapods: AutoCompoundingPodLp `_pairedLpTokenToPodLp()` does not correctly handle leftover pTKNs.Logic error$0
- Rubicon: Incorrect fee handling in `Position.sol's` Market `Buy`/`Sell` functionsLogic error$0
- Rubicon: `FeeWrapper` fails to handle ETH payment refundsLogic error$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
- NOYA: `executeWithdraw` may be blocked if any of the users are blacklisted from the `baseToken`Logic error$0
- LoopFi: DOS attack to `SwapAction.transferAndSwap()` when using an ERC20 permit `transferFrom`Logic error$0
- Rubicon: Calling `Position._marketSell` function compares `fill_amt` that includes fee to `min_fill_amount` that does not include feeLogic error$0
- Rubicon: No deadline parameter in `sellAllAmount()` and `buyAllAmount()` functions:Front-running / MEV$0
- Rubicon: Both buyAllAmountWithLeverage and sellAllAmountWithLeverage always revertLogic error$0
- NOYA: `_getPositionTVL` of `UNIv3Connector` wrongly assumes ownership of all liquidity of the provided ticks inside `positionManager`Oracle manipulation$0
- LoopFi: `SwapAction.sol#balancerSwap` does not support native ETH as input tokenLogic error$0
- Rubicon: The ````_matcho()```` is not implemented properlyLogic error$0
- Rubicon: `RubiconMarket: buy()` may not take any fee for tokens with low decimal precisionLogic error$0
- Rubicon: `RubiconMarket._buys` will not work for V1 offers due to the reversion in `cancel` method.Logic error$0
- Rubicon: Missing a check for minimum sell amount at the `make` functionLogic error$0
- Rubicon: Incorrect calculations can occur when calling `Position._marketBuy` and `Position._marketSell` functions that do not include maker fee in `_fee`Logic error$0
- Peapods: Pod DoS if the LEAVE_AS_PAIRED_LP_TOKEN option is enabledLogic error$0
- Rubicon: Zero reward rate calculation impedes low-decimals token distributionsLogic error$0
- Peapods: `_protocolFees` can be applied multiple times in `AutoCompoundingPodLp` contractLogic error$0
- Rubicon: Attack on rounding errors to get risk free profitInteger overflow/underflow$0
- Peapods: Vault inflation attack in `AutoCompoundingPodLp` is possible due to incorrectly minting dead sharesLogic error$0
- Rubicon: Fee inclusivity calculations are inaccurate in `RubiconMarket`Logic error$0
- Rubicon: `RubiconMarket` checks slippage incorrectlyLogic error$0
- LoopFi: `SwapAction::getSwapToken` will return wrong swap token for balancer `EXACT_OUT` swapsLogic error$0
- Rubicon: An attacker can steal all `RubiconRouter` fundsLogic error$0
- NOYA: `Registry.sol#updateHoldingPosition` remove position logic is incorrect: should use `ownerConnector` instead of `calculatorConnector` when calculating `holdingPositionId`Logic error$0
- Rubicon: Cannot close leveraged positionsLogic error$0
- Rubicon: Calling `Position._marketBuy` and `Position._marketSell` functions that calculate `_fee` by dividing by `10000` can cause incorrect calculationsLogic error$0
- Plaza Finance: BondOracleAdapter can fetch price from inefficient Pool on AerodromeOracle manipulation$0
- Plaza Finance: BondOracleAdapter will cause massive loss of funds for a large number of bond tokensOracle manipulation$0
- Superposition: It's still not possible to set pool's protocol feesAccess control$0
- Superposition: `createPoolD650E2D0` will not work due to mismatch in solidity and stylus function definitionsLogic error$0
- Superposition: Tokens are pulled from users without verifying pool status contrary to requirementLogic error$0
- Superposition: Users are incorrectly refunded when liquidity is insufficientLogic error$0
- Oku's New Order Types Contract: attacker can drain StopLimit contract funds through Bracket contract because it gives type(uint256).max allowance to bracket contract for input token in performUpkeep functionReentrancy$0
- Oku's New Order Types Contract: Malicious User can Poison Bracket.sol with Blacklisted AccountsLogic error$0
- Oku's New Order Types Contract: `cancelOrder` order can be DOSed due to unbounded loop.Logic error$0
- Oku's New Order Types Contract: User can brick the `Bracket` contract by inputing malicious `txData`Logic error$0
- Oku's New Order Types Contract: Failure to reset unspent approval to the target address will lead to the wiping of the smart contract balanceAccess control$0
- Ramses Exchange: The fee for the protocol in the function `RamsesV3Pool::flash()` is not calculated correctlyFlash loan attack$0
- Ramses Exchange: Inflated `GaugeV3` rewards when period is skippedLogic error$0
- Debita Finance V3: Mixed Token Price Will Be Inflated or DeflatedLogic error$0
- Mento x Good$ Integration: `TradingLimits::update()` incorrectly only rounds up when `deltaFlowUnits` becomes 0, which will silently increase trading limitsLogic error$0
- Superposition: Volatile pools with higher fee structure cannot be created because of tick_spacingLogic error$0
- Superposition: When performing `swap` and the swap position does not cover `swap amount`, the base price of `sqrt_price` is set incorrectlyLogic error$0
- Superposition: Unintended under/overflow of the amount already swapped in/out due to unmatching logicInteger overflow/underflow$0
- Superposition: If liquidity is insufficient, users may need to pay more tokens in `swap2`Logic error$0
- Superposition: Missing `lower<upper` check in `mint_position`Integer overflow/underflow$0
- Superposition: Wrong liquidity formula usedLogic error$0
- Superposition: `swapOut` functions have invalid slippage check, causing user loss of fundsLogic error$0
- Superposition: Parameter misordering in fee collection function causes denial of service and fee lossLogic error$0
- Superposition: `_onTransferReceived()` does not work as intendedLogic error$0
- Superposition: Position's owed fees should allow underflow but it reverts instead, resulting in locked fundsInteger overflow/underflow$0
- Superposition: Lp's liquidity may be lost if re-org happensPrice manipulation$0
- Superposition: `swap_2` implementation will randomly revert due to improper check, root cause for failed test `ethers_suite_uniswap_orchestrated_uniswap_two`Logic error$0
- AXION: Boost buyback burns incorrect amount of liquidityLogic error$0
- AXION: The `V3AMO._mintAndSellBoost()` function does not work with Velodrome, Aerodrome, Fenix, Thena and RamsesLogic error$0
- AXION: Liquidity is incorrectly calculated during `addLiquidity()` for V3AMO, causing DoS.Logic error$0
- Phi: Cred creator could cause stuck fundsAccess control$0
- Phi: `shareBalance` bloating eventually blocks curator rewards distributionLogic error$0
- Phi: Attacker can DOS user from selling shares of a `credId`Front-running / MEV$0
- Phi: Reentrancy in creating Creds allows an attacker to steal all Ether from the Cred contractReentrancy$0
- WOOFi Swap on Solana: State changes are overwritten during anchor serialization when two accounts are the sameLogic error$0
- WOOFi Swap on Solana: Missing permission control in create_oracle and create_pool.Access control$0
- Flayer: Price limit is used as the price range in internal swaps, causing swap TXs to revertLogic error$0
- Flayer: It is possible to prevent the execution of the `execute()` function, listing only one NFT.Logic error$0
- Flayer: Lister is overpaying during the cancel of his listing on ```Listings::cancelListings()```.Logic error$0
- Flayer: In the `Listings.sol#relist()` function, `listing.created` is not set to `block.timestamp`.Logic error$0
- Flayer: ````UniswapImplementation.beforeSwap()```` is vulnerable to price manipulation attackOracle manipulation$0
- Flayer: Owner Can Lose The Token After Being Unlocked but Not WithdrawnLogic error$0
- Flayer: There is a logical error in the _distributeFees() function, resulting in an unfair distribution of fees.Logic error$0
- Flayer: Admin can not set the pool fee since it is only set in memoryLogic error$0
- Flayer: Liquidity provided when initializing a collection in Locker.sol will be stuck in Uniswap, with no way for the user to recover itLogic error$0
- Flayer: FTokens are burned after `quorumVotes` are recorded making a portion of the shares unclaimableLogic error$0
- Flayer: There is a logical error in the removeFeeExemption() function.Logic error$0
- TraitForge: Imprecise token age calculation results in an incorrect nuke factor, causing users to claim the wrong amountInteger overflow/underflow$0
- TraitForge: Lack of ability to make an some external function calls makes the DAO stage unreachableReentrancy$0
- Basin: `Stable2::calcLpTokenSupply()` function cannot convert under certain circumstances, DoSing `calcReserveAtRatioLiquidity`Logic error$0
- Cork Protocol: Wrong accounting of locked RA when repurchasing DS+PA with RALogic error$0
- Cork Protocol: Attackers will steal the reserve from the `Vault` by receiving `ra` in `FlashSwapRouter::__swapDsforRa()`Logic error$0
- Cork Protocol: Admin will not be able to upgrade the smart contracts, breaking core functionality and rendering the upgradeable contracts uselessLogic error$0
- Cork Protocol: Incoming Redemption Assets not being tracked when repurchase is calledLogic error$0
- Cork Protocol: Lack of slippage protection leads to loss of protocol fundsLogic error$0
- Cork Protocol: Users will steal excess funds from the Vault due to `VaultPoolLib::redeem()` not always decreasing `self.withdrawalPool.raBalance` and `self.withdrawalPool.paBalance`Logic error$0
- Cork Protocol: The UUPS proxie standard is implemented incorrectly, making the protocol not upgradeableLogic error$0
- Cork Protocol: Providing liquidity to the AMM does not check the return value of actually provided tokens leading to locked funds.Logic error$0
- Cork Protocol: Users redeeming early will withdraw `Ra` without decreasing the amount locked, which will lead to stolen funds when withdrawing after expiryLogic error$0
- Cork Protocol: Admin will not be able to only pause deposits in the `Vault` due to incorrect check leading to DoSed withdrawalsLogic error$0
- Velar Artha PerpDEX: User can sandwich their own position close to get back all of their position feesLogic error$0
- ZetaChain: Direct WETH swap fails due to incompatibility with ``ZetaTokenConsumerUniV3`` & ``ZetaTokenConsumerPancakeV3``Logic error$0
- ZetaChain: Gas Coin Setup Result In Immediate Profitable ArbitrageFront-running / MEV$0
- Basin: For extreme ratios, `getRatiosFromPriceSwap` will return data for which is impossible to converge into a reserveLogic error$0
- Basin: Incorrectly assigned `decimal1` parameter upon decodingInteger overflow/underflow$0
- Basin: In `Stable2LUT1::getRatiosFromPriceLiquidity`, in extreme cases, `updateReserve` will start breakingInteger overflow/underflow$0
- Midas - Instant Minter/Redeemer: `RedemptionVaultWIthBUIDL.sol#redeemInstant` will always DoS due to incorrect contract call.Logic error$0
- Midas - Instant Minter/Redeemer: MBasisRedemptionVaultWithSwapper does not update mBasis daily limit or allowance when conducting mBasis->mTBill swap.Logic error$0
- Canto: Incorrect names provided in `RegisterConcrete` calls break `LegacyAmino` signing methodLogic error$0
- Canto: `MsgSwapOrder` will never work for Canto nodesLogic error$0
- Canto: An attacker can DoS a coinswap poolLogic error$0
- Optimism: The LPP challenge period can cause malicious and freeloader claims to be uncounterable and can also cause freeloader claims to be abused to entrap honest challengersOracle manipulation$0
- Optimism: Honest party's move could become invalid when re-org takes placeLogic error$0
- Olas: Changing VoteWeighting contract can result in lost staking incentivesFlash loan attack$0
- Olas: Less active nominees can be left without rewards after an year of inactivityGovernance attack$0
- Vultisig: Adversary can prevent the launch of any ILO pool with enough raised capital at any moment by providing single-sided liquidityLogic error$0
- Vultisig: Most users won't be able to claim their share of Uniswap feesLogic error$0
- Thorchain: Incorrect call argument in `THORChain_Router::_transferOutAndCallV5`, leading to grief/steal of `THORChain_Aggregator`'s funds or DoSInteger overflow/underflow$0
- Thorchain: Due to the use of `msg.value` in for loop, anyone can drain all the funds from the `THORChain_Router` contractReentrancy$0
- Velocimeter: Exercising a large amount of options gives significantly higher discounts than supposed to.Logic error$0
- Velocimeter: `ve_supply` is updated incorrectlyLogic error$0
- Velocimeter: voters cannot disable max lockLogic error$0
- Velocimeter: `DepositWithLock` done via `OptionToken` can be abused to permanently lock a user positionLogic error$0
- Velocimeter: Voting power does not decay when calculating shares of flow emissions if the user does not vote again.Logic error$0
- Velocimeter: First liquidity provider of a newly created stable pair can cause DOS and loss of fundsLogic error$0
- Velocimeter: `Voter.replaceFactory()` and `Voter.addFactory()` functions are broken.Logic error$0
- Common Stableswap: stale price can be prolonged Oracle manipulation$0
- Curves Protocol: Theft of holder fees when `holderFeePercent` was positive and is set to zeroLogic error$0
- Curves Protocol: `Curves::_buyCurvesToken()`, Excess of Eth received is not refunded back to the user.Logic error$0
- Curves Protocol: Single token purchase restriction on curve creation enables snipingFront-running / MEV$0
- Curves Protocol: Protocol and referral fee would be permanently stuck in the Curves contract when selling a tokenLogic error$0
- Curves Protocol: Unauthorized Access to `setCurves` FunctionAccess control$0
- Curves Protocol: `onBalanceChange` causes previously unclaimed rewards to be clearedLogic error$0
- Curves Protocol: Stuck rewards in `FeeSplitter` contractLogic error$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
- Curves Protocol: If a user sets their curve token symbol as the default one plus the next token counter instance it will render the whole default naming functionality obsoleteLogic error$0
- Curves Protocol: Unrestricted claiming of fees due to missing balance updates in `FeeSplitter`Logic error$0
- Predy: Incorrect price for negative ticks due to lack of rounding downOracle manipulation$0
- Predy: Reallocation incorrectly sends the exceed `quoteTokens` to Market contract instead of reallocatorLogic error$0
- Krystal DeFi: Swapping logic would be broken for some supported tokensLogic error$0
- Krystal DeFi: Wrong logic in `AUTO_COMPOUND` doesn't allow for swap to token1Logic error$0
- Krystal DeFi: The signatures are replayableLogic error$0
- MagicSea - the native DEX on the IotaEVM: Voting and bribe rewards can be hijacked during emergency unlock by already existing positionsLogic error$0
- MagicSea - the native DEX on the IotaEVM: Inconsistent check in `harvestPositionsTo()` functionLogic error$0
- MagicSea - the native DEX on the IotaEVM: `MlumStaking::addToPosition` should assing the amount multiplier based on the new lock duration instead of initial lock duration.Logic error$0
- MagicSea - the native DEX on the IotaEVM: Wrong call order for `setTopPoolIdsWithWeights`, resulting in wrong distribution of rewardsLogic error$0
- MagicSea - the native DEX on the IotaEVM: A voter lose bribe rewards if another voter voted before claim.Logic error$0
- MagicSea - the native DEX on the IotaEVM: Adding genuine BribeRewarder contract instances to a pool in order to incentivize users can be DOSedLogic error$0
- MagicSea - the native DEX on the IotaEVM: New staking positions still gets the full reward amount as with old stakings, diluting rewards for old stakersLogic error$0
- MagicSea - the native DEX on the IotaEVM: Non-functional vote() if there is one bribe rewarder for this poolLogic error$0
- MagicSea - the native DEX on the IotaEVM: Rewards might get stuck when approved actor renews a positionAccess control$0
- MagicSea - the native DEX on the IotaEVM: Voting does not take into account end of staking lock periodLogic error$0
- MagicSea - the native DEX on the IotaEVM: Attacker can manipulate the `lockDuration` of other users positionsAccess control$0
- MagicSea - the native DEX on the IotaEVM: Voters will lose all bribe rewards forever if they do not claim their rewards after the last bribing periodLogic error$0
- MagicSea - the native DEX on the IotaEVM: Funds unutilized for rewards may get stranded in BribeRewarderLogic error$0
- MagicSea - the native DEX on the IotaEVM: Lack of support for fee on transfer, rebasing and tokens with balance modifications outside of transfers.Logic error$0
- MagicSea - the native DEX on the IotaEVM: Attacker can block all votes to a specific pool by triggering an overflow errorLogic error$0
- Fenix : Ineffective slippage protection allows for sandwich attacksFront-running / MEV$0
- Panoptic: When Burning a Tokenized Position `validate` should be done before flipping the `isLong` bits in `_validateAndForwardToAMM()`Logic error$0
- Panoptic: Premia calculation can cause DOSInteger overflow/underflow$0
- Panoptic: Premium owed can be calculated as a very big number due to reentrancy on uninitialized poolsReentrancy$0
- Panoptic: Removed liquidity can overflow when calling `SemiFungiblePositionManager.mintTokenizedPosition` functionReentrancy$0
- BakerFi: Multiple swap lack slippage protectionOracle manipulation$0
- Panoptic: Partial transfers are still possible, leading to incorrect storage updates, and the calculated account premiums will be significantly different from what they should beLogic error$0
- Panoptic: Attacker can steal all fees from SFPM in pools with ERC777 tokensReentrancy$0
- Panoptic: The Main Invariant "Fees paid to a given user should not exceed the amount of fees earned by the liquidity owned by that user." can be broken due to slight difference when computing collected feeReentrancy$0
- Panoptic: `PanopticFactory` uses spot price when deploying new pools, resulting in liquidity manipulation when mintingOracle manipulation$0
- Panoptic: ` validateCallback()` is vulnerable to a birthday attackLogic error$0
- Panoptic: `removedLiquidity` can be underflowed to lock other user's depositsInteger overflow/underflow$0
- Velvet Capital: Rebalancing : `updateWeights` could revert to due to strict check for swap. This would impact the timely rebalancing.Logic error$0
- Elfi: Lack of oracle setting in autoReducePositionsLogic error$0
- LoopFi: Availability of deposit invariant can be bypassedFront-running / MEV$0
- Renzo: Lack of slippage and deadline during withdraw and depositOracle manipulation$0
- Arrakis Valantis SOT: ArrakisMetaVaultPrivate::fund No slippage control on private vault deposit can cause unlimited loss to ownerOracle manipulation$0
- Arrakis Valantis SOT: A malicious executor can delete the fees belonging to the owner of `ArrakisStandardManager`Access control$0
- Arrakis Valantis SOT: USDT is not supportedLogic error$0
- Arrakis Valantis SOT: Through rebalance(), an executor can drain 100% of vault reserves by minting cheap sharesLogic error$0
- Revert Lend: `V3Utils.execute()` does not have caller validation, leading to stolen NFT positions from usersAccess control$0
- Revert Lend: `AutoRange` execution can be front-ran to avoid protocol fee, causing loss for protocolFront-running / MEV$0
- Revert Lend: User might execute `PositionToken` of token set by previous token ownerAccess control$0
- Revert Lend: Users cannot stop loss in AutoRange and AutoExitOracle manipulation$0
- Napier Finance - LST/LRT Integrations: Users can frontrun LSTs/LRTs tokens prices decrease in order to avoid lossesFront-running / MEV$0
- Napier Finance - LST/LRT Integrations: Incorrect checking in `receiveFlashLoan` can cause `swapETHForYt` to fail unexpectedly.Flash loan attack$0
- Napier Finance - LST/LRT Integrations: Less rsETH minted than intended in volatile conditions. due to zero slippage when staking ETH to mint rsETHLogic error$0
- Napier Finance - LST/LRT Integrations: Slippage on `MetapoolRouter.addLiquidityOneETHKeepYt`Logic error$0
- Abracadabra Money: Adjusting "_I_" will create a sandwich opportunity because of price changesFront-running / MEV$0
- Abracadabra Money: Missing Return Statement in `_getReserves` Function in `MagicLpAggregator` ContractOracle manipulation$0
- Abracadabra Money: Anyone making use of the MagicLP's TWAP to determine token prices will be exploitable.Oracle manipulation$0
- Abracadabra Money: Users who deposited MIM and USDB tokens into BlastOnboarding may incur losses when the pool is created via bootstrapReentrancy$0
- Abracadabra Money: Attacker can amplify a rounding error in MagicLP to break the I invariant and cause malicious pricingReentrancy$0
- Abracadabra Money: Pool Creation Failure Due to WETH Transfer Compatibility Issue on Some ChainsOracle manipulation$0
- Abracadabra Money: A user's tokens could be locked for an extended duration beyond their intention and without their controlLogic error$0
- Abracadabra Money: Factory::create() is vulnerable to reorg attacksFront-running / MEV$0
- Abracadabra Money: Less base tokens are transferred when selling quote tokens due to the precision loss that occurred in `_GeneralIntegrate()`Integer overflow/underflow$0
- Acala Network: Storage can be bloated with low liquidity positionsLogic error$0
- Convergence Convex Integration: Using `block.timestamp` for swap deadline offers no protectionLogic error$0
- Taiko: Gas issuance is inflated and will halt the chain or lead to incorrect base feeLogic error$0
- Zivoe: OCL_ZVE.sol::forwardYield relies on manipulable Uniswap V2 pool reserves leading to theft of fundsOracle manipulation$0
- Salty.IO: MinShares Slippage Parameters Are Ineffective For Initial DepositFront-running / MEV$0
- Salty.IO: Reusing a SALT that has already been used for voting can allow a malicious proposal to pass and compromise the protocolLogic error$0
- Salty.IO: `_getUniswapTwapWei()` will show incorrect price for negative ticks cause it doesn't round up for negative ticksOracle manipulation$0
- Salty.IO: Incorrect assumption in PoolMath.sol can cause underflow when zapping is usedInteger overflow/underflow$0
- Salty.IO: Suboptimal arbitrage implementationInteger overflow/underflow$0
- Salty.IO: The use of spot price by CoreSaltyFeed can lead to price manipulation and undesired liquidationsOracle manipulation$0
- Salty.IO: formPOL lacks slippage and deadline protectionOracle manipulation$0
- HydraDX: complete liquidity removal will result in permanent disable of the liquidity addition and prevent minting shares for the liquidity providers.Logic error$0
- HydraDX: Users can MAKE EMA-Oracle price outdated with direct transfers to StableSwapOracle manipulation$0
- HydraDX: An attacker possesses the capability to exhaust the entirety of liquidity within the stable swap pools by manipulating the buy function, specifically by setting the `asset_in` parameter equal to the `asset_out` parameterLogic error$0
- HydraDX: Complete liquidity removals fail from stableswap poolsLogic error$0
- HydraDX: Malicious liquidity provider can put pool into highly manipulatable statePrice manipulation$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
- HydraDX: Re-adding assets to the omnipool can cause a problem with the oracleLogic error$0
- HydraDX: Storage can be bloated with low value liquidity positionsLogic error$0
- HydraDX: A huge loss of funds for all the users who try to remove liquidity after swapping got disabled at manipulated price.Logic error$0
- Goat Trading: No check for `initialEth` in `GoatV1Pair.takeOverPool()`.Logic error$0
- Goat Trading: The router is not compatible with fee on transfers tokensLogic error$0
- Goat Trading: It's possible to create pairs that cannot be taken overInteger overflow/underflow$0
- Goat Trading: Liquidity provider fees can be stolen from any pairLogic error$0
- Axis Finance: It is possible to DoS batch auctions by submitting invalid AltBn128 points when biddingLogic error$0
- WagmiLeverage V2: When the amout of token acquired by a flash loan exceeds the expected value, the callback function will fail.Flash loan attack$0
- WOOFi Swap: Potential damages due to incorrect implementation of the ````ZIP```` algorithmLogic error$0
- WOOFi Swap: In the function _handleERC20Received, the fee was incorrectly chargedLogic error$0
- WOOFi Swap: `WooCrossChainRouterV4.crossSwap()` doesn't correctly check for slippageLogic error$0
- WOOFi Swap: Pool can be drainedOracle manipulation$0
- WOOFi Swap: Price manipulation by swapping any ````baseToken```` with itselfOracle manipulation$0
- reNFT: Assets in a Safe can be lostLogic error$0
- WOOFi Swap: WooFi oracle can fail to validate its price with Chainlink price feedOracle manipulation$0
- WOOFi Swap: Swaps can happen without changing the price for the next trade due to gamma = 0Logic error$0
- Amphor: The `_zapIn` function may unexpectedly revert due to the incorrect implementation of `_transferTokenInAndApprove`Logic error$0
- Tapioca: StargateRouter cannot send payloads and rebalancing of ERC20s is brokenAccess control$0
- Tapioca: Stargate Pools conversion rate leads to token accumulation inside the Balancer contractLogic error$0
- Rio Network: swapValidatorDetails incorrectly writes keys to memory, resulting in permanently locked beacon chain depositsLogic error$0
- Rio Network: `reportOutOfOrderValidatorExits` does not updates the heap orderLogic error$0
- Rio Network: Stakers can avoid validator penaltiesFront-running / MEV$0
- Smilee Finance: Utilization rate for bonding curve purposes is calculated for a total of bull and bear usage, which can be abused to steal all vault fundsPrice manipulation$0
- Smilee Finance: Transferring ERC20 Vault tokens to another address and then withdrawing from the vault breaks `totalDeposit` accounting which is tied to deposit addressesLogic error$0
- Smilee Finance: PositionManager will revert when trying to return back to user excess of the premium transferred from the user when minting positionOracle manipulation$0
- Smilee Finance: The sign of delta hedge amount can be reversed by malicious user due to incorrect condition in `FinanceIGDelta.deltaHedgeAmount`Logic error$0
- Smilee Finance: Trading out of the money options has delta = 0 which breaks protocol assumptions of traders profit being fully hedged and can result in a loss of funds to LPsLogic error$0
- Smilee Finance: Whenever swapPrice > oraclePrice, minting via PositionManager will revert, due to not enough funds being obtained from user.Logic error$0
- Smilee Finance: If the vault's side token balance is 0 or a tiny amount, then most if not all IG Bear trades will revert due to incorrect check of computation error during delta hedge amount calculationLogic error$0
- Jala Swap: The functions about ```permit``` won't work and always revertLogic error$0
- Fenix Finance: Protocol fees collected in PairFees are lost due to accrued yieldLogic error$0
- Fenix Finance: First liquidity provider of a stable pair can DOS the poolLogic error$0
- Napier: Victim's fund can be stolen due to rounding error and exchange rate manipulationLogic error$0
- Napier: The pool verification in `NapierRouter` is prone to collision attacksLogic error$0
- Napier: Napier pool owner can unfairly increase protocol fees on swaps to earn more revenueFront-running / MEV$0
- Napier: LP Tokens always valued at 3 PTsLogic error$0
- INIT Capital: SwapType.CloseExactOut balance check too strict can be DOSedFront-running / MEV$0
- Collective: MaxHeap.sol: Already extracted tokenId may be extracted againLogic error$0
- Collective: positionMapping for last element in heap is not updated when extracting max elementLogic error$0
- Asymmetry Finance: Lack of access control and value validation in the reward flow exposes functions to public accessAccess control$0
- Olas: Permanent DOS in `liquidity_lockbox` for under $10Logic error$0
- Asymmetry Finance: Zero amount withdrawals of SafEth or Votium will brick the withdraw processLogic error$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
- Asymmetry Finance: It might not be possible to `applyRewards()`, if an amount received is less than 0.05 ethLogic error$0
- Particle Protocol: AddLiquidity and decreaseLiquidity missing slippage protectionFront-running / MEV$0
- LooksRare YOLO: User can get free entries if the price of any whitelisted ERC20 token is greater than the round's `valuePerEntry`Logic error$0
- AlephZeroAMM: mint_fee` collects fee from adding and removing liquidityLogic error$0
- JOJO Exchange Update: FundRateArbitrage is vulnerable to inflation attacksInteger overflow/underflow$0
- Open Dollar: Unable to retrieve price information with CamelotRelayer contractOracle manipulation$0
- Tapioca DAO: TOFT leverageDown always fails if TOFT is a wrapper for native tokensGovernance attack$0
- Tapioca DAO: Potential 99.5% loss in `emergencyWithdraw()` of two Yieldbox strategiesFront-running / MEV$0
- Tapioca DAO: TOFT and USDO Modules Can Be SelfdestructedGovernance attack$0
- Tapioca DAO: `BaseTOFTLeverageModule.sol`: `leverageDownInternal` tries to burn tokens from wrong addressGovernance attack$0
- Centrifuge: `LiquidityPool::requestRedeemWithPermit` transaction can be front run with the different liquidity poolLogic error$0
- Centrifuge: ```trancheTokenAmount``` should be rounded UP when proceeding to a withdrawal or previewing a withdrawalLogic error$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: `Rerange`/`rebalance` should not use `protocolFee` as an asset for adding liquidityReentrancy$0
- Maia DAO Ecosystem: Incorrect flow of adding liquidity in `UlyssesRouter.sol`Reentrancy$0
- Maia DAO Ecosystem: Slippage controls for calling `bHermes` contract's `ERC4626DepositOnly.deposit` and `ERC4626DepositOnly.mint` functions are missingInteger overflow/underflow$0
- Maia DAO Ecosystem: `setWeight()` Logic errorReentrancy$0
- Maia DAO Ecosystem: The `RestakeToken` function is not permissionlessAccess control$0
- Maia DAO Ecosystem: `UlyssesToken` asset ID accounting errorInteger overflow/underflow$0
- Maia DAO Ecosystem: `UlyssesToken.setWeights(...)` can cause user loss of assets on vault deposits/withdrawalsGovernance attack$0
- Maia DAO Ecosystem: `BribesFactory::createBribeFlywheel` can be completely blocked from creating any `Flywheel` by a malicious actorAccess control$0
- Maia DAO Ecosystem: Many `create` methods are suspicious of the reorg attackGovernance attack$0
- Maia DAO Ecosystem: A user can bypass bandwidth limit by repeatedly "balancing" the poolGovernance attack$0
- Maia DAO Ecosystem: Deploy flow of `Talos` is brokenGovernance attack$0
- Maia DAO Ecosystem: Second per liquidity inside could overflow `uint256` causing the LP position to be locked in `UniswapV3Staker`Integer overflow/underflow$0
- Maia DAO Ecosystem: `VirtualAccount` cannot directly send native tokensGovernance attack$0
- Maia DAO Ecosystem: `TalosBaseStrategy#init()` lacks slippage protectionReentrancy$0
- Maia DAO Ecosystem: Removing a `UniswapV3Gauge` via `UniswapV3GaugeFactory` does not actually remove it from the `UniswapV3Staker`. The gauge still gains rewards and can be staked too (even though deprecated). Plus old stakers can game the rewards of new stake…Governance attack$0
- Maia DAO Ecosystem: An attacker can exploit the "deposit" to drain the `Ulysess Liquidity Pool`Integer overflow/underflow$0
- Maia DAO Ecosystem: `withdrawProtocolFees()` Possible malicious or accidental withdrawal of all rewardsAccess control$0
- Maia DAO Ecosystem: A lack of slippage protection can lead to a significant loss of user fundsFront-running / MEV$0
- Maia DAO Ecosystem: Removing a `BribeFlywheel` from a Gauge does not remove the reward asset from the rewards depo, making it impossible to add a new Flywheel with the same reward tokenAccess control$0
- Maia DAO Ecosystem: `UlyssesPool.sol` does not match `EIP4626` because of the preview functionsGovernance attack$0
- Lybra Finance: Incorrectly implemented modifiers in `LybraConfigurator.sol` allow any address to call functions that are supposed to be restrictedAccess control$0
- Lybra Finance: `EUSD.mint` function wrong assumption of cases when calculated sharesAmount = 0Governance attack$0
- Asymmetry Finance: `WstEth` derivative assumes a `~1=1` peg of stETH to ETHOracle manipulation$0
- Asymmetry Finance: Potential `stake()` DoS if sole safETH holder (ie: first depositor) unstakes `totalSupply` - 1Logic error$0
- Asymmetry Finance: Possible DoS on `unstake()`Oracle manipulation$0
- Asymmetry Finance: Non-ideal rETH/WETH pool used pays unnecessary feesGovernance attack$0
- Asymmetry Finance: Missing derivative limit and deposit availability checks will revert the whole `stake()` functionAccess control$0
- Asymmetry Finance: Reth `poolPrice` calculation may overflowOracle manipulation$0
- Asymmetry Finance: Staking, unstaking and rebalanceToWeight can be sandwiched (Mainly rETH deposit)Oracle manipulation$0
- Asymmetry Finance: Division before multiplication truncate `minOut` and incurs heavy precision loss and result in insufficient slippage protectionAccess control$0
- Asymmetry Finance: Lack of deadline for uniswap AMMFront-running / MEV$0