Lending protocol vulnerabilities in disclosed bug bounty reports
Lending markets depend on external prices and on liquidation working under stress — most findings target one or the other.
- Reports indexed
- 252
- Total paid
- $2.0M
- Critical
- 2
- Largest payout
- $1.2M
A lending market is solvent as long as collateral is valued correctly and bad positions can be closed. Findings therefore concentrate on valuation — the oracle path, the collateral factor, the treatment of exotic or illiquid assets — and on the liquidation engine that has to function precisely when the network is congested and prices are moving.
Interest accrual is the quieter surface: markets where accrual can be skipped, front-run, or forced to round to zero, and where the index used to compute debt diverges from the actual outstanding balance.
Because lending markets consume prices rather than produce them, they are the most common victim protocol in oracle and flash loan reports.
What reviewers look for
- Collateral valuation reachable through a manipulable price path
- Liquidation incentives insufficient under congestion or extreme moves
- Interest accrual skippable or exploitable through call ordering
- Debt accounting that can round to zero for small positions
- Newly listed or illiquid collateral assets with generic risk parameters
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
Read-only reentrancy in LP price oracle drains lending market
A lending market relied on a liquidity pool's raw virtual price function to value LP tokens deposited as collateral. During a liquidity removal operation, ETH transfers to the caller occurred before internal balance and supply states were reconciled, allowing an execution callback while state was inconsistent. An attacker used this callback to fetch an artificially inflated virtual price, enabling them to over-borrow against their collateral and drain the protocol's reserves in a single transaction.
Missing owner check on Solana instruction lets attacker drain vault
A missing program ownership check in a Solana yield vault protocol allowed unauthorized account spoofing during withdrawal processing. Because the instruction handler accepted an unchecked account and verified only a discriminator byte rather than validating account ownership, an attacker could supply a custom state account with manipulated fields. The protocol trusted the forged state data and generated a Program Derived Address (PDA) signature to execute a token transfer, enabling complete draining of the protocol's vault funds.
Rounding direction lets attacker mint shares for free on first deposit
A classic ERC-4626 share inflation vulnerability enabled an attacker to steal deposits from initial vault users. By depositing a single wei of assets to receive one share and then transferring a large amount of assets directly to the vault contract, the exchange rate ratio was severely skewed. Subsequent deposits from victims rounded down to zero minted shares while forfeiting their underlying tokens, allowing the attacker to redeem their single share for the entire vault balance.
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.
PoolTogether: Unintended or malicious use of prize winners' hooks
In PoolTogether v5, the Vault contract allows prize winners to configure arbitrary hooks via the setHooks function. During the prize claiming process, the contract executes these user-defined hooks prior to and after prize distribution. Because the hook calls lack gas consumption caps and state-change restrictions, a user can configure a malicious hook that conducts unconstrained external operations, griefs claimers paying for transaction gas, or causes claiming transactions to revert. This results in potential gas exhaustion and denial of service for third-party prize claimers.
PoolTogether: Improper handling of cases when withdrawable assets = 0
The PoolTogether vault contract contained a logic flaw where it improperly reported its collateralization status when withdrawable assets reached zero. Specifically, the exchange rate calculation function defaulted to a 1:1 ratio when asset balances were depleted, causing the contract to incorrectly identify itself as collateralized. This inconsistency allowed users or protocols to perform operations that should be restricted for an under-collateralized vault, such as minting fees or initiating liquidations, potentially leading to economic losses.
All reports in this group
- PoolTogether: Vault does not conform to ERC4626Logic error$0
- PoolTogether: Loss of precision leads to under-collateralizedInteger overflow/underflow$0
- PoolTogether: `_requireVaultCollateralized()` is called at the beginning of the functions `mintYieldFee()` and `liquidate()`Logic error$0
- PoolTogether: `Vault` is not compatible with some ERC4626 vaultsLogic error$0
- PoolTogether: `Vault.mintYieldFee` function can be called by anyone to mint `Vault Shares` to any recipient addressAccess control$0
- The Wildcat Protocol: `FixedTermLoanHook` looks at `block.timestamp` instead of `expiry`Logic error$0
- The Wildcat Protocol: User could withdraw more than supposed to, forcing last user withdraw to failInteger overflow/underflow$0
- The Wildcat Protocol: Role providers cannot be EOAs as stated in the documentationLogic error$0
- The Wildcat Protocol: No lender is able to exit even after the market is closedLogic error$0
- The Wildcat Protocol: `FixedTermLoanHooks` allow Borrower to update Annual Interest before end of the "Fixed Term Period"Logic error$0
- The Wildcat Protocol: Inconsistency across multiple repaying functions causing lender to pay extra feesReentrancy$0
- Superposition: `get_fee_growth_inside` in `tick.rs` should allow for `underflow`/`overflow` but doesn'tInteger overflow/underflow$0
- Reserve: RToken can manipulate distribution to avoid paying DAO feesAccess control$0
- Reserve: Dutch auctions can fail to settle if any other collateral in the basket behaves unexpectedlyGovernance attack$0
- Reserve: The `tradeEnd` in `BackingManager` isn't updating correctlyReentrancy$0
- BendDAO: `erc721DecreaseIsolateSupplyOnLiquidate()` missing clear `lockerAddr`Logic error$0
- BendDAO: The bot won't be able to unstake or repay risky positions in the yield contractLogic error$0
- BendDAO: Changing auction duration will have effect on ongoing auctionsGovernance attack$0
- BendDAO: Incorrect accounting of utilization, supply/borrow rates due to vulnerable implementation in `IsolateLogic::executeIsolateLiquidate`Logic error$0
- BendDAO: Major insolvency risk in `LiquidationLogic::executeCrossLiquidateERC721()` due to not setting a maximum liquidation priceOracle manipulation$0
- BendDAO: Risk of mass liquidation after pool/asset pause and unpause, due to borrow interest compounding implementationLogic error$0
- BendDAO: It's impossible to retrieve collected fines from the yield staking contractLogic error$0
- BendDAO: Borrower can prevent yield position repayment and closure by the botLogic error$0
- BendDAO: No check if Arbitrum/Optimism L2 sequencer is down in Chainlink feeds `PriceOracle.sol`Oracle manipulation$0
- BendDAO: Updating fee factor may create issues for the protocolLogic error$0
- BendDAO: Updating asset collateral params can lead to liquidate borrowers arbitrarilyOracle manipulation$0
- BendDAO: Mismatch between yield amount deposited in shares calculation and `getAccountYieldBalance()`Integer overflow/underflow$0
- BendDAO: `executeYieldBorrowERC20()` checking `yieldCap` is wrongLogic error$0
- BendDAO: `isolateRedeem()` revert in case Revert-on-zero-value-transfers tokensOracle manipulation$0
- BendDAO: Protocol should update interest rate after changing rate model in the configurator moduleLogic error$0
- BendDAO: Users cannot unstake from YiedlETHStakingEtherfi.sol, because YieldAccount.sol is incompatible with ether.fi's WithdrawRequestNFT.solLogic error$0
- BendDAO: Anyone can get the NFT collateral token after an Auction without bidding due to missing check on `msg.sender`Access control$0
- BendDAO: If an isolated borrower/bidder is blacklisted by the debt token, risk of DOS liquidation/auction of the corresponding loanLogic error$0
- BendDAO: `isolateRepay()` lack of check `onBehalf == nftOwner`Integer overflow/underflow$0
- BendDAO: Bad debt is never handled which places insolvency risks on BendDAOGovernance attack$0
- BendDAO: Incorrect `unwrapNativeTokenInWallet` receiver addressReentrancy$0
- BendDAO: `wrapNativeTokenInWallet()` always reverts on ArbitrumLogic error$0
- BendDAO: Revert due to underflow error, leading to lock of the liquidated NFTInteger overflow/underflow$0
- BendDAO: User are forced to borrow again in order to unlock their NFTs from `IsolateLending.sol`Logic error$0
- BadgerDAO: Incorrect comparison logic in post-operation checksLogic error$0
- BadgerDAO: Staking ETH incorrectly assumes revert bubblingFlash loan attack$0
- Predy: Liquidation incorrectly tries to transfer token from Market instead of liquidator if `remainingMargin` is negativeLogic error$0
- Predy: Possible DoS When calling `GammaTradeMarket::_removePosition` will cause user position to not be able to get liquidatedLogic error$0
- Predy: PriceFeed does not return to the correct price for quote pairsOracle manipulation$0
- Predy: Liquidators can bypass remaining negative margin check and leave the loss to the protocolOracle manipulation$0
- Predy: Chainlink's `latestRoundData` might return stale or incorrect resultsOracle manipulation$0
- Predy: Liquidity manipulation is possible when tradingOracle manipulation$0
- Predy: Reallocation depends on the `slot0` price, which can be manipulatedReentrancy$0
- Predy: One pair can steal another pair's Uniswap liquidity during `reallocate()` call if both pairs operate on the same Uniswap pool and both have the same upper and lower tick during reallocationLogic error$0
- BakerFi: `StrategyLeverage.harvest` doesn't account flashloan feeFlash loan attack$0
- BakerFi: Vault can be DoSLogic error$0
- Panoptic: `SettleLongPremium` is incorrectly implemented: premium should be deducted instead of addedLogic error$0
- Panoptic: Wrong leg `chunkKey` calculation in `haircutPremia` functionLogic error$0
- BakerFi: When harvesting a strategy and adjusting the debt, all the leftover collateral that is not used to swap the withdrawn collateral from Aave for WETH to repay the flashloan will be locked and lost in the Strategy contractFlash loan attack$0
- Panoptic: Overflow in `CollateralTracker` allows minting shares for freeInteger overflow/underflow$0
- Panoptic: `_validatePositionList()` does not check for duplicate tokenIds, allowing attackers to bypass solvency checksOracle manipulation$0
- BakerFi: Rounding-down of `flashFee` can result in calls to flash loan to revertReentrancy$0
- BakerFi: `ETHOracle.getLatestPrice` needs to convert to 18 decimalsOracle manipulation$0
- BakerFi: All supplied WETH to Aave as a deposit by a Strategy will be irrecoverableLogic error$0
- Panoptic: `CREATE2` address collision during pool deployment allows for complete draining of the poolLogic error$0
- BakerFi: Min and maxAnswer never checked for oracle price feedOracle manipulation$0
- BakerFi: `BalancerFlashLender#receiveFlashLoan` does not validate the `originalCallData`Flash loan attack$0
- BakerFi: Vault is vulnerable to first depositor inflation attackFlash loan attack$0
- Panoptic: `_updateSettlementPostBurn()` may not correctly reduce `s_grossPremiumLast[chunkKey]`Logic error$0
- DYAD: Liquidation bonus logic is wrongOracle manipulation$0
- DYAD: Unable to withdraw Kerosene from `vaultmanagerv2::withdraw` as it expects a `vault.oracle()` method which is missing in Kerosene vaultsOracle manipulation$0
- DYAD: Attacker can make `0` value `deposit()` calls to deny user from redeeming or withdrawing collateralOracle manipulation$0
- DYAD: Value of kerosene can be manipulated to force liquidate usersOracle manipulation$0
- DYAD: `VaultManagerV2.sol::burnDyad` function is missing an `isDNftOwner` modifier, allowing a user to burn another user's minted DYADLogic error$0
- DYAD: `setUnboundedKerosineVault` not called during deployment, causing reverts when querying for Kerosene value after adding it as a Kerosene vaultLogic error$0
- DYAD: User can get their Kerosene stuck because of an invalid check on withdrawOracle manipulation$0
- DYAD: Design flaw and mismanagement in vault licensing leads to double counting in collateral ratios and positions collateralized entirely with kerosineOracle manipulation$0
- DYAD: Missing enough exogenous collateral check in `VaultManagerV2::liquidate` makes the liquidation revert even if (DYAD Minted `>` Non Kerosene Value)Oracle manipulation$0
- DYAD: Attacker can frontrun to prevent vaults from being removed from the dNFT owner's positionFront-running / MEV$0
- DYAD: Incorrect deployment/missing contract will break functionalityLogic error$0
- DYAD: No incentive to liquidate small positions could result in protocol going underwaterLogic error$0
- DYAD: Kerosene collateral is not being moved on liquidation, exposing liquidators to lossOracle manipulation$0
- DYAD: Inability to perform partial liquidations allows huge positions to accrue bad debt in the systemFlash loan attack$0
- Renzo: Pending withdrawals prevent safe removal of collateral assetsLogic error$0
- Renzo: stETH/ETH feed being used opens up to 2 way `deposit<->withdrawal` arbitrageOracle manipulation$0
- Renzo: Withdrawals of rebasing tokens can lead to insolvency and unfair distribution of protocol reservesOracle manipulation$0
- Renzo: Deposits will always revert if the amount being deposited is less than the `bufferToFill` valueReentrancy$0
- Renzo: Withdrawals logic allows MEV exploits of TVL changes and zero-slippage zero-fee swapsReentrancy$0
- Renzo: Withdrawals can fail due to deposits reverting in `completeQueuedWithdrawal()`Logic error$0
- Renzo: Incorrect calculation of queued withdrawals can deflate TVL and increase ezETH mint rateOracle manipulation$0
- Lavarage: Collateral can be claimed back without repaying its corresponding loan due to insufficient instruction validationLogic error$0
- Lavarage: Innocent borrower could incur losses caused by a malicious lenderFront-running / MEV$0
- Lavarage: A borrower can borrow SOL without backing it by a collateralOracle manipulation$0
- Revert Lend: `setReserveFactor` fails to update global interest before updating reserve factorAccess control$0
- Revert Lend: Due to interest rates update method, Interest-Free Loans are possible and the costs of DoS are reducedFlash loan attack$0
- Revert Lend: An attacker can easily bypass the collateral value limit factor checksLogic error$0
- Revert Lend: Liquidation reward sent to msg.sender instead of recipientLogic error$0
- Revert Lend: Incorrect liquidation fee calculation during underwater liquidation, disincentivizing liquidators to participateLogic error$0
- Revert Lend: `V3Vault.sol` permit signature does not check receiving token address is USDCSignature replay$0
- Revert Lend: `_getReferencePoolPriceX96()` will show incorrect price for negative tick deltas in current implementation cause it doesn't round up for themOracle manipulation$0
- Revert Lend: Owner of a position can prevent liquidation due to the `onERC721Received` callbackReentrancy$0
- Revert Lend: `dailyDebtIncreaseLimitLeft` is not updated in `liquidate()`Logic error$0
- Revert Lend: Wrong global lending limit check in `_deposit` functionLogic error$0
- Revert Lend: `AutoExit` could receive a reward calculated from the entire position's fund even if `onlyFee` is true in `AutoExit.execute()`Logic error$0
- Revert Lend: `V3Oracle` susceptible to price manipulationOracle manipulation$0
- Revert Lend: `DailyLendIncreaseLimitLeft` and `dailyDebtIncreaseLimitLeft` are not adjusted accuratelyLogic error$0
- Revert Lend: Tokens can't be removed as a collateral without breaking liquidations and other core functionsOracle manipulation$0
- Revert Lend: No `minLoanSize` means liquidators will have no incentive to liquidate small positionsLogic error$0
- Revert Lend: `V3Vault::transform` does not validate the `data` input and allows a depositor to exploit any position approved on the transformerAccess control$0
- Revert Lend: Users' newly created positions can be prematurely closed and removed from the vault directly after they are createdAccess control$0
- Revert Lend: Lack of safety buffer in `_checkLoanIsHealthy` could subject users who take out the max loan into a forced liquidationOracle manipulation$0
- Revert Lend: Users can lend and borrow above allowed limitationsLogic error$0
- Revert Lend: Risk of reentrancy `onERC721Received` function to manipulate collateral token configs sharesReentrancy$0
- Revert Lend: `V3Vault` is not ERC-4626 compliantLogic error$0
- Abracadabra Money: MagicLpAggregator doesn't consider the dcimal of MagicLPOracle manipulation$0
- Wise Lending: `PendlePowerManager` is incompatible with `PendleRouterV3`Oracle manipulation$0
- Wise Lending: Lack of update when modifying pool feeLogic error$0
- Wise Lending: Wrong use of `nftID` to check if a `PowerFarm` position is an Aave positionInteger overflow/underflow$0
- Wise Lending: Exploitation of the receive Function to Steal FundsReentrancy$0
- Wise Lending: Off-by-one bug prevents the `_compareMinMax()` from detecting Chainlink aggregators' circuit-breaking eventsOracle manipulation$0
- Wise Lending: Borrowers can DoS liquidations by repaying as little as 1 share.Front-running / MEV$0
- Wise Lending: Current heartbeat implementation may lead to a prolonged DoS for Chainlink OraclesOracle manipulation$0
- Wise Lending: User's attempt to deposit & withdraw reverts due to the calculation style inside `_calculateShares()`Logic error$0
- Wise Lending: User can erase their position debt for freeOracle manipulation$0
- Wise Lending: Liquidating chaining can be achieved by liquidating token collateral with the highest `collateralFactor`Oracle manipulation$0
- Wise Lending: Unchecked return value bug on `TransferHelper::_safeTransferFrom()`Logic error$0
- Wise Lending: A user can lose more value than he specifies in the spread when he enters a `PowerFarm`Logic error$0
- Wise Lending: `PendlePowerFarmToken:: totalLpAssetsToDistribute` may lead to temporary DOS due to price growth check being skipped during depositLogic error$0
- Wise Lending: Precision loss in the calculation of the fee amounts and fee shares inside the `_preparePool` function of the `MainHelper` contractInteger overflow/underflow$0
- Wise Lending: Incorrect bad debt accounting can lead to a state where the `claimFeesBeneficial` function is permanently bricked and no new incentives can be distributed, potentially locking pending and future protocol fees in the `FeeManager` contractOracle manipulation$0
- Wise Lending: Liquidators can pay less than required to completely liquidate the private collateral balance of an uncollateralized positionOracle manipulation$0
- Abracadabra Money: Oracle price can be manipulatedOracle manipulation$0
- Wise Lending: First depositor inflation attack in `PendlePowerFarmToken`Logic error$0
- Wise Lending: Exiting a farm on mainnet assumes a peg of `1:1` when swapping stETH for ETHOracle manipulation$0
- Wise Lending: Withdrawing uncollateralized deposits is possible even though the position is in liquidation modeLogic error$0
- Abracadabra Money: MagicLpAggregator always returns lower than correct answer, leading to arbitrage lossOracle manipulation$0
- Wise Lending: The protocol allows borrowing small positions that can create bad debtOracle manipulation$0
- Amphora Protocol: When Convex pool is shut down while collateral type is `CurveLPStakedOnConvex`, users unable to deposit that asset and protocol lose the ability to accept the asset as collateral furtherOracle manipulation$0
- Amphora Protocol: crvRewardsContract `getReward` can be called directly, breaking vaults `claimRewards` functionallityLogic error$0
- Salty.IO: Minimium Collateral Check Can Be BypassedOracle manipulation$0
- Salty.IO: Salt Rewards - Rewards related to Arbitrage profits for pools can be lostPrice manipulation$0
- Salty.IO: When forming POL the DAO will end up stucked with DAI and USDS tokens that cannot handleGovernance attack$0
- Salty.IO: If there is only one USDS borrower, he can never be liquidatedOracle manipulation$0
- Salty.IO: Adversary can prevent updating price feed addresses by creating poisonous proposals ending in `_confirm`Oracle manipulation$0
- Salty.IO: Attacker can take advantage of Chainlink price not occuring within it's 60 minute heartbeat to make PriceAggregator calls failOracle manipulation$0
- Salty.IO: Unwhitelisting does not clear _arbitrageProfits, so re-whitelisting may result in an unfair distribution of liquidity rewardsGovernance attack$0
- Salty.IO: Remove Liquidity has missing reserve1 DUST check, which can make reserve1 to be less than DUSTGovernance attack$0
- Salty.IO: User can evade `liquidation` by depositing the minimum of tokens and gain time to not be liquidatedReentrancy$0
- Salty.IO: First Liquidity provider can claim all initial pool rewardsLogic error$0
- Salty.IO: Incorrect calculation to check remaining ratio after reward in StableConfig.solOracle manipulation$0
- Salty.IO: Attacker Can Inflate LP Position Value To Create a Bad Debt LoanOracle manipulation$0
- Spectra: All yield generated in the IBT vault can be drained by performing a vault deflation attack using the flash loan functionality of the Principal Token contractFlash loan attack$0
- PoolTogether: Any fee claim lesser than the total `yieldFeeBalance` as unit of shares is lost and locked in the `PrizeVault` contractLogic error$0
- PoolTogether: `PrizeVault.maxDeposit()` doesn't take into account produced feesInteger overflow/underflow$0
- PoolTogether: Funds locked due to missing transfer checkLogic error$0
- PoolTogether: `_maxYieldVaultWithdraw()` uses `yieldVault.convertToAssets()`Logic error$0
- PoolTogether: `yieldFeeBalance` wouldn't be claimed after calling `transferTokensOut()`Oracle manipulation$0
- Ethereum Credit Guild: Users can deflate other markets Guild holders rewards by staking less priced tokenGovernance attack$0
- Ethereum Credit Guild: `LendingTerm::debtCeiling()` can return wrong debt as the `min()` is evaluated incorrectlyLogic error$0
- Ethereum Credit Guild: Malicious borrower can decrease Guild holders rewardFlash loan attack$0
- Ethereum Credit Guild: Incorrect calculations in `debtCeiling`Logic error$0
- Ethereum Credit Guild: `totalBorrowedCredit` can revert, breaking gauges.Integer overflow/underflow$0
- Ethereum Credit Guild: Re-triggering the `canOffboard[term]` flag to bypass the DAO vote of the lending term offboarding mechanismGovernance attack$0
- Ethereum Credit Guild: `LendingTerm` inconsistency between debt ceiling as calculated in `borrow()` and `debtCeiling()`Logic error$0
- Ethereum Credit Guild: Over 90% of the Guild staked in a gauge can be unstaked, despite the gauge utilizing its full debt allocationInteger overflow/underflow$0
- Ethereum Credit Guild: LendingTerm `debtCeiling` function uses `creditMinterBuffer` incorrectlyLogic error$0
- Ethereum Credit Guild: The gauge status wasn't checked before reducing the user's gauge weight.Front-running / MEV$0
- Ethereum Credit Guild: Inability to offboard term twice in a 7-day period may lead to bad debt to the marketLogic error$0
- Ethereum Credit Guild: LendingTerm.sol `_partialRepay()` A user cannot partial repay a loan with `0` interestLogic error$0
- Ethereum Credit Guild: Repayers using EOA accounts can be affected if bad debt is generated when they are repaying loansLogic error$0
- Ethereum Credit Guild: ProfitManager's `creditMultiplier` calculation does not count undistributed rewards; this can cause value losses to usersGovernance attack$0
- Ethereum Credit Guild: `RateLimitedMinter` isn't used by `SimplePSM` resulting in Governance attacksGovernance attack$0
- Ethereum Credit Guild: `SurplusGuildMinter.getReward()` is susceptible to DoS due to unbounded loopGovernance attack$0
- Ethereum Credit Guild: `PnL` system can be broken by large users intentionally or unintentionally.Access control$0
- Ethereum Credit Guild: The creation of bad debt (`mark-down` of Credit) can force other loans in auction to also create bad debtGovernance attack$0
- Ethereum Credit Guild: Replay attack to suddenly offboard the re-onboarded lending termSignature replay$0
- Ethereum Credit Guild: Wrong ProfitManager in GuildToken, will always revert for other types of gauges leading to bad debtAccess control$0
- Ethereum Credit Guild: There is no way to liquidate a position if it breaches `maxDebtPerCollateralToken` value creating bad debt.Governance attack$0
- Ethereum Credit Guild: Rounding errors can cause ERC20RebaseDistributor transfers and mints to fail for underflowInteger overflow/underflow$0
- INIT Capital: `setPosMode` should not allow changing the mode when the new mode's `canRepay` status is disabledReentrancy$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: repay(), liquidate() and liquidateWLp() receive shares as argument, which may revert if from approval to tx settled blocks have passedLogic error$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
- INIT Capital: Lack of way to handle not fully repaid bad debt after liquidation after the lending pool share or WLP are fully seizedLogic error$0
- INIT Capital: `collateralizeWLp` can be bypassed even when collateralization is pausedReentrancy$0
- INIT Capital: If wLP is blacklisted, then user will not be able to withdraw itLogic error$0
- INIT Capital: When the `returnNative` parameter is set to true in the `_params` provided to `MoneyMarketHook.execute`, it is not handled properly and could disrupt user expectationsLogic error$0
- INIT Capital: wLp tokens could be stolenLogic error$0
- INIT Capital: Decimals of LendingPool don't take into account the offset introduced by VIRTUAL\_SHARESLogic error$0
- Open Dollar: `ODSafeManager#allowSAFE()` cannot be executed either by the proxy contract or any other address.Logic error$0
- Open Dollar: ODSafeManager.enterSystem - Transfer wrong amount of collateral, debtLogic error$0
- Open Dollar: Old permissions in handlerCan mapping are still attached to the safeHandler of a transferred safeLogic error$0
- Open Dollar: Mismatch between the SAFE generated debt and the amount of the system tokens minted for the userLogic error$0
- Open Dollar: Malicious users are able to bypass the Tax payment using making a Fake BasicActions ContractLogic error$0
- Open Dollar: `transferSAFEOwnership()` does not fully transfer ownershipLogic error$0
- Open Dollar: Collateral could be transferred to an address, which is not `SAFEHandler` managed by the `SAFEManager`Logic error$0
- Wildcat Protocol: Calculation for lender withdrawals in `_applyWithdrawalBatchPayment()` should not round upInteger overflow/underflow$0
- Wildcat Protocol: Removing markets from `WildcatArchController` gives lenders immunity from sanctionsLogic error$0
- Wildcat Protocol: Protocol markets are incompatible with rebasing tokensLogic error$0
- Wildcat Protocol: Lenders can escape the blacklisting of their accounts because they can move their MarketTokens to different accounts and gain the `WithdrawOnly` Role on any account they wantReentrancy$0
- Wildcat Protocol: Borrower can drain all funds of a sanctioned lenderLogic error$0
- Wildcat Protocol: `create2WithStoredInitCode()` does not revert if contract deployment failedLogic error$0
- Wildcat Protocol: `codehash` check in factory contracts does not account for non-empty addressesFront-running / MEV$0
- Wildcat Protocol: Blocked accounts keep earning interest contrary to the WhitePaperOracle manipulation$0
- Wildcat Protocol: Function `WildcatMarketController.setAnnualInterestBips` allows for values outside the factory rangeLogic error$0
- Wildcat Protocol: Borrower has no way to update `maxTotalSupply` of `market` or close market.Access control$0
- Wildcat Protocol: When `withdrawalBatchDuration` is set to zero lenders can withdraw more then allocated to a batchReentrancy$0
- Wildcat Protocol: `setAnnualInterestBips()` can be abused to keep a market's reserve ratio at 90%Logic error$0
- Wildcat Protocol: When a batch of withdrawals expires, that batch is often underpaid their owed interestLogic error$0
- Wildcat Protocol: Pending withdrawal batch debt cannot be paid by the borrower until the cycle endsLogic error$0
- Wildcat Protocol: `collectFees()` updates delinquency wrongly as `_writeState()` is called before assets are transferredLogic error$0
- Tapioca DAO: The amount of debt removed during `liquidation` may be worth more than the account's collateralOracle manipulation$0
- Tapioca DAO: Reentrancy in `USDO.flashLoan()`, enabling an attacker to borrow unlimited USDO exceeding the max borrow limitReentrancy$0
- Tapioca DAO: Incorrect formula used in function `Market.computeClosingFactor()`Integer overflow/underflow$0
- Tapioca DAO: Overflow risk in Market contractInteger overflow/underflow$0
- Tapioca DAO: Tokens can be stolen from other users who have approved MagnetarAccess control$0
- Tapioca DAO: `LidoEthStrategy._currentBalance` is subject to price manipulation, allows overborrowing and liquidationsReentrancy$0
- Tapioca DAO: Ability to steal user funds and increase collateral share infinitely in BigBang and SingularityGovernance attack$0
- Tapioca DAO: Incorrect solvency check because it multiplies collateralizationRate by share not amount when calculating liquidation thresholdInteger overflow/underflow$0
- Tapioca DAO: TOFT `removeCollateral` can be used to steal all the balanceBridge exploit$0
- Tapioca DAO: User's assets can be stolen when removing them from the Singularity market through the Magnetar contractOracle manipulation$0
- Tapioca DAO: `SGLLiquidation::_computeAssetAmountToSolvency`, `Market::_isSolvent` and `Market::_computeMaxBorrowableAmount` may overestimate the collateral, resulting in false solvencyGovernance attack$0
- Tapioca DAO: Collateral can be locked in BigBang contract when `debtStartPoint` is nonzeroGovernance attack$0
- Tapioca DAO: Usage of `BalancerStrategy.updateCache` will cause single sided Loss, discount to Depositor and to OverBorrow from SingularityReentrancy$0
- Tapioca DAO: Funds are locked because borrowFee is not correctly implemented in BigBangGovernance attack$0
- Tapioca DAO: `_liquidateUser()` should not re-use the same minimum swap amount out for multiple liquidationGovernance attack$0
- Tapioca DAO: Incorrect liquidation reward computation causes excess liquidator rewards to be givenOracle manipulation$0
- Tapioca DAO: Attacker can block LayerZero channel due to variable gas cost of saving payloadGovernance attack$0
- Tapioca DAO: Attacker can steal victim's oTAP position contents via `MagnetarMarketModule#_exitPositionAndRemoveCollateral()`Governance attack$0
- Tapioca DAO: Rewards compounded in AaveStrategy are unredeemableGovernance attack$0
- Tapioca DAO: `AaveStrategy.sol`: Changing swapper breaks the contractAccess control$0
- Tapioca DAO: Liquidation transactions can potentially fail for all marketsOracle manipulation$0
- Tapioca DAO: TOFT in (m)TapiocaOft contracts can be stolen by calling removeCollateral() with a malicious removeParams.marketBridge exploit$0
- Tapioca DAO: The BigBang contract take more fees than it shouldGovernance attack$0
- Tapioca DAO: Lack of safety buffer between liquidation threshold and LTV ratio for borrowers to prevent unfair liquidationsGovernance attack$0
- Lybra Finance: Incorrect function call in `LybraRETHVault`'s `getAssetPrice`Logic error$0
- Lybra Finance: Lack of timelock on `rigidRedemption`, enables to steal yield from other usersOracle manipulation$0
- Lybra Finance: Fixed reward percentage for liquidators in the eUSD vault may cause a liquidation crisisLogic error$0
- Lybra Finance: `LybraPeUSDVaultBase.rigidRedemption` should use `getBorrowedOf` instead of `borrowed`Logic error$0
- Lybra Finance: The `EUSDMiningIncentives` contract is incorrectly implemented and can allow for more than the intended amount of rewards to be mintedLogic error$0
- Lybra Finance: Liquidation won't work when bad and safe collateral ratio are set to default valuesInteger overflow/underflow$0
- Lybra Finance: No check for Individual mint amount surpassing 10% when the circulation reaches 10\_000\_000 in `mint()` of `LybraEUSDVaultBase` contractLogic error$0
- Lybra Finance: Making `_totalSupply` and `_totalShares` imbalance significantly by providing fake income leads to stealing fundLogic error$0
- Lybra Finance: Understatement of `poolTotalPeUSDCirculation` amounts due to incorrect accounting after function `_repay` is calledLogic error$0
- Lybra Finance: There is a vulnerability in the `executeFlashloan` function of the `PeUSDMainnet` contract. Hackers can use this vulnerability to burn other people's eUSD token balance without permissionFlash loan attack$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: `Reth.sol`: Withdrawals are unreliable and depend on excess `RocketDepositPool` balance which can brick the whole protocolAccess control$0
- Asymmetry Finance: DoS due to external call failureReentrancy$0
- Ethos Reserve: User can lose up to whole stake on vault withdrawal when there are funds locked in the strategyReentrancy$0
- Ethos Reserve: Rewards will be locked in LQTYStaking ContractAccess control$0
- Ethos Reserve: `_harvestCore()` roi calculation errorLogic error$0