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
- 949
- 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.
Union Finance: `UnionToken` should check whitelist on `from`?
Union Finance's UnionToken enforces its whitelist guest list inside the OpenZeppelin ERC20 _beforeTokenTransfer hook, but validates isWhitelisted(msg.sender) rather than isWhitelisted(from). Because the hook fires on both transfer and transferFrom, a single whitelisted contract or relayer can be granted an allowance and move tokens out of any non-whitelisted account as long as the operator itself passes the whitelist. This effectively sidesteps the guest list entirely for any token holder who establishes an allowance. The sponsor confirmed the issue and the judge upheld it as medium severity, directing that the check be applied to the from address.
All reports in this group
- Rigor Protocol: Wrong APR can be used when project is unpublished and published againLogic error$0
- Union Finance: Rebalance will fail due to low precision of percentagesLogic error$0
- Union Finance: `MAX_TRUST_LIMIT` might be too highLogic error$0
- Union Finance: Change in interest rate can disable repay of loanLogic error$0
- Union Finance: Comptroller rewards can be artificially inflated and drained by manipulating [totalStaked - totalFrozen] (or: wrong rewards calculation)Logic error$0
- Rigor Protocol: Incorrect initialization of smart contracts with Access Control issueAccess control$0
- Union Finance: debtWriteOff updates `totalFrozen` immaturely, thereby losing staker rewardsLogic error$0
- Good Entry: Incorrect parameters passed to UniV3 may cause funds stuck in the vaultLogic error$0
- Union Finance: User Fund loss in case of Unsupported Market token depositLogic error$0
- Union Finance: `borrow` must `accrueInterest` firstLogic error$0
- PoolTogether: `_requireVaultCollateralized()` is called at the beginning of the functions `mintYieldFee()` and `liquidate()`Logic error$0
- Good Entry: First depositor can break minting of liquidity shares in GeVaultFront-running / MEV$0
- Good Entry: User can steal refunded underlying tokens from `initRange` operation inside `RangeManager`Access control$0
- Good Entry: Unused funds are not returned and not counted in `GeVault`Logic error$0
- Union Finance: Wrong implementation of `CreditLimitByMedian.sol#getLockedAmount()` will lock a much bigger total amount of staked tokens than expectedLogic error$0
- PoolTogether: Improper handling of cases when withdrawable assets = 0Logic error$0
- PoolTogether: `Vault` is not compatible with some ERC4626 vaultsLogic error$0
- Rigor Protocol: Possible DOS in `lendToProject()` and `toggleLendingNeeded()` function because unbounded loop can run out of gasLogic error$0
- PoolTogether: `Vault.mintYieldFee` function can be called by anyone to mint `Vault Shares` to any recipient addressAccess control$0
- Rigor Protocol: Missing upper limit definition in `replaceLenderFee()` of `HomeFi.sol`Integer overflow/underflow$0
- Rigor Protocol: Task Functionality completely sidestepped via `autoWithdraw`Logic error$0
- Rigor Protocol: Builders must pay more interest when the system is paused.Logic error$0
- Union Finance: Wrong implementation of `CreditLimitByMedian.sol#getLockedAmount()` makes it unable to unlock `lockedAmount` in `CreditLimitByMedian` modelLogic error$0
- PoolTogether: Vault does not conform to ERC4626Logic error$0
- Rigor Protocol: Builder can call `Community.escrow` again to reduce debt further using same signaturesLogic error$0
- PoolTogether: Loss of precision leads to under-collateralizedInteger overflow/underflow$0
- Union Finance: Rebalance will fail if a market has high utilizationLogic error$0
- Current Finance: Multiply-before-divide overflow in update_pool_reward_manager permanently freezes all lending operations for affected CoinTypeInteger overflow/underflow$0
- Current Finance: Double subtraction of cash_reserve in deposit_limit_breached allows bypassing the maximum deposit limitLogic error$0
- Current Finance: Cross-segment limiter netting failure lets attackers grief daily borrow and withdraw capsLogic error$0
- Current Finance: Expired reward pool close can refund economically accrued borrower yield before lazy reward materializationLogic error$0
- Current Finance: ADL borrow deleverage triggers on global debt instead of per-group debt, force-liquidating healthy positionsLogic error$0
- Current Finance: Whitelisted liquidation bots will seize collateral from borrowers that are still solvent at spot price during EMA lagLogic error$0
- Monolith Stablecoin Factory: Inconsistency in position health checks will lead to the incorrect user liquidationsLogic error$0
- Monolith Stablecoin Factory: User can abuse rounding issue in order to borrow unbacked tokensLogic error$0
- stNXM by EaseDeFi: Missing Uniswap V3 cardinality initialization in `StNxmOracle` leads to permanent Denial of ServiceOracle manipulation$0
- stNXM by EaseDeFi: Attacker can profit by manipulating Uniswap liquidity.Oracle manipulation$0
- Centrifuge Protocol V3.1: Incorrectly handled subtraction leads to underflow resulting in permanent user fund lock and DOSInteger overflow/underflow$0
- Inverse Finance - Junior Tranche: Off-by-one error in exit window check allows users to avoid the withdrawal feeLogic error$0
- Index Fun Order Book: Seller Pays Buyer's Trade Fee in Token Swaps, Leading to Systematic Theft of FundsLogic error$0
- Index Fun Order Book: Lack of Emergency Market Invalidation MechanismLogic error$0
- Brevis Pico ZKVM: read_write chip does not enforce constraints on opcode selectorsLogic error$0
- Ammplify: Borrow fee uses APY as per-second rate, causing extreme overchargingInteger overflow/underflow$0
- Ammplify: An attacker can block a user from opening new Maker/Taker positions by “donating” 16 unwanted Maker assets, saturating their asset quotaLogic error$0
- Ammplify: Utilization Ratio Overflow Due to Incorrecte uint64 CastInteger overflow/underflow$0
- Ammplify: Incorrect inside fees calculation for uninitialized uniswap ticks causes positions funds being stuck in the contract and allows to steal all taker collateral and collected feesLogic error$0
- Ammplify: Liquidity borrowed from or repaid to parent nodes is not always minted or burned in the uniswap pool, breaking up accounting and allowing to steal all protocol fundsLogic error$0
- Ammplify: Takers pay significantly higher fees than expected due to borrow amounts being split across segmentsLogic error$0
- Ammplify: adjustMaker ignores recipient parameter when removing liquidityLogic error$0
- Ammplify: Pending Owner cannot accept ownership because of wrong implementation of `transferOwnership` and `acceptOwnership` functionsLogic error$0
- Ammplify: Takers can pay significantly less fees with makers losing these amounts due to `subtreeBorrowedX` and `subtreeBorrowedY` being node's values instead of subtree'sLogic error$0
- USG - Tangent: Users can steal accumulated rewards when `totalCollateral` becomes zero due to incomplete state updatesLogic error$0
- USG - Tangent: No slippage check for liquidators when they burn USG from their account without Swapping first.Logic error$0
- USG - Tangent: Edge-case USG prices will force reverts for functions relying on IRCalculatorLogic error$0
- USG - Tangent: Delayed Reward Cut Parameter Updates (Two-Cycle Enforcement Lag)Logic error$0
- USG - Tangent: Incorrect calls and Enforcements during Migration To a market.Logic error$0
- USG - Tangent: Liquidation Fee is incorrectly computedLogic error$0
- Yield Basis: Emergency withdrawal fails to update the guage when the contract is not killedLogic error$0
- Malda: Migrator severily underestimates slippage by using underlying instead of sharesLogic error$0
- Malda: ```WrapAndSupply::wrapAndSupplyOnExtensionMarket``` preventes users from supplying on hostLogic error$0
- Malda: MixedPriceOracleV4.sol :: getUnderlyingPrice()/getPirce() will not work for some tokens because API3 and EO oracles return prices using different decimals, causing DOS scenario.Logic error$0
- Malda: Blacklist can be completely bypassed on outHere endpoint in mTokenGatewayLogic error$0
- Malda: Wrong direction of rounding in redeem may lead to drain if exchange rate grows largeInteger overflow/underflow$0
- Malda: There is no endpoint for triggering `liquidateExternal` from extension chain to be executed by proof forwarderLogic error$0
- Malda: First depositor can brick market by forcing very large borrow rateLogic error$0
- Malda: Rebalancer can drain market funds via excessive bridge feesAccess control$0
- Cap: Lender DoS if all asset is borrowed or realizedLogic error$0
- Cap: Cannot repay or liquidate on paused assetLogic error$0
- Cap: Utilization rate multiplier will not shift if oracle is consulted frequentlyOracle manipulation$0
- Cap: Restaker rewards on zero coverage agent will be stolen by subsequent restaker interest realizationLogic error$0
- Cap: VaultAdapter::multiplier not initialized can lead first borrows to have `utilizationRate` = 0Logic error$0
- Cap: Attacker/partial liquidator can extend Liquidation action by resetting $.liquidationStart[_agent] to 0.Logic error$0
- Cap: Missing slippage protection in liquidation allows unexpected collateral lossLogic error$0
- Notional Exponent: Funds stuck if one of the withdrawal requests cannot be finalizedLogic error$0
- Notional Exponent: Malicious user can change the `TradeType` to steal funds from the vault or withdraw request managerLogic error$0
- Notional Exponent: Incorrect assumption that one (1) Pendle Standard Yield (SY) token is equal to one (1) Yield Token when computing the price in the oracleOracle manipulation$0
- Notional Exponent: Incorrect `tokensClaimed` calculation in `EthenaCooldownHolder::_finalizeCooldown()` blocks withdrawalsLogic error$0
- Notional Exponent: Rounding discrepancy between `MorphoLendingRouter::healthFactor` and `Morpho::repay` causes position migration failuresLogic error$0
- Notional Exponent: Attacker can drain the entire suppliers on Morpho market by inflating collateral priceOracle manipulation$0
- Notional Exponent: DoS might happen to `DineroWithdrawRequestManager#_initiateWithdrawImpl()` due to overflow on `++s_batchNonce`Integer overflow/underflow$0
- Notional Exponent: Unable to support Curve Pool with Native ETHLogic error$0
- Notional Exponent: Hard-Coded Mainnet WETH Address Breaks All Non-Mainnet DeploymentsLogic error$0
- Notional Exponent: Liquidations can be frontrunned to avoid by paying as little as 1 share.Logic error$0
- Notional Exponent: Single sided strategy cant do trades for ETH poolsLogic error$0
- Notional Exponent: Withdrawals ongoing for OETH, apxETH, weETH, and almost any LST are overpriced by the oracleLogic error$0
- Notional Exponent: Incompatibility of `ERC20::approve` function with USDT tokens on Ethereum Mainnet chainLogic error$0
- Notional Exponent: User unable to migrate under certain edge caseLogic error$0
- Notional Exponent: Lack of minimum debt threshold enables unliquidatable small positionsLogic error$0
- Notional Exponent: Unable to deposit to Convex in ArbitrumLogic error$0
- Notional Exponent: OETH Strategy Broken as Rebasing Not EnabledLogic error$0
- Notional Exponent: `initializeMarket` can be frontran, preventing markets from being configured in `MorphoLendingRouter `Logic error$0
- Superfluid Locker System: Incorrect initial deposit calculation may cause cancelProgram to revertLogic error$0
- LEND: Incorrect LEND reward distribution for cross-chain borrowsLogic error$0
- LEND: Transfers will fail when using USDTLogic error$0
- LEND: The liquidation validation logic is wrongLogic error$0
- LEND: Cross-chain borrow ignores existing debt in collateral validationLogic error$0
- LEND: Cross-chain collaterals are wrongly calculated in the borrowWithInterest functionLogic error$0
- LEND: User can redeem collateral immediately after initiating the borrow, leading undercollateralization.Logic error$0
- LEND: Cross-chain liquidation uses incorrect lToken address, preventing repayment and breaking liquidation flowLogic error$0
- LEND: Incorrect Debt Tracking in `_updateRepaymentState`Logic error$0
- LEND: Subsequent Cross‐Chain Borrows don’t Accrue interest on existing principal when borrowing the same AssetLogic error$0
- LEND: Borrower will loose funds if their repay transaction executes after cross-chain liquidation callLogic error$0
- LEND: Drainage of the LEND token reserves through repeated claims of the same rewardsLogic error$0
- LEND: Incorrect Collateral Check Logic in CoreRouter.sol#borrow()Logic error$0
- LEND: wrong calculation of amount of Ltokens to seize in liquidateCrossChain functionLogic error$0
- LEND: Protocol rewards tokens permanently stuckLogic error$0
- LEND: Liquidators Must Supply Collateral Asset Before Redeeming Seized RewardsLogic error$0
- LEND: Cross-Chain liquidation uses collateral seize amount instead of repayment amount for debt reductionLogic error$0
- LEND: User may not be able to borrow even if they provide sufficient collateralsLogic error$0
- Pareto USP, a credit-backed synthetic dollar: theft of funds for new depositers if sUSP can not absorb entire lossesLogic error$0
- Yieldoor: Locked funds due to underflow in withdrawalLogic error$0
- Yieldoor: Liquidation fee will not be claimed due to incorrect decimal handlingLogic error$0
- Yieldoor: `Leverager::deposit`, does not support multi-hop swaps with `exactOutput`Logic error$0
- Rubicon: Rewards for initial period may be lost in `BathBuddy` contractLogic error$0
- LoopFi: Debt position interest is compounded while pool interest is simple causing inconsistency between `expectedLiquidity_` and `availableLiquidity_`Logic error$0
- LoopFi: `PositionAction.sol#onCreditFlashLoan` may end up with stuck funds for `EXACT_IN` primary swapsFlash loan attack$0
- Rubicon: Wrong calculation of repayment amount in Position contractLogic error$0
- Rubicon: When opening a position, the collateral of the previous position is used for borrowing, which makes the user more easily liquidatedLogic error$0
- NOYA: A Vault can steal all funds from another Vault through the Registry's flash loan contract due to insufficient access control in `Connector.sendTokensToTrustedAddress()`Flash loan attack$0
- Rubicon: `Position` contract allows to interact with positions that are liquidatedLogic error$0
- LoopFi: Liquidation doesn't account for penalty when calculating collateral to give, allowing users to profit by borrowing and self-liquidatingLogic error$0
- Peapods: LeverageManager removeLeverage does not support advanced self-lending pods with podded fTKN as pairedLpTKN.Logic error$0
- Peapods: `addInterest` will not update the interest acurately which would enable users to claim rewards for time that they weren't staked inside `LendingAssetVault`Logic error$0
- LoopFi: Usage of `lastEligibleStatus` can cause user to miss out on rewards on `manualStopEmissionsFor` invocationLogic error$0
- LoopFi: Bug in `claim` allows users who are disqualified to claim their previously earned emissionsLogic error$0
- Rubicon: Due to the loss of precision, `openPosition` will make the user's leverage higher than expectedInteger overflow/underflow$0
- Peapods: Open fee is overcharged in `_addLeveragePostCallback` functionLogic error$0
- LoopFi: Because of the asset: `Share 1:1 Conversion`, if vault incurs a loss, the last user to withdraw will take the entire lossLogic error$0
- LoopFi: `AuraVault::claim` reward calculation does not deduct fees from reward amount, causing DoS or extra rewards lostLogic error$0
- NOYA: In Dolomite, when opening a borrow position, the holding position in the Registry will never be updated due to the `removePosition` flag being set to trueLogic error$0
- LoopFi: Users of a vault can steal other user's rewards when one vault's `lastRewardTime` differs from another vault's `lastRewardTime`Logic error$0
- LoopFi: Emission schedule is not followed and can cause unexpected allocation of rewardsLogic error$0
- LoopFi: `PositionAction.decreaseLever()` fails to consider the loan fee in Flashlender when calculating `loanAmount`, as a result, the functionality will not work when `protocolFee != 0`Logic error$0
- Rubicon: User can possess less value than before when `V2Migrator.migrate` function is called to give up `bathTokenV1` tokens and hold `bathTokenV2` tokensLogic error$0
- Rubicon: `Position._borrowLimit` doesn't use exisiting collateral in case if user doesn't have any `_bathToken`Logic error$0
- Peapods: LeverageManager closeFee is only collected for pTKN, which can be easily bypassed.Logic error$0
- Peapods: LendingAssetVault should also call `_updateInterestAndMdInAllVaults()` in multiple functions.Logic error$0
- Peapods: Liquidations will revert incorrectly due to an out-of-sync leftover collateral valueLogic error$0
- LoopFi: Lack of slippage check while interacting with ERC4626 Vault in `PositionAction4626` could lead to users' fund lossLogic error$0
- LoopFi: `PositionAction.sol#_deposit` incorrectly checks `auxSwap.assetIn` should be equal to `collateralParams.targetToken`Logic error$0
- Rubicon: Position doesn't distribute rewards to usersLogic error$0
- Peapods: LendingAssetVault incorrectly updates vaultUtilization if CBR for a single FraxlendPair decreases.Logic error$0
- NOYA: `PrismaConnector` can mint a position below the desired health factorLogic error$0
- Peapods: `spTKNMinimalOracle.sol` counts debond fee twice, which will make the end price (spTKN per base) higher than it should beOracle manipulation$0
- Rubicon: The curve of short leverage position is not smooth and may cause users to open positions that are different from expectationsLogic error$0
- LoopFi: Invalid handling of flash loan fees in `PositionAction::onCreditFlashLoan`, forcing it to always revertFlash loan attack$0
- LoopFi: `PositionAction4626::increaseLever` will always revertLogic error$0
- LoopFi: Zero rates on new quoted tokens allow an attacker to take an interest free quotaLogic error$0
- LoopFi: Malicious borrower cycle exploits to inflate interest ratesLogic error$0
- LoopFi: `decreaseLever` uses incorrect position address when withdrawingFlash loan attack$0
- Peapods: Transaction may revert unexpectedly due to missing allowance for the lending pair assetLogic error$0
- LoopFi: `CDPVault.sol#liquidatePositionBadDebt()` doesn't correctly handle profit and lossLogic error$0
- LoopFi: In `PositionActionPendle::_onDecreaseLever`, `tokenOut` is implemented incorrectlyLogic error$0
- LoopFi: Invalid handling of risdual amount in `PositionAction::onCreditFlashLoan`, forcing it to revertFlash loan attack$0
- LoopFi: `PositionAction4626::_onDecreaseLever` wrongly updates `tokenOut` forcing user's funds to be stuck in the position action contractLogic error$0
- Rubicon: Use of `block.number` leads to incorrect interest calculationsLogic error$0
- Rubicon: Potential infinite loop in `_borrowLimit` functionLogic error$0
- LoopFi: `PositionAction20._onWithdraw` and `PositionPendle20._onWithdraw` also returns token amount in wrong scaleLogic error$0
- LoopFi: Bringing a position from unsafe to safe by liquidation partiallyLogic error$0
- Rubicon: Users might get less assets than expected upon migration due to price manipulation attacksOracle manipulation$0
- LoopFi: It is nearly impossble for Liquidators to use `liquidatePosition()` to fully pay off a non bad-debt positionLogic error$0
- Rubicon: A liquidated position possibly cannot be closedLogic error$0
- Peapods: Incorrect `minAnswer` check doesn't protect the protocol from massive price dropsOracle manipulation$0
- Rubicon: The last borrowed asset will not be collateralized and the user may be liquidated due to insufficient collateralLogic error$0
- LoopFi: `PoolAction::_balancerExit` returns wrong token out amountLogic error$0
- LoopFi: `CDPVault.sol#liquidatePositionBadDebt()` should not set profit `= 0` when calling `pool.repayCreditAccount()`Reentrancy$0
- LoopFi: Lack of Slippage Control in `AuraVault::deposit` and `AuraVault::mint` Functions Can Lead to Unexpected Financial Losses for UsersLogic error$0
- LoopFi: Rewards may be spread out among the wrong time period due to the way the protocol calculates itLogic error$0
- LoopFi: `WhenNotPaused` modifier in the CDPVault can be bypassed by usersAccess control$0
- LoopFi: Malicious borrower can evade full liquidation in `CDPVault::liquidatePosition` by repaying small amounts of debtLogic error$0
- NOYA: Numerous errors when calculating the TVL for the MorphoBlue connectorLogic error$0
- LoopFi: `CDPVault.liquidatePosition()` does not scale `takeCollateral` with `tokenScale`; therefore, it might send the wrong amount of collateral to the liquidator when `tokenScale ! = 1 ether`Logic error$0
- NOYA: SiloConnector `_getPositionTVL` miscalculate the TVL positionLogic error$0
- LoopFi: Incorrect calculation of `newCumulativeIndex` in function `calcDecrease`Logic error$0
- LoopFi: Rewards might be lost due to the error that `_updateRewardIndex()` might advance `lastBalance` without advancing index for a tokenInteger overflow/underflow$0
- NOYA: `SNXConnector.sol` TVL calculation is incorrectLogic error$0
- NOYA: Invalid handling of holding positions in `DolomiteConnector::transferBetweenAccounts`Logic error$0
- LoopFi: Wrong repayment amount used in `PositionAction::_repay`, forcing users to unexpectedly lose fundsLogic error$0
- LoopFi: `PositionAction.sol#onCreditFlashLoan` may have leftover tokens after conducting `leverParams.auxSwap`Logic error$0
- Peapods: Malicious liquidator can intentionally leave dust amount of collateral and won't trigger bad debt handlingLogic error$0
- LoopFi: `Flashlender.sol#flashLoan()` should use `mintProfit()` to mint fees, as the current implementation may lead to locked up WETH in PoolV3Logic error$0
- LoopFi: Incorrect address is used as `spender` for ERC20 permit signature verificationLogic error$0
- Peapods: The amount of shares needed for redemption of borrow tokens is underquoted during the removal of leverage process leading to reverting.Logic error$0
- NOYA: It is possible to open insolvent position in Silo connector, due to missing check in borrow functionLogic error$0
- LoopFi: `PositionActionPendle.sol#_onWithdraw` does not have slippage parameter `minOut` setLogic error$0
- Rubicon: Some positions will get liquidated immediatelyLogic error$0
- Perennial V2 Update #4: When account is liquidated (protected), liquidator can increase account's position to any value up to `2**62 - 1` breaking all market accounting and stealing all market funds.Logic error$0
- Perennial V2 Update #4: Some accounts using Intents to trade might be liquidated while healthy or be unliquidatable while being unhealthy.Logic error$0
- Perennial V2 Update #4: Anyone can steal all funds from the `market` due to incorrect health accounting for pending pnl from difference of intent price and market price when multiple intents are used.Logic error$0
- Perennial V2 Update #4: Intent orders are guaranteed to execute, but fees from these orders are not accounted in collateral, allowing user to withdraw all collateral ignoring these pending fees.Logic error$0
- Perennial V2 Update #4: `InvariantLib` uses current position for margin check allowing to withdraw collateral while the position decrease is only pending and can cause unexpected immediate user liquidation.Logic error$0
- Perennial V2 Update #4: Liquidations are temporarily blocked if user's pending position close amount is greater than the latest position size.Logic error$0
- Plaza Finance: levETH Cannot Be Bought.Logic error$0
- Plaza Finance: Low TVL and high Leverage Supply will DoS the redeem of Leverage tokensLogic error$0
- Plaza Finance: Anyone Can Get Funds From This Contract.Logic error$0
- Plaza Finance: Users can sell `BondToken` at a higher price by manipulating the `collateralLevel` from `< 120%` to `> 120%` by purchasing `LeverageToken`.Logic error$0
- Plaza Finance: Incorrect LevETH Redeem Rate Due to BondETH Market Rate and LevETH Rate Comparison, Leading to Trader LossesLogic error$0
- Plaza Finance: Protocol mechanics incorrectly assume 1 USDC will always be worth 1 USDLogic error$0
- Plaza Finance: Incorrect price representationLogic error$0
- Plaza Finance: `COLLATERAL_THRESHOLD` should be set to `125%` instead of `120%`.Logic error$0
- Autonomint Colored Dollar V1: Cross-Contract Reentrancy Vulnerability in CDS Withdraw FunctionReentrancy$0
- Autonomint Colored Dollar V1: No slippage protection when exchanging with synthethixLogic error$0
- Autonomint Colored Dollar V1: `Treasury.noOfBorrowers` can be set to 0 by looping wei deposit<->withdrawals and DoS withdrawals and reset borrower debtLogic error$0
- Autonomint Colored Dollar V1: Wrong state update in `liquidationType1` callLogic error$0
- Autonomint Colored Dollar V1: Total cds deposited amount is incorrectly modified when cds depositor is at a loss, leading to stuck USDaInteger overflow/underflow$0
- Autonomint Colored Dollar V1: The user overpays the USDA amount for downside protection while withdrawingLogic error$0
- Autonomint Colored Dollar V1: Type 1 borrower liquidation will incorrectly add cds profit directly to `totalCdsDepositedAmount`Logic error$0
- Autonomint Colored Dollar V1: After closing synthetix position we don't update global data for liquidationsLogic error$0
- Autonomint Colored Dollar V1: DOS on liquidation type 1 due to underflow in cds profits computationLogic error$0
- Autonomint Colored Dollar V1: wrong amount of `sUSD` is used to open a short position in synthetixLogic error$0
- Autonomint Colored Dollar V1: `Borrowing::redeemYields` debits `ABOND` from `msg.sender` but redeems to `user` using `ABOND.State` data from `user`Logic error$0
- Autonomint Colored Dollar V1: Reentrant call in `Treasury::withdrawFromExternalProtocol` during the `Borrowing::redeemYields` flow allows theft of `Treasury` ETHReentrancy$0
- Autonomint Colored Dollar V1: odosAssembledData can be manipulatedLogic error$0
- Autonomint Colored Dollar V1: `borrowing::withdraw()` at a loss will increase downside protected and misscalculate option feesLogic error$0
- Autonomint Colored Dollar V1: omniChainData.cdsPoolValue is not decreased/updated in the function liquidationType1,as a result cds/ borrow ratio will be bigger than expected.Logic error$0
- Autonomint Colored Dollar V1: Withdrawing ionic during liquidation has a flawLogic error$0
- Autonomint Colored Dollar V1: Lock-in period option for dCDS users is not enforced when trying to withdraw.Logic error$0
- Autonomint Colored Dollar V1: Inability to Withdraw ETH/tokens in BorrowLiquidation Contract if `closeThePositionInSynthetix` is CalledLogic error$0
- Autonomint Colored Dollar V1: excess funds will not always be refunded to borrower when they are withdrawingLogic error$0
- Autonomint Colored Dollar V1: `liquidationType2` will self DOS due to lack of ETHLogic error$0
- Autonomint Colored Dollar V1: Missing Update to `omnichain.totalAvailableLiquidationAmount` in `withdrawUser`Logic error$0
- Autonomint Colored Dollar V1: Malicious users can block admins from accessing setter functionsAccess control$0
- Autonomint Colored Dollar V1: Borrower withdrawing at a loss will cause losses for cds depositors that only withdraw after the price recoversLogic error$0
- Autonomint Colored Dollar V1: `totalCdsDepositedAmountWithOptionFees` is incorrectly reduced in `CDSLib::withdrawUser()`, leading to stuck option feesLogic error$0
- Autonomint Colored Dollar V1: Logical Error in Timestamp Condition for Option Renewal `BorrowLib.getOptionFeesToPay()`Logic error$0
- Autonomint Colored Dollar V1: Missing cds deposit amount in swapCollateralForUSDTLogic error$0
- Autonomint Colored Dollar V1: Health ratio is hardcoded causing issues once the LTV is updatedLogic error$0
- Autonomint Colored Dollar V1: when the liquidate function(function liquidationType1) is called vaultvalue(liquidated collateral value) is not decreased from omniChainData.vaultValue. As a result, the cds/borrow ratio will always be less than the real cds/borrow ratio.Logic error$0
- Autonomint Colored Dollar V1: Borrowers can choose any volatility in order to pay less feesLogic error$0
- Autonomint Colored Dollar V1: Protected downside is not updated when `cds.getTotalCdsDepositedAmount() < downsideProtected`Logic error$0
- Autonomint Colored Dollar V1: Cds amounts to reduce from each chain are incorrect and will lead to the inability to withdraw cds in one of the chainsLogic error$0
- Autonomint Colored Dollar V1: `borrowing::liquidate()` sends the wrong liquidation index to the destination chain, overwritting liquidation information and getting collateral stuckLogic error$0
- Autonomint Colored Dollar V1: Liquidation will reduce total cds deposited amount, leading to incorrect option feesLogic error$0
- Autonomint Colored Dollar V1: Inconsistent Use of `lastCumulativeRate` in `depositTokens()` and `withdraw()` Functions in `Borrowings` ContractLogic error$0
- Autonomint Colored Dollar V1: Users can withdraw liquidated collateralLogic error$0
- Autonomint Colored Dollar V1: `ABONDToken::transferFrom` does not work as intended and allows theft of ETH funds from `Treasury`Logic error$0
- Autonomint Colored Dollar V1: DOS to `liquidateBorrowPosition` on MODE chainLogic error$0
- MachFi: Missing staleness check in PythOracle can lead to forced liquidations and theft of funds from borrowers.Logic error$0
- Teller Lender Groups Update Audit: ERC20.approve Used Instead of Safe Approvals, Causing Pool Failures with Some ERC20sReentrancy$0
- Teller Lender Groups Update Audit: Lender group members can be prevented from burning their shares foreverLogic error$0
- Teller Lender Groups Update Audit: Not updating state before making custom external call can cause borrower's to loose assets due to re-entrancyReentrancy$0
- Kakarot: `ExponentiationImpl::pow()` returns `0` for `0^0`Logic error$0
- Teller Lender Groups Update Audit: Users can lower the interest rate by dividing a loan into multiple smaller loansLogic error$0
- Teller Lender Groups Update Audit: Repayer can brick lending functionality of `LenderCommitmentGroup_Smart` by repaying excessInteger overflow/underflow$0
- Debita Finance V3: A borrower may pay more interest that he has specified, if orders are matched by a malicious actorLogic error$0
- Debita Finance V3: Precision loss leads to locked incentives in `DebitaIncentives::claimIncentives()`Integer overflow/underflow$0
- Debita Finance V3: Borrower can obtain principle tokens without paying collateral tokensLogic error$0
- Debita Finance V3: Lend offer can be deleted multiple timesLogic error$0
- Debita Finance V3: MixOracle is broken due to hardcoded positionLogic error$0
- Debita Finance V3: Borrowers can not extend loans which has maximum duration less than 24 hoursInteger overflow/underflow$0
- Debita Finance V3: Nobody can buy the `TaxTokenReceipt` NFT from auctionLogic error$0
- Debita Finance V3: DebitaIncentives::updateFunds will exit prematurely and not update whitelisted pairs causing loss of funds to lenders and borrowersLogic error$0
- Debita Finance V3: An attacker can steal the entire borrow and lending incentive of an epoch with FLASHLOAN in a single transactionFlash loan attack$0
- Debita Finance V3: No one can sell `TaxTokensReceipts` NFT receipt to the buy orderLogic error$0
- Debita Finance V3: Lenders and borrowers can not claim liquidation token after NFT collateral auction soldLogic error$0
- Debita Finance V3: Incentive Creator's Tokens Permanently Locked in Zero-Activity EpochsLogic error$0
- Debita Finance V3: Attacker will prevent lenders from canceling lend orders and block non-perpetual lend orders matching.Logic error$0
- Debita Finance V3: Loan Extension Fails Due to Unused Time CalculationLogic error$0
- Debita Finance V3: Incorrect calculation of extended loan days leads to unfair borrower feesLogic error$0
- Debita Finance V3: Interest paid for non perpetual loan during loan extension is lost when the borrower repays debtLogic error$0
- Debita Finance V3: The precision loss in the fee percentage for connecting offers results in the borrower paying less than the expected fee.Integer overflow/underflow$0
- Debita Finance V3: Auctioned `taxTokensReceipt` NFT Blocks Last Claimant Due to Insufficient FundsLogic error$0
- Debita Finance V3: Lender may loose part of the interest he has accrued if he makes his lend offer perpetual after a loan has been extended by the borrowerLogic error$0
- The Wildcat Protocol: Inconsistency across multiple repaying functions causing lender to pay extra feesReentrancy$0
- The Wildcat Protocol: User could withdraw more than supposed to, forcing last user withdraw to failInteger overflow/underflow$0
- The Wildcat Protocol: `FixedTermLoanHook` looks at `block.timestamp` instead of `expiry`Logic error$0
- The Wildcat Protocol: Role providers cannot be EOAs as stated in the documentationLogic 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: No lender is able to exit even after the market is closedLogic error$0
- Index x Morpho Leverage Integration: _calculateMaxBorrowCollateral calculates repay incorrectly and can lead to set token liquidationLogic error$0
- Superposition: `get_fee_growth_inside` in `tick.rs` should allow for `underflow`/`overflow` but doesn'tInteger overflow/underflow$0
- SYMMIO v0.8.4 Update: Inconsistent in the liquidation fee leads to unfairness in liquidation processLogic error$0
- SYMMIO v0.8.4 Update: Force Close can be DOSed by exploiting `settleUpnl` functionLogic error$0
- SYMMIO v0.8.4 Update: Emergency close might be blocked due to insufficient allocated balanceLogic error$0
- predict.fun lending market: Refinancing and auction take less fee than expected.Logic error$0
- predict.fun lending market: A borrower can not repay to a USDC blacklisted lenderLogic error$0
- predict.fun lending market: Using wrong format of `questionId` for `NegRiskCtfAdapter` leads to loan operations on resolved multi-outcome marketsLogic error$0
- predict.fun lending market: Collateral can already be seized even when negRiskMarket is not fully resolvedLogic error$0
- predict.fun lending market: hashProposal uses wrong typeshash when hashing the encoded Proposal struct dataLogic error$0
- Reserve: The `tradeEnd` in `BackingManager` isn't updating correctlyReentrancy$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
- Size: Credit can be sold forcibly as `forSale` setting can be ignored via CompensateLogic error$0
- Size: Size uses wrong source to query available liquidity on Aave, resulting in borrow and lend operations being bricked upon mainnet deploymentLogic error$0
- Size: Fragmentation fee is not taken if user compensates with newly created positionLogic error$0
- Size: The collateral remainder cap is incorrectly calculated during liquidationLogic error$0
- Size: Sandwich attack on loan fulfillment will temporarily prevent users from accessing their borrowed fundsFront-running / MEV$0
- Size: Borrower is not able to compensate his lenders if he is underwaterLogic error$0
- Size: Neither `sellCreditMarket()` nor `compensate()` checks whether the credit position to be sold is allowed for saleLogic error$0
- Size: Risk of overpayment due to race condition between `repay` and `liquidateWithReplacement` transactionsLogic error$0
- Size: `withdraw()` users may can't withdraw `underlyingBorrowToken` properlyLogic error$0
- Size: Multicall does not work as intendedLogic error$0
- Size: Users won't liquidate positions because the logic used to calculate the liquidator's profit is incorrectLogic error$0
- Size: `executeBuyCreditMarket` returns the wrong amount of cash and overestimates the amount that needs to be checked in the variable poolLogic error$0
- Size: Users may incur an unexpected fragmentation fee in the `compensate()` callFront-running / MEV$0
- Size: When `sellCreditMarket()` is called to sell credit for a specific cash amount, the protocol might receive a lower swapping fee than expectedLogic error$0
- Flayer: A user loses funds when he modifies only price of listings.Logic error$0
- Flayer: `reserve()` doesn't deletes the `_isLiquidation` mapping, causing tax loss for owner in futureLogic error$0
- Flayer: User can pay less protected listing fees.Logic error$0
- Flayer: The health of a ```ProtectedListing``` is incorrectly calculated if the ```tokenTaken``` has be changed through ```ProtectedListings::adjustPosition()```.Logic error$0
- Flayer: Reserving a listing checkpoints the collection's `compoundFactor` at an intermediary higher compound factorLogic error$0
- Flayer: The `relist` function does not check whether the listing is a liquidation listing causing users to pay taxes and refunds being paid to the listing owner who did not pay taxesLogic error$0
- Flayer: User can unlock protected listing without paying any fee.Logic error$0
- Flayer: Protected listings checkpoints are not always updated when the total supply changesLogic error$0
- Flayer: `_listing` mapping not deleted when calling `Listings::reserve` can lead to a token being sold when it shouldn't be for saleLogic error$0
- Perennial V2 Update #3: Market coordinator can liquidate all users in the marketLogic error$0
- Perennial V2 Update #3: _ineligible() redemptionEligible is miscalculatedLogic error$0
- Perennial V2 Update #3: Market coordinator can steal all market collateral by abusing very low value of `scale`Logic error$0
- Perennial V2 Update #3: The `RiskParameter.liquidationFee` variable is not treated and validated as a percentage value, leading to breaking protocol invariants.Logic error$0
- Perennial V2 Update #3: `MultiInvoker`, `Manager` and `Account` unexpected reverts in certain conditions due to AAVE reverting on deposits and withdrawals with 0 amountLogic error$0
- Perennial V2 Update #3: when ReserveBase undercollateralized , Manager.orders will not be able to executeLogic error$0
- Perennial V2 Update #3: Market coordinator can set `staleAfter` to a huge value allowing anyone to steal all market collateral when there are no transactions for some timeLogic error$0
- Perennial V2 Update #3: Maliciously specifying a very large intent.price will result in a large gain at settlement, stealing fundsLogic error$0
- Perennial V2 Update #3: `MultiInvoker` and `Manager` orders execution can be DOS in key moments if AAVE/Compound utilization is at 100%Logic error$0
- Perennial V2 Update #3: `Controller`'s core function of Rebalance will not rebalance when rebalance is needed in some cases, breaking core functionalityLogic error$0
- Perennial V2 Update #3: Market coordinator can steal all market collateral by changing adiabatic feesLogic error$0
- Perennial V2 Update #3: Lack of access control in the `MarketFactory.updateExtension()` function.Access control$0
- ZeroLend One: Using the same heartbeat for multiple price feeds, causing DOSLogic error$0
- ZeroLend One: CuratedVaults are prone to inflation attacks due to not utilising virtual sharesAccess control$0
- ZeroLend One: A Reserve Borrow Rate can be significantly decreased after liquidationLogic error$0
- ZeroLend One: An attacker can hijack the `CuratedVault`'s matured yieldLogic error$0
- ZeroLend One: Inconsistent Application of Reserve Factor Changes Leads to Protocol Insolvency RiskLogic error$0
- ZeroLend One: Full Liquidation Won't Sweep the Whole Debts With Leaving Some, And Will Wrongly Set Borrowing as FalseLogic error$0
- ZeroLend One: The rewards distribution in the NFTPositionManager is unfairLogic error$0
- ZeroLend One: Function `executeMintToTreasury` will incorrectly reduce the `supplyShares`, therefore prevent the last users from withdrawingLogic error$0
- ZeroLend One: Interest rate is updated before updating the debt when repaying debtLogic error$0
- ZeroLend One: `CuratedVaultSetters::_supplyPool()` does not consider the pool cap of the underlying pool, which may cause `deposit()` to revert or lead to an unintended reordering of `supplyQueue`Logic error$0
- ZeroLend One: The repayment process in the NFTPositionManager can sometimes be revertedLogic error$0
- ZeroLend One: Malicious actors can execute sandwich attacks during market addition with existing fundsFront-running / MEV$0
- ZeroLend One: Liquidated positions will still accrue rewards after being liquidatedLogic error$0
- ZeroLend One: NFTPositionManager's `repay()` and `repayETH()` are unavailable unless preceded atomically by an accounting updating operationLogic error$0
- Cork Protocol: FlashSwapRouter::emptyReserve() and FlashSwapROuter::emptyReservePartial() functions return incorrect valuesLogic error$0
- ZeroLend One: `GenericLogic.sol` contract assumes all price feeds has the same decimals but is a wrong assumption that leads to an incorrect health factor math.Oracle manipulation$0
- ZeroLend One: Liquidation can be DOSed due to lack of liquidity on collateral asset reserveLogic error$0
- ZeroLend One: Unclaimable reserve assets will accrue in a pool due to the difference between interest paid on borrows and interest earned on suppliesLogic error$0
- ZeroLend One: After a User withdraws The interest Rate is not updated accordingly leading to the next user using an inflated index during next deposit before the rate is normalized againLogic error$0
- ZeroLend One: Malicious pool deployer can set a malicious interest rate contract to lock funds of vault depositorsLogic error$0
- Cork Protocol: Admin new issuance or user calling `Vault::redeemExpiredLv()` after `Psm::redeemWithCt()` will lead to stuck funds when trying to withdrawLogic error$0
- ZeroLend One: Wrong calculation of supply/debt balance of a position, disrupting core system functionalitiesLogic error$0
- ZeroLend One: Position Risk Management Functionality Missing in Position Manager and dos in certain conditionsLogic error$0
- ZeroLend One: Curated Vault allocators cannot `reallocate()` a pool to zero due to attempting to withdraw 0 tokens from the underlying poolLogic error$0
- Cork Protocol: Withdrawing all `lv` before expiry will lead to lost funds in the VaultLogic error$0
- Cork Protocol: `VaultPoolLib::reserve()` will store the `Pa` not attributed to user withdrawals incorrectly and leave in untracked once it expires againLogic error$0
- ZeroLend One: `LiquidationLogic@_burnCollateralTokens` does not account for liquidation fees when withdrawing collateral during liquidation leading to incorrect accounting and Pools insolvencyLogic error$0
- ZeroLend One: Supply interest is earned on `accruedToTreasuryShares` resulting in higher than expected treasury fees and under rare circumstances DOSed pool withdrawalsLogic error$0
- Velar Artha PerpDEX: Fee Precision Loss Disrupts Liquidations and Causes Loss of FundsInteger overflow/underflow$0
- Velar Artha PerpDEX: LPs cannot specify min amount received in burn function, causing loss of fund for themLogic error$0
- Velar Artha PerpDEX: User could have impossible to close position if funding fees grow too big.Logic error$0
- Velar Artha PerpDEX: Funding fee will be zero because of precision lossLogic error$0
- BendDAO: Incorrect accounting of utilization, supply/borrow rates due to vulnerable implementation in `IsolateLogic::executeIsolateLiquidate`Logic error$0
- BendDAO: It's impossible to retrieve collected fines from the yield staking contractLogic error$0
- BendDAO: Protocol should update interest rate after changing rate model in the configurator moduleLogic error$0
- BendDAO: Major insolvency risk in `LiquidationLogic::executeCrossLiquidateERC721()` due to not setting a maximum liquidation priceOracle manipulation$0
- BendDAO: Bad debt is never handled which places insolvency risks on BendDAOGovernance attack$0
- BendDAO: `isolateRepay()` lack of check `onBehalf == nftOwner`Integer overflow/underflow$0
- BendDAO: `wrapNativeTokenInWallet()` always reverts on ArbitrumLogic error$0
- BendDAO: `isolateRedeem()` revert in case Revert-on-zero-value-transfers tokensOracle manipulation$0
- BendDAO: Borrower can prevent yield position repayment and closure by the botLogic error$0
- BendDAO: Mismatch between yield amount deposited in shares calculation and `getAccountYieldBalance()`Integer overflow/underflow$0
- BendDAO: Updating fee factor may create issues for the protocolLogic error$0
- BendDAO: Users cannot unstake from YiedlETHStakingEtherfi.sol, because YieldAccount.sol is incompatible with ether.fi's WithdrawRequestNFT.solLogic error$0
- BendDAO: Incorrect `unwrapNativeTokenInWallet` receiver addressReentrancy$0
- BendDAO: Updating asset collateral params can lead to liquidate borrowers arbitrarilyOracle manipulation$0
- BendDAO: `executeYieldBorrowERC20()` checking `yieldCap` is wrongLogic error$0
- BendDAO: Revert due to underflow error, leading to lock of the liquidated NFTInteger overflow/underflow$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: Anyone can get the NFT collateral token after an Auction without bidding due to missing check on `msg.sender`Access control$0
- BendDAO: Risk of mass liquidation after pool/asset pause and unpause, due to borrow interest compounding implementationLogic error$0
- BendDAO: `erc721DecreaseIsolateSupplyOnLiquidate()` missing clear `lockerAddr`Logic error$0
- BendDAO: User are forced to borrow again in order to unlock their NFTs from `IsolateLending.sol`Logic error$0
- BendDAO: No check if Arbitrum/Optimism L2 sequencer is down in Chainlink feeds `PriceOracle.sol`Oracle manipulation$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
- Midas - Instant Minter/Redeemer: RedemptionVaultWIthBUIDL does not redeem full balance if BUIDL balance is less than 250k post transaction.Logic error$0
- Sentiment V2: RedStone oracle is vulnerable because ```updatePrice``` is not called during the ```getEthValue``` function.Oracle manipulation$0
- Sentiment V2: Lack of slippage protection during withdrawal in SuperPool and Pool contracts.Logic error$0
- Sentiment V2: Liquidation fee is incorrectly calculated, leading to unprofitable liquidationsLogic error$0
- Sentiment V2: None of the functions in SuperPool checks pause stateLogic error$0
- Sentiment V2: Not removing a token from the position assets upon an owner removing a token from the known assets will cause huge issuesLogic error$0
- Sentiment V2: Protocol's interestFees + Interest in a pool can be lost because of precision loss when using low-decimal assets like USDT/USDC.Logic error$0
- Sentiment V2: User's can seize more assets during liquidation by using type(uint).maxLogic error$0
- Sentiment V2: `ChainlinkOracle` doesn't validate for minAnswer/maxAnswerOracle manipulation$0
- Sentiment V2: Base pools can get bricked if depositors pull outLogic error$0
- Sentiment V2: Super Pool shares can be inflated by bad debt leading to overflowsLogic error$0
- Sentiment V2: Under certain circumstances bad debt will cause first depositor to lose fundsLogic error$0
- Sentiment V2: Liquidations will revert if a position has been blacklisted for USDCLogic error$0
- Sentiment V2: Red Stone Oracle Can Time TravelOracle manipulation$0
- Sentiment V2: `SuperPool` fails to correctly deposit into poolsLogic error$0
- Sentiment V2: Liquidators may repay a position's debt to pools that are within their risk tolerance, breaking the concept of isolated risk in base poolsLogic error$0
- Sentiment V2: Exploiter can force user into unhealthy condition and liquidate himLogic error$0
- Sentiment V2: rounding error due to internal accounting and can steal some portion of the first depositors fundsInteger overflow/underflow$0
- Sentiment V2: LTV of 98% would be extremely dangerousLogic error$0
- Sentiment V2: Attacker Can Manipulate Interest Distribution by Exploiting Asset Transfers and Fee Accrual MechanismLogic error$0
- Sentiment V2: Super pool uses `ERC20.approve` instead of safe approvals, causing it to always revert on some ERC20sLogic error$0
- Canto: `Govshuttle` module does not register its transaction `MsgServer`Logic error$0
- BadgerDAO: Staking ETH incorrectly assumes revert bubblingFlash loan attack$0
- BadgerDAO: Incorrect comparison logic in post-operation checksLogic error$0
- DittoETH: An attacker can mint free DUSD and liquidate the corresponding Short Record to earn liquidation rewardsLogic error$0
- DittoETH: `DUSD` assets can be minted with less `ETH` collateral than requiredLogic error$0
- Gondi: Bidders might lose funds due to possible racing condition between `settleWithBuyout` and `placeBid`Logic error$0
- Gondi: `confirmUnderwriter()` need to recalculate `getMinTimeBetweenWithdrawalQueues`Logic error$0
- Gondi: Incorrect accounting of `_pendingWithdrawal` in `queueClaiming` flowLogic error$0
- Gondi: Borrower signature could be reused in `emitLoan()`Reentrancy$0
- Exactly Protocol Update - Staking Contract: Some bad debt will not be cleared when it should which will cause accrual of bad debt decreasing the protocol's solvencyLogic error$0
- Gondi: `loanLiquidation()` calculation of interest is not accurateLogic error$0
- Gondi: Function `refinanceFromLoanExecutionData()` does not check `executionData.tokenId == loan.nftCollateralTokenId`Logic error$0
- Exactly Protocol Update - Staking Contract: Liquidator will leave a pool with unassigned earnings on `Market::clearBadDebt()` free to claim for anyone when the repaid maturity is not the lastLogic error$0
- Gondi: Division before multiplication could lead to users losing 50% in `WithdrawalQueue`Integer overflow/underflow$0
- Gondi: Incorrect circular array check in `_updatePendingWithdrawalWithQueue` flow, causing received funds to be added to the wrong queuesLogic error$0
- Gondi: Any liquidators can pretend to be a loan contract to validate offers, due to insufficient validationAccess control$0
- Exactly Protocol Update - Staking Contract: Market utilization ratio near 100% will DoS deposits as harvest tries to withdraw and revertsLogic error$0
- Exactly Protocol Update - Staking Contract: Frozen/paused Market that is harvested from in StakedEXA will DoS deposits leading to loss of yieldLogic error$0
- Gondi: `refinanceFull`/`addNewTranche` reusing a lender's signature leads to unintended behaviorSignature replay$0
- Gondi: `mergeTranches()`/`refinancePartial()` lack of `nonReentrant`Reentrancy$0
- Gondi: Hardcoded incorrect `getLidoData` timestamp, resulting in incorrect base point `Apr. Loans` can be validated with a substantially low `baseRate` interestLogic error$0
- Gondi: A malicious user can take on a loan using an existing borrower's collateral in `refinanceFromLoanExecutionData()`Access control$0
- Gondi: Function `addNewTranche()` should use `protocolFee` from `Loan` structLogic error$0
- Gondi: Function `settleWithBuyout()` does not call `LoanManager.loanLiquidation()` during a buyoutLogic error$0
- Gondi: `validateOffer()` reentry to manipulate `exchangeRate`Reentrancy$0
- Gondi: Anyone can remove existing term without queueing through `setTerms()`Access control$0
- Gondi: Function `Pool.validateOffer()` does not work correctly in case `principalAmount > currentBalance`Logic error$0
- Gondi: Attacker can front-run and pass in empty terms, making it impossible to `confirmTerms()`Logic error$0
- Gondi: `_baseLoanChecks()` check errors for expireLogic error$0
- Gondi: Collected fees are never transferred out of Pool contractLogic error$0
- Gondi: `AuctionLoanLiquidator#placeBid` can be DoSLogic error$0
- Gondi: `loan.hash()` does not contain `protocolFee`Logic error$0
- Gondi: Function `distribute()` lacks access control allowing anyone to spam and disrupt the pool's accountingAccess control$0
- Gondi: `distribute()` uses the wrong end time to break `maxSeniorRepayment`'s expectationsLogic error$0
- Gondi: `distribute()` when can't repay all lenders, may lack of notification to `LoanManager` for accountingLogic error$0
- Gondi: The attackers front-running `repayloans` so that the debt cannot be repaidLogic error$0
- Gondi: Inconsistent accounting of `undeployedAssets` might result in undesired optimal range in the poolLogic error$0
- Gondi: `confirmBaseInterestAllocator()` change `BaseInterestAllocator` may pay large `getReallocationBonus`Logic error$0
- Gondi: Incorrect protocol fee implementation results in `outstandingValues` to be mis-accounted in Pool.solLogic error$0
- Gondi: `triggerFee` is stolen from other auctions during `settleWithBuyout()`Logic error$0
- Gondi: Merging tranches could make `_loanTermination()` accounting incorrectLogic error$0
- Gondi: `addNewTranche()` no authorization from borrowerAccess control$0
- Predy: Chainlink's `latestRoundData` might return stale or incorrect resultsOracle manipulation$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
- Predy: Liquidation incorrectly tries to transfer token from Market instead of liquidator if `remainingMargin` is negativeLogic error$0
- Predy: PriceFeed does not return to the correct price for quote pairsOracle manipulation$0
- Predy: Reallocation depends on the `slot0` price, which can be manipulatedReentrancy$0
- Predy: Possible DoS When calling `GammaTradeMarket::_removePosition` will cause user position to not be able to get liquidatedLogic error$0
- Predy: Liquidators can bypass remaining negative margin check and leave the loss to the protocolOracle manipulation$0
- Predy: Liquidity manipulation is possible when tradingOracle manipulation$0
- Union Finance Update #2: Minimum borrow amount can be surpassed and borrower can be treated as being overdue earlier than their actual overdue timeLogic error$0
- Union Finance Update #2: Possible loss of funds, transfer functions can silently failReentrancy$0
- Union Finance Update #2: Any user can claim an unlimited amount of vouch in `VouchFaucet.sol`Logic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: _claimRewardToken() will update accountRewardDebt even when there is a failure during reward claiming, as a result, a user might lose rewards.Logic error$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: Lido withdraw limitation will brick the withdraw process in an edge caseLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Protocol could be DOS by transfer error due to lack of code length checkLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Wrong decimal precision resulted in the price being inflatedLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Loss of rewards due to continuous griefing attacks on L2 environmentLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: The withdrawValue calculation in _calculateValueOfWithdrawRequest is incorrect.Logic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: After a liquidator liquidates someone else’s position, it could cause a Denial of Service (DoS) when their own position also needs to be liquidated.Logic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Incorrect valuation of vault shareOracle manipulation$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Lack of slippage control on `_redeemPT` functionFront-running / MEV$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: `_splitWithdrawRequest` will make invalid withdraw requests in an edge caseLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Malicious users can steal reward tokens via re-entrancy attackReentrancy$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: Premature collateralization check in the BaseStakingVault.initiateWithdraw() function can leave accounts undercollateralizedLogic error$0
- Notional Leveraged Vaults: Pendle PT and Vault Incentives: `Kelp:_finalizeCooldown` cannot claim the withdrawal if adversary would requestWithdrawals with dust amount for the holderLogic error$0
- Mellow Modular LRTs: User may not receive profit from withdrawal fee as expected and attacker can steal value from poolLogic error$0
- DittoETH: Flawed if check causes inaccurate tracking of the protocol's `ercDebt` and collateralLogic error$0
- DittoETH: `ShortOrders` can be created with `ercAmount == minAskEth/2`, increasing the gas costs for matching large orders and disincentivizing liquidators from liquidating themLogic error$0
- DittoETH: Users can mint DUSD with less collateral than required, which gives them free DUSD and may open a liquidatable positionLogic error$0
- DittoETH: Valid redemption proposals can be disputed when bad debt occurs by applying it to a SR outside of the proposalLogic error$0
- DittoETH: An attacker can cancel other people's short ordersLogic error$0
- DittoETH: If a redemption has `N` disputable shorts, it is possible to dispute `N-1` times the redemption to maximize the penaltyLogic error$0
- DittoETH: `transferShortRecord`: Can transfer a newly created `ShortRecord` using a previously minted NFTAccess control$0
- DittoETH: The `colRedeemed` variable is wrongly retrieved in `LibBytes::readProposalData` functionLogic error$0
- DittoETH: Can manipulate the `C.SHORT_STARTING_ID` `ShortRecord` of the `TAPP`Logic error$0
- DittoETH: Closing a SR during a wrong redemption proposal leads to loss of fundsLogic error$0
- DittoETH: Valid redemption proposals can be disputed by decreasing collateralLogic error$0
- DittoETH: Partially filled Short Records created without a short order cannot be liquidated and exitedLogic error$0
- Aleo: Aleo prover/network DOS vector due to invalid `split` proofs being free to abuseLogic error$0
- BakerFi: All supplied WETH to Aave as a deposit by a Strategy will be irrecoverableLogic error$0
- Panoptic: Wrong leg `chunkKey` calculation in `haircutPremia` functionLogic error$0
- BakerFi: `ETHOracle.getLatestPrice` needs to convert to 18 decimalsOracle manipulation$0
- Panoptic: `CREATE2` address collision during pool deployment allows for complete draining of the poolLogic error$0
- BakerFi: Rounding-down of `flashFee` can result in calls to flash loan to revertReentrancy$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
- BakerFi: Vault is vulnerable to first depositor inflation attackFlash loan attack$0
- BakerFi: Vault can be DoSLogic error$0
- Panoptic: `_validatePositionList()` does not check for duplicate tokenIds, allowing attackers to bypass solvency checksOracle manipulation$0
- Panoptic: Panoptic pool can be non-profitable by specific Uniswap governanceLogic error$0
- Panoptic: `SettleLongPremium` is incorrectly implemented: premium should be deducted instead of addedLogic error$0
- BakerFi: `StrategyLeverage.harvest` doesn't account flashloan feeFlash loan attack$0
- Panoptic: `_updateSettlementPostBurn()` may not correctly reduce `s_grossPremiumLast[chunkKey]`Logic error$0
- BakerFi: `BalancerFlashLender#receiveFlashLoan` does not validate the `originalCallData`Flash loan attack$0
- BakerFi: Min and maxAnswer never checked for oracle price feedOracle manipulation$0
- Panoptic: Overflow in `CollateralTracker` allows minting shares for freeInteger overflow/underflow$0
- SYMMIO v0.83 Update: PartyA's allocated balance could increase after `deferredLiquidatePartyA` is executedLogic error$0
- SYMMIO v0.83 Update: Deferred Liquidation can get stuck at step one of the liquidation process if the nonce incrementLogic error$0
- SYMMIO v0.83 Update: Collateral can still be allocated to PartyA when the system is paused by exploiting the new internal transfer functionLogic error$0
- Elfi: Closing partial positions miscounts the settled feesLogic error$0
- Elfi: Incorrect settleFee process for cross-margin accountLogic error$0
- Elfi: When a position is closed, the execution fees for the canceled stop orders are lost for the userLogic error$0
- Elfi: Lack of execution fee mechanism in AccountFacetLogic error$0
- Elfi: `updateAllPositionFromBalanceMargin` function mistakenly increments positions "fromBalance"Logic error$0
- Elfi: If the stake token is minted from portfolio vault, positions from balances are not decreasedLogic error$0
- Elfi: Long orders always pays lesser in fees while short orders always pays higher due to oracle pricingLogic error$0
- Elfi: Increasing leverage can make the position have "0" `initialMargin`Logic error$0
- Elfi: Submitting mint request using user's trading balance and cancelling it will not refund tokens back to trading accountLogic error$0
- Elfi: Canceling a mint stake token can result in the execution fee being sent from the wrong vaultLogic error$0
- Elfi: Traders may decrease the loss via decrease the position's marginLogic error$0
- Elfi: User Collateral Cap Check IssueLogic error$0
- Elfi: redeem stake token may be Dos because there is not enough balance in stake pool.Logic error$0
- Elfi: Keepers can open positions that are already liquidatableLogic error$0
- Elfi: Pool value does not consider the open funding feesLogic error$0
- Elfi: Users profit in short cross will leave the fees in UsdPool instead of LpPoolLogic error$0
- Elfi: Future upgrades may be difficult or impossibleLogic error$0
- Elfi: `updatePositionFromBalanceMargin` function returns "0" if amount to be updated is negativeLogic error$0
- Elfi: Mismatching funding fees can result in the protocol incurring a deficit or insolvency riskLogic error$0
- Elfi: If cross positions use the same margin token as collateral and close without liability, then fee accounting will be completely wrongLogic error$0
- Elfi: In Cross Margin mode, the user’s profit calculation is incorrect.Logic error$0
- Elfi: Users can have positions with a margin lower than the allowed minimum marginLogic error$0
- Elfi: Cross positions that exceed the allowed margin can be openedLogic error$0
- Elfi: Contract will reach a point where users will not be able to call `deposit`Logic error$0
- Elfi: Excess fromBalance removal not added to other positions fromBalance's when leveraging upLogic error$0
- Elfi: LpPool's can become insolvent if shorters are in huge profitsLogic 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: `VaultManagerV2.sol::burnDyad` function is missing an `isDNftOwner` modifier, allowing a user to burn another user's minted DYADLogic error$0
- DYAD: Design flaw and mismanagement in vault licensing leads to double counting in collateral ratios and positions collateralized entirely with kerosineOracle manipulation$0
- Inverter Network: wrong `defaultCurrency` can be set in the `OptimisticOracleIntegrator` causing the `defaultBond` to be zeroLogic error$0
- DYAD: Incorrect deployment/missing contract will break functionalityLogic error$0
- DYAD: Kerosene collateral is not being moved on liquidation, exposing liquidators to lossOracle 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: Liquidating positions with bounded Kerosen could be unprofitable for liquidatorsLogic error$0
- DYAD: Inability to perform partial liquidations allows huge positions to accrue bad debt in the systemFlash loan attack$0
- DYAD: No incentive to liquidate small positions could result in protocol going underwaterLogic error$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: Users can get their Kerosene stuck until TVL becomes greater than Dyad's supplyLogic error$0
- DYAD: Liquidation bonus logic is wrongOracle manipulation$0
- DYAD: Attacker can frontrun to prevent vaults from being removed from the dNFT owner's positionFront-running / MEV$0
- DYAD: Flash loan protection mechanism can be bypassed via self-liquidationsLogic error$0
- DYAD: User can get their Kerosene stuck because of an invalid check on withdrawOracle manipulation$0
- DYAD: Value of kerosene can be manipulated to force liquidate usersOracle manipulation$0
- Inverter Network: LM_PC_Staking_v1&LM_PC_KPIRewarder - User can brick both contracts if he is first stakerLogic error$0
- Renzo: Pending withdrawals prevent safe removal of collateral assetsLogic error$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
- Renzo: stETH/ETH feed being used opens up to 2 way `deposit<->withdrawal` arbitrageOracle manipulation$0
- Renzo: Deposits will always revert if the amount being deposited is less than the `bufferToFill` valueReentrancy$0
- Renzo: Withdrawals of rebasing tokens can lead to insolvency and unfair distribution of protocol reservesOracle manipulation$0
- Renzo: Withdrawals logic allows MEV exploits of TVL changes and zero-slippage zero-fee swapsReentrancy$0
- PoolTogether: The Prize Layer for DeFi: Price formula in `TpdaLiquidationPair._computePrice()` does not account for a jump in liquidatable balanceLogic error$0
- PoolTogether: The Prize Layer for DeFi: DoSed liquidations as `PrizeVault::liquidatableBalanceOf()` does not take into account the `mintLimit` when the token out is the assetLogic error$0
- PoolTogether: The Prize Layer for DeFi: `maxRedeem` doesn't comply with ERC-4626Logic error$0
- PoolTogether: The Prize Layer for DeFi: `TpdaLiquidationPair.swapExactAmountOut()` can be DOSed by a vault's mint limitLogic error$0
- Tapioca Lending Engine : BBLiquidation::_updateBorrowAndCollateralShare Liquidator can avoid having his bonus reduced when position is close to bad-debtLogic error$0
- Lavarage: A borrower can borrow SOL without backing it by a collateralOracle manipulation$0
- Lavarage: Small loans will never be liquidated, generating bad debt for lendersLogic error$0
- Lavarage: Borrowers can avoid the payment of an interest share fee by setting themselves as a `fee_receipient`Logic error$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: Lack of freeze authority check for collateral tokens on create trading poolAccess control$0
- Lavarage: Malicious borrowers will never repay loans with high interestLogic error$0
- Beefy Cowcentrated Liquidity Manager: Accounting will be broken if `output` token is one of the `lpTokens`Logic error$0
- Tapioca DAO: `depositRepayAndRemoveCollateralFromMarket` function of MagnetarAssetModule can't be used on behalf of userLogic error$0
- Tapioca DAO: Incorrect math means `data.removeAndRepayData.removeAssetFromSGL` will never work once SGL has accrued interestLogic error$0
- Tapioca DAO: `burst()` does not return eth when action failsLogic error$0
- Tapioca DAO: `_vested()` claimable amount calculation errorLogic error$0
- Tapioca DAO: Magnetar's `mintBBLendSGLLockTOLP` reverts when `lock` is set to falseLogic error$0
- Tapioca DAO: `_lockOnTOB` function of MagnetarMintCommonModule will not work due to the missing approved asset for YieldBox before depositingLogic error$0
- Tapioca DAO: Incorrect approval mechanism breaks all Magnetar functionalityLogic error$0
- Tapioca DAO: After `unregisterSingularity()`, position has not been unlocked and will be locked in the contractLogic error$0
- Tapioca DAO: Missing check on helper contract allows arbitrary actions and theft of assetsAccess control$0
- Tapioca DAO: `IMarket.execute.selector`, `_checkSender` bypass allows to execute arbitrary operationsAccess control$0
- Tapioca DAO: Rescue request timestamp not reset in `TapiocaOptionLiquidityProvision.sol` contractLogic error$0
- Revert Lend: `V3Oracle` susceptible to price manipulationOracle manipulation$0
- Revert Lend: Risk of reentrancy `onERC721Received` function to manipulate collateral token configs sharesReentrancy$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: Owner of a position can prevent liquidation due to the `onERC721Received` callbackReentrancy$0
- Revert Lend: `DailyLendIncreaseLimitLeft` and `dailyDebtIncreaseLimitLeft` are not adjusted accuratelyLogic 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: An attacker can easily bypass the collateral value limit factor checksLogic error$0
- Revert Lend: `dailyDebtIncreaseLimitLeft` is not updated in `liquidate()`Logic error$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: Wrong global lending limit check in `_deposit` functionLogic error$0
- Revert Lend: `setReserveFactor` fails to update global interest before updating reserve factorAccess control$0
- Revert Lend: No `minLoanSize` means liquidators will have no incentive to liquidate small positionsLogic error$0
- Revert Lend: Users can lend and borrow above allowed limitationsLogic error$0
- Revert Lend: Repayments and liquidations can be forced to revert by an attacker that repays minuscule amount of sharesFront-running / MEV$0
- Revert Lend: `V3Vault` is not ERC-4626 compliantLogic error$0
- Revert Lend: `V3Vault.sol` permit signature does not check receiving token address is USDCSignature replay$0
- Revert Lend: Tokens can't be removed as a collateral without breaking liquidations and other core functionsOracle manipulation$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: Incorrect liquidation fee calculation during underwater liquidation, disincentivizing liquidators to participateLogic error$0
- Revert Lend: Liquidation reward sent to msg.sender instead of recipientLogic error$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
- Exactly Protocol: Profitable liquidations and accumulation of bad debt due to earnings accumulator not being triggered before liquidatingLogic error$0
- Exactly Protocol: Utilization rates are 0 when average assets are 0, which may be used to game maturity borrows / deposits / withdrawalsLogic error$0
- Exactly Protocol: When bad debts are cleared, there will be some untracked fundsLogic error$0
- Exactly Protocol: Unassigned pool earnings can be stolen when a maturity borrow is liquidated by depositing at maturity with 1 principalLogic error$0
- Exactly Protocol: Theft of unassigned earnings from a fixed poolLogic error$0
- Exactly Protocol: Fixed interest rates can be manipulated by a whale borrowerLogic error$0
- Exactly Protocol: The Rounding Done in Protocol's Favor Can Be Weaponized to Drain the ProtocolLogic error$0
- Exactly Protocol: Manipulation of the floating debt by updating `floatingBackupBorrowed`Logic error$0
- Exactly Protocol: `Market::liquidate()` will not work when most of the liquidity is borrowed due to wrong liquidator `transferFrom()` orderLogic error$0
- Exactly Protocol: Liquidation does not prioritize lowest LTV tokensLogic error$0
- Exactly Protocol: Bad debt isn't cleared when `earningsAccumulator` is lower than a fixed-pool bad debtLogic error$0
- Exactly Protocol: The claimable rewards amount for borrowers decreases over timeLogic error$0
- Exactly Protocol: borrow() maliciously let others to enter marketLogic error$0
- Exactly Protocol: `rewardData.releaseRate` is incorrectly calculated on `RewardsController::config()` when `block.timestamp > start` and `rewardData.lastConfig != rewardData.start`Logic error$0
- Exactly Protocol: DoS on liquidations when utilization rate is highFront-running / MEV$0
- Exactly Protocol: Expired maturities longer than `FixedLib.INTERVAL` with unaccrued earnings may be arbitraged and/or might lead to significant bad debt creationLogic error$0
- Wise Lending: `PendlePowerFarmToken:: totalLpAssetsToDistribute` may lead to temporary DOS due to price growth check being skipped during depositLogic error$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: Liquidating chaining can be achieved by liquidating token collateral with the highest `collateralFactor`Oracle manipulation$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: Exiting a farm on mainnet assumes a peg of `1:1` when swapping stETH for ETHOracle manipulation$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: Borrowers can DoS liquidations by repaying as little as 1 share.Front-running / MEV$0
- Wise Lending: Liquidators can pay less than required to completely liquidate the private collateral balance of an uncollateralized positionOracle manipulation$0
- Wise Lending: First depositor inflation attack in `PendlePowerFarmToken`Logic error$0
- Wise Lending: The protocol allows borrowing small positions that can create bad debtOracle manipulation$0
- Wise Lending: Unchecked return value bug on `TransferHelper::_safeTransferFrom()`Logic error$0
- Wise Lending: `PendlePowerManager` is incompatible with `PendleRouterV3`Oracle manipulation$0
- Abracadabra Money: MagicLpAggregator always returns lower than correct answer, leading to arbitrage lossOracle manipulation$0
- Wise Lending: Wrong use of `nftID` to check if a `PowerFarm` position is an Aave positionInteger overflow/underflow$0
- Wise Lending: User can erase their position debt for freeOracle manipulation$0
- Wise Lending: Incorrect calculation of lending shares in `_withdrawOrAllocateSharesLiquidation` can lead to revert and failure to liquidateLogic error$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
- Abracadabra Money: Oracle price can be manipulatedOracle manipulation$0
- Wise Lending: Lack of update when modifying pool feeLogic error$0
- Wise Lending: User's attempt to deposit & withdraw reverts due to the calculation style inside `_calculateShares()`Logic error$0
- Wise Lending: Current heartbeat implementation may lead to a prolonged DoS for Chainlink OraclesOracle manipulation$0
- Abracadabra Money: MagicLpAggregator doesn't consider the dcimal of MagicLPOracle manipulation$0
- Wise Lending: Withdrawing uncollateralized deposits is possible even though the position is in liquidation modeLogic error$0
- Acala Network: Early user can break pool via inflation attack due to no minimum liquidity check in the incentive contractLogic error$0
- Acala Network: Incentive accumulation can be sandwiched with additional shares to gain advantage over long-term depositorsFront-running / MEV$0
- Teller Finance: `_repayLoan` now allows for overpaying of loan and could cause DoS within `LenderCommitmentGroup_Smart`Logic error$0
- Teller Finance: `_sendOrEscrowFunds` will brick LCG funds causing insolvencyLogic error$0
- Teller Finance: `burnSharesToWithdrawEarnings` burns before math, causing the share value to increaseLogic error$0
- Teller Finance: Lender may not be able to close loan or get back lending token.Logic error$0
- Teller Finance: Utilization math should include `liquidityThresholdPercent`Logic error$0
- Teller Finance: `FlashRolloverLoan_G5` will fail for `LenderCommitmentGroup_Smart` due to `CollateralManager` pulling collateral from `FlashRolloverLoan_G5`Logic error$0
- Teller Finance: liquidateDefaultedLoanWithIncentive sends the collateral to the wrong accountLogic error$0
- Teller Finance: `LenderCommitmentGroup_Smart_test::addPrincipalToCommitmentGroup/burnSharesToWithdrawEarnings()` are vulnerable to slippage attacksFront-running / MEV$0
- Teller Finance: Malicious borrower can pay each payment and make its own loan default 1 month laterLogic error$0
- Teller Finance: Interest rate in `LenderCommitmentGroup_Smart` may be easily manipulated by depositing, taking a loan and withdrawingLogic error$0
- Teller Finance: Borrowers can brick the commitment group poolLogic error$0
- Teller Finance: `FlashRolloverLoan_G5` will not work for certain tokens due to not setting the approval to `0` after repaying a loanFlash loan attack$0
- Teller Finance: Not transferring collateral when submitting bids allows malicious users to create honeypot-style attacksLogic error$0
- Teller Finance: Drained lender due to `LenderCommitmentGroup_Smart::acceptFundsForAcceptBid()` `_collateralAmount` by `STANDARD_EXPANSION_FACTOR` multiplicationLogic error$0
- Teller Finance: Users can bypass auction mechanism for `LenderCommitmentGroup_Smart` liquidation mechanism for loans that are close to end of loanLogic error$0
- Teller Finance: The cycle payment due may span over approx. 2 cycles and block the borrower from payingLogic error$0
- Teller Finance: Incorrect selector in `FlashRolloverLoan_G5::_acceptCommitment()` does not match `SmartCommitmentForwarder::acceptCommitmentWithRecipient()`Logic error$0
- Teller Finance: `LenderCommitmentGroup` pools will have incorrect exchange rate when fee-on-transfer tokens are usedLogic error$0
- Teller Finance: `LenderCommitmentGroup_Smart.sol` cannot deploy pools with non-string symbol() ERC20s.Logic error$0
- Teller Finance: `LenderCommitmentGroup_Smart` picks the wrong Uniswap price, allowing borrowing at a discount by swapping before withdrawingLogic error$0
- Teller Finance: Borrowers can surpass `liquidityThresholdPercent` and borrow to near 100% of the principalLogic error$0
- Teller Finance: `LenderCommitmentGroup_Smart` does not use `mulDiv` when converting between token and share amounts, possibly leading to DoS or loss of fundsInteger overflow/underflow$0
- Teller Finance: Anyone can steal pool shares from lender group if no-revert-on-failure tokens are usedLogic error$0
- Teller Finance: If `repayLoanCallback` address doesn't implement `repayLoanCallback` try/catch won't go into the catch and will revert the txLogic error$0
- Teller Finance: Performing a direct multiplication in `_getPriceFromSqrtX96` will overflow for some uniswap poolsLogic error$0
- Teller Finance: APRs are lower than they shouldLogic error$0
- Teller Finance: liquidateDefaultedLoanWithIncentive can be gamed to avoid paying loans interestLogic error$0
- Canto: Truncation exploitation of partial transfer systemInteger overflow/underflow$0
- Canto: Improper adjustment of Lending Ledger configurationGovernance attack$0
- Canto: Improper parallel time systemLogic error$0
- Arcadia - Aerodrome integrations: Swapping large amounts of assets back and forth in an Aerodrome pool allows to bypass exposure limitsLogic error$0
- Arcadia - Aerodrome integrations: WrappedAerodromeAM.sol is not compatible with the Revert on Zero Value TokensLogic error$0
- Zivoe: Title: Inadequate Allowance Handling in convertAndForward Function of `OCT_DAO` & `OCT_YDL`.Logic error$0
- Zivoe: OCC_Modular::applyCombine will round APR downLogic error$0
- Zivoe: Forwarding yield in `OCL_ZVE` is possible a lot more often than the enforced 30 daysLogic error$0
- Zivoe: Anyone could call `depositReward` with zero reward to extend the period finish timeLogic error$0
- Zivoe: When APR late rate is lower than APR, an OCC locker bullet loan borrower can pay way less interests by calling the loanLogic error$0
- Zivoe: `ZivoeTranches#rewardZVEJuniorDeposit` function miscalculates the reward when the ratio traverses lower/upper bound.Logic error$0
- Zivoe: `ZivoeYDL::earningsTrancheuse()` always assumes that `daysBetweenDistributions` have passed, which might not be the caseLogic error$0
- Zivoe: OCL_ZVE::pushToLockerMulti() will revert due to incorrect assert() statements when interacting with UniswapV2Logic error$0
- Arcadia - Aerodrome integrations: Donating (and syncing) tokens to an Aerodrome allows to bypass exposure limitsLogic error$0
- Zivoe: Rewards are calculated as distributed even if there are no stakers, locking the rewards foreverLogic error$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: Remove Liquidity has missing reserve1 DUST check, which can make reserve1 to be less than DUSTGovernance attack$0
- Salty.IO: Adversary can prevent updating price feed addresses by creating poisonous proposals ending in `_confirm`Oracle manipulation$0
- Salty.IO: If there is only one USDS borrower, he can never be liquidatedOracle manipulation$0
- Salty.IO: Minimium Collateral Check Can Be BypassedOracle manipulation$0
- Salty.IO: Attacker Can Inflate LP Position Value To Create a Bad Debt LoanOracle manipulation$0
- Salty.IO: Salt Rewards - Rewards related to Arbitrage profits for pools can be lostPrice manipulation$0
- Salty.IO: Incorrect calculation to check remaining ratio after reward in StableConfig.solOracle manipulation$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: Unwhitelisting does not clear _arbitrageProfits, so re-whitelisting may result in an unfair distribution of liquidity rewardsGovernance attack$0
- Salty.IO: When forming POL the DAO will end up stucked with DAI and USDS tokens that cannot handleGovernance attack$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: PriceFeed is likely to be disabled in times of volatility, causing liquidations and borrows to freezeLogic error$0
- Salty.IO: When borrowers repay USDS, it is sent to the wrong address, allowing anyone to burn Protocol Owned Liquidity and build bad debt for USDSLogic error$0
- Flat Money Fix Review: Code asymmetry of `globalPositions.marginDepositedTotal`Integer overflow/underflow$0
- Perennial V2 Update #2: Liquidator can set up referrals for other usersLogic error$0
- Perennial V2 Update #2: Vault and oracle keepers DoS in some situations due to `market.update(account,max,max,max,0,false)`Logic error$0
- Perennial V2 Update #2: Vault checkpoints slightly incorrect conversion from assets to shares leads to slow loss of funds for long-time vault depositorsLogic error$0
- Perennial V2 Update #2: When vault's market weight is set to 0 to remove the market from the vault, vault's leverage in this market is immediately set to max leverage risking position liquidationLogic error$0
- Perennial V2 Update #2: Empty orders do not request from oracle and during settlement they use an invalid oracle version with `price=0` which messes up a lot of fees and funding accounting leading to loss of funds for the makersLogic error$0
- Perennial V2 Update #2: All transactions to claim assets from the vault will revert in some situations due to double subtraction of the claimed assets in market position allocations calculation.Logic error$0
- Perennial V2 Update #2: Makers can lose funds from price movement even when no long and short positions are opened, due to incorrect distribution of adiabatic fees exposure between makersLogic error$0
- Perennial V2 Update #2: If referral or liquidator is the same address as the account, then liquidation/referral fees will be lost due to local storage being overwritten after the `claimable` amount is credited to liquidator or referralLogic error$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: `yieldFeeBalance` wouldn't be claimed after calling `transferTokensOut()`Oracle manipulation$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: `_maxYieldVaultWithdraw()` uses `yieldVault.convertToAssets()`Logic 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
- WagmiLeverage V2: Liquidation bonus scales exponentially instead of linearly.Logic error$0
- RadicalxChange: Auction fails if the 'Honorarium Rate' is 0%Logic error$0
- RadicalxChange: Highest bidder can withdraw his collateral due to a missing check in _cancelAllBidsLogic error$0
- reNFT: Blocklisting in payment ERC20 can cause rented NFT to be stuck in SafeLogic error$0
- reNFT: A malicious borrower can hijack any NFT with `permit()` function he rents.Access control$0
- reNFT: Lender of a PAY order lending can grief renter of the paymentLogic error$0
- reNFT: An attacker can hijack any ERC1155 token he rents due to a design issue in reNFT via reentrancy exploitationReentrancy$0
- reNFT: A malicious lender can freeze borrower's ERC1155 tokens indefinitely because the guard can't differentiate between rented and non-rented ERC1155 tokens in the borrower's safe.Logic error$0
- reNFT: An attacker is able to hijack any ERC721 / ERC1155 he borrows because guard is missing validation on the address supplied to function call `setFallbackHandler()`Access control$0
- Perpetual: Two Pyth prices can be used in the same transaction to attack the LP poolsOracle manipulation$0
- Perpetual: Price band caps apply to decreasing orders, but not to liquidationsLogic error$0
- Perpetual: Attackers can sandwich their own trades up to the price bandsLogic error$0
- Perpetual: No slippage control on maker LP `deposit()`/`withdraw()`Logic error$0
- Perpetual: Withdrawal caps can be bypassed by opening positions against the SpotHedgeBaseMakerLogic error$0
- Perpetual: There may be excess funds in the PnL pool or bad debt due to the funding fee.Logic error$0
- Perpetual: Incorrect premium calculation in OracleMakerLogic error$0
- Perpetual: Borrow fees can be arbitrarily increased without the maker providing any valueLogic error$0
- Perpetual: Funding Fee Rate is calculated based only on the Oracle Maker's skew but applied across the entire market, which enables an attacker to generate an extreme funding rate for a low cost and leverage that to their benefitReentrancy$0
- Perpetual: Attackers can create positions that have no incentive to be liquidatedLogic error$0
- Tapioca: DoS in BBLeverage and SGLLeverage due to using wrong leverage executor interfaceLogic error$0
- Tapioca: `getCollateral` and `getAsset` functions of the AssetTotsDaiLeverageExecutor contract decode data incorrectlyLogic error$0
- Tapioca: BBLiquidation::_liquidateUser liquidator can bypass protocol fee on liquidation by returning returnedShare == borrowShareLogic error$0
- Tapioca: Multiple contracts cannot be pausedAccess control$0
- Tapioca: Composing approval with other messages is subject to DoSFront-running / MEV$0
- Tapioca: `mTOFT` can be forced to receive the wrong ERC20 leading to token lockupAccess control$0
- Tapioca: `_computeClosingFactor` function will return incorrect values, lower than needed, because it uses `collateralizationRate` to calculate the denominatorLogic error$0
- Tapioca: Penrose::_depositFeesToTwTap can unexpectedly revert due to amount rounded downLogic error$0
- Tapioca: BBLiquidation/SGLLiquidation::_updateBorrowAndCollateralShare liquidator can bypass bad debt handling to ensure whole liquidation rewardLogic error$0
- Tapioca: Allowances is double spent in BBLeverage's and SGLLeverage's `sellCollateral()`Logic error$0
- Tapioca: The repaying action in `BBLeverage.sellCollateral` function pulls YieldBox shares of asset from wrong addressLogic error$0
- Tapioca: Singularity::removeAsset share can become zero due to rounding down, and any user can be extracted some amount of assetLogic error$0
- Tapioca: Unupdated totalBorrow After BigBang LiquidationLogic error$0
- Tapioca: Liquidation fees are permanently frozen on Penrose YB accountLogic error$0
- Tapioca: Operation residual is lost for the user of BBLeverage's and SGLLeverage's `sellCollateral()`Logic error$0
- Tapioca: Not considering fees when wrapping mtOFTs leads to DoS in leverage executorsLogic error$0
- Tapioca: Secondary Big Bang market rates can be manipulated due to not triggering penrose.reAccrueBigBangMarkets(); when leveragingPrice manipulation$0
- Tapioca: buyCollateral() does not work properlyLogic error$0
- Tapioca: Unprotected `executeModule` function allows to steal the tokensAccess control$0
- Tapioca: SGL and BB repay do not round up both on allowance spending and elastic amountInteger overflow/underflow$0
- Tapioca: Unpausing with accrue timestamp reset can remove the accrual between last recorded accrue time and pausing timeLogic error$0
- Tapioca: Malicious MarketHelper contract can be used in TOFTMarketReceiverModule's leverageUpReceiver and marketRemoveCollateralReceiver functionsLogic error$0
- Tapioca: BBCommon::_accrue wrong value is used to prevent overflowInteger overflow/underflow$0
- Tapioca: `leverageAmount` is incorrect in `SGLLeverage.sellCollateral` function due to calculation based on the new states of YieldBox after withdrawalLogic error$0
- Tapioca: BBLeverage::sellCollateral is unusable due to wrong asset deposit attempt in YieldBoxLogic error$0
- Tapioca: Leverage borrowing with stale rate can atomically create bad debt with no prior positions and no investmentOracle manipulation$0
- Tapioca: Variable opening fee will always be wrongly computed if collateral is not a stablecoinLogic error$0
- Tapioca: Underflow Vulnerability in `Market::_allowedBorrow` Function: Oversight with Pearlmit Allowance HandlingInteger overflow/underflow$0
- Tapioca: BBLeverage's and SGLLeverage's `buyCollateral()` remove the required funds from the target twiceLogic error$0
- Opus: Multiplier is incorrectly calculated in `Controller`Logic error$0
- Opus: Neglect of exceptional redistribution amounts in `withdraw_helper` functionLogic error$0
- Opus: A user can steal from the shrine by forcing redistribution of their trove; due to incorrect logic trove debt will be reset but yangs keptLogic error$0
- Opus: An attacker could manipulate debt exceptional redistribution because it is allowed to deposit into any troveLogic error$0
- Opus: The `provide()` function does not reset withdrawal requests, allowing an attacker to bypass risk-free yield tactics protectionLogic error$0
- Opus: after shut, no pulled redistribution yang will be lockedLogic error$0
- Opus: ERC4626 inflate issue mitigation is not sufficientFront-running / MEV$0
- Opus: Shrine's recovery mode can be weaponized as leverage to liquidate healthy trovesLogic error$0
- Opus: Unhealthy troves with LTV > 90% cannot always be absorbed as intendedLogic error$0
- Opus: Collateral cannot be withdrawn from trove once yang is suspendedLogic error$0
- Opus: Loss of liquidation compensation assets in absorbLogic error$0
- Origami: An attacker can bypass the dynamic fees in `lovStEth` vault under certain depeg conditions, and extract value from honest depositorsOracle manipulation$0
- Origami: hardcoding aave pool address is a serious aave integration flaw because valid pool addresses can changeLogic error$0
- zkSync: Missing range constraint on remainder check in `div` opcode implementationInteger overflow/underflow$0
- zkSync: Missing constraint on remainder in `shr` opcode implementationLogic error$0
- Real Wagmi #2 Update: A borrower eligible for liquidation can pay an improperly large amount of fees, and may be unfairly liquidatedLogic error$0
- Real Wagmi #2 Update: Entrance fees are distributed wrongly in loans with multiple lendersLogic error$0
- Real Wagmi #2 Update: Fees aren't distributed properly for positions with multiple lenders, causing loss of funds for lendersLogic error$0
- Napier: `swapUnderlyingForYt` revert due to rounding issuesLogic error$0
- Napier: SFrxETHAdapter redemptionQueue waiting period can DOS adapter functionsLogic error$0
- Origami: Adversary can block any `exit` due to `preCheck` reached `cap` by using flash-loan Flash loan attack$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: Inability to offboard term twice in a 7-day period may lead to bad debt to the marketLogic error$0
- Ethereum Credit Guild: `PnL` system can be broken by large users intentionally or unintentionally.Access control$0
- Ethereum Credit Guild: LendingTerm.sol `_partialRepay()` A user cannot partial repay a loan with `0` interestLogic error$0
- INIT Capital: MarginTradingHook#updateOrder lacks access controlAccess control$0
- INIT Capital: `fillOrder` not properly cancel order when collateral of position is emptyLogic 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: Malicious borrower can decrease Guild holders rewardFlash loan attack$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: Rounding errors can cause ERC20RebaseDistributor transfers and mints to fail for underflowInteger overflow/underflow$0
- Ethereum Credit Guild: LendingTerm `debtCeiling` function uses `creditMinterBuffer` incorrectlyLogic error$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: `LendingTerm` inconsistency between debt ceiling as calculated in `borrow()` and `debtCeiling()`Logic error$0
- Ethereum Credit Guild: Incorrect calculations in `debtCeiling`Logic error$0
- Ethereum Credit Guild: `LendingTerm::debtCeiling()` can return wrong debt as the `min()` is evaluated incorrectlyLogic error$0
- Ethereum Credit Guild: `SurplusGuildMinter.getReward()` is susceptible to DoS due to unbounded loopGovernance attack$0
- INIT Capital: LP unwrap / wrap is fully broken if master chef contract has insufficient reward token and block decollateralize wlp and wlp liquidationLogic error$0
- Ethereum Credit Guild: No check for sequencer uptime can lead to dutch auctions failing or executing at bad pricesLogic 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: `totalBorrowedCredit` can revert, breaking gauges.Integer overflow/underflow$0
- INIT Capital: MarginTradingHook users could potentially be DOSedLogic error$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
- Ethereum Credit Guild: Replay attack to suddenly offboard the re-onboarded lending termSignature replay$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: 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: Users can deflate other markets Guild holders rewards by staking less priced tokenGovernance attack$0
- Ethereum Credit Guild: Repayers using EOA accounts can be affected if bad debt is generated when they are repaying loansLogic error$0
- Arcadia: Utilisation Can Be Manipulated Far Above 100%Logic error$0
- Arcadia: Caching Uniswap position liquidity allows borrowing using undercollateralized Uni positionsLogic error$0
- Arcadia: Reentrancy in flashAction() allows draining liquidity poolsReentrancy$0
- Arcadia: Stargate `STG` rewards are accounted incorrectly by `StakedStargateAM.sol`Integer overflow/underflow$0
- Arcadia: L2 sequencer down will push an auction's price down, causing unfair liquidation prices, and potentially guaranteeing bad debtLogic error$0
- Arcadia: `AccountV1#flashActionByCreditor` can be used to drain assets from account without withdrawingLogic error$0
- Arcadia: `LendingPool#flashAction` is broken when trying to refinance position across `LendingPools` due to improper access controlAccess control$0
- Arcadia: `CREATE2` address collision against an Account will allow complete draining of lending poolsLogic error$0
- Arcadia: Dilution of Donations in TrancheLogic error$0
- eBTC Protocol: Attacker can utilize function `CdpManager.redeemCollateral()` to break the order of sortedCdpsLogic error$0
- eBTC Protocol: The way fees are accounted can break the sorted list orderLogic error$0
- eBTC Protocol: Batched liquidations doesn't distribute bad debt on next batches in the listLogic error$0
- eBTC Protocol: When calling LeverageMacroBase.doOperation to open a CDP, the POST CALL CHECK may use the wrong cdpIdLogic error$0
- eBTC Protocol: Loss of user funds, as LeverageMacroReferences can't do an arbitrary system call to the function claimsSurplusCollShare in order to claim the extra surplus collateral gained from their liquidated or fully redeemed CdpsLogic error$0
- eBTC Protocol: Redemptions are inconsistent with other cdp's operationsLogic error$0
- eBTC Protocol: `fetchPrice` can return different prices in the same transactionOracle manipulation$0
- Paladin: Loot.sol - Updating the vestingDuration with active vests can lead to unexpected slashingLogic error$0
- Canto: secRewardsPerShare Insufficient precisionInteger overflow/underflow$0
- Canto: update_market() market weight incorrectLogic error$0
- Canto: Loss of precission when calculating the accumulated CANTO per shareInteger overflow/underflow$0
- Canto: update_market() nextEpoch calculation incorrectLogic error$0
- Asymmetry Finance: AfEth collaterals cannot be balanced after ratio is changedLogic error$0
- Flat Money: Long traders unable to withdraw their assetsLogic error$0
- Flat Money: Trade fees can be avoided in limit ordersLogic error$0
- Flat Money: Malicious keepers can manipulate the price when executing an orderOracle manipulation$0
- Flat Money: In LeverageModule.executeOpen/executeAdjust, vault.checkSkewMax should be called after updating the global position dataLogic error$0
- Flat Money: Losses of some long traders can eat into the margins of othersLogic error$0
- Flat Money: Incorrect handling of PnL during liquidationLogic error$0
- Flat Money: The transfer lock for leveraged position orders can be bypassedLogic error$0
- Flat Money: Vault Inflation AttackInteger overflow/underflow$0
- Flat Money: Incorrect price used when updating the global position dataLogic error$0
- Flat Money: A malicious user can bypass limit order trading fees via cross-function re-entrancyReentrancy$0
- Flat Money: Oracle will not failover as expected during liquidationOracle manipulation$0
- Flat Money: Asymmetry in profit and loss (PnL) calculationsLogic error$0
- Flat Money: Fees are ignored when checks skew max in Stable Withdrawal / Leverage Open / Leverage AdjustLogic error$0
- Flat Money: Large amounts of points can be minted virtually without any costLogic error$0
- Particle Protocol: Malicious lender can manipulate the fee to force borrower pay high premiumLogic error$0
- Particle Protocol: Excess tokens that are not accounted in the token premium portion stuck in the `ParticlePositionManager`Reentrancy$0
- Particle Protocol: reclaimLiquidity() Malicious borrowers can force LPs to be unable to retrieve Liquidity by closing and reopening the Position before it expiresLogic error$0
- Particle Protocol: Position can be opened even when the particle position manger does not hold the Uniswap V3 Position NFTLogic error$0
- Particle Protocol: malicious borrowers can follow reclaimLiquidity() then execute addPremium() to invalidate renewalCutoffTimeLogic error$0
- Particle Protocol: Underflow could happened when calculating Uniswap V3 position's fee growth and can cause operations to revertInteger overflow/underflow$0
- Particle Protocol: collectLiquidity() Lack of can specify recipient leads to inability to retrieve token1 after entering the blacklist of token0Logic error$0
- Particle Protocol: liquidatePosition() liquidator can construct malicious data to steal the borrower's profitLogic error$0
- Particle Protocol: Impossible to open a position with a large `marginTo`Integer overflow/underflow$0
- Particle Protocol: Modifying the loan term setting can default existing loansGovernance attack$0
- Particle Protocol: openPosition() Lack of minimum token0PremiumPortion/token1PremiumPortion limitLogic error$0
- Particle Protocol: Add premium doesn't collect feesLogic error$0
- Particle Protocol: openPosition() use stale feeGrowthInside0LastX128/feeGrowthInside1LastX128Logic error$0
- Particle Protocol: Liquidation condition should not factor the liquidation reward into the premiumsLogic error$0
- Notional Update #5: The use of spot data when discounting is subjected to manipulationOracle manipulation$0
- Notional Update #5: Malicious users could block liquidation or perform DOSLogic error$0
- Notional Update #5: recover() using the standard transfer may not be able to retrieve some tokensLogic error$0
- Notional Update #5: getTargetExternalLendingAmount() when targetUtilization == 0 no check whether enough externalUnderlyingAvailableForWithdrawLogic error$0
- Notional Update #5: getTargetExternalLendingAmount() targetAmount may far less than the correct valueLogic error$0
- Notional Update #5: Unexpected behavior when calling certain ERC4626 functionsLogic error$0
- Notional Update #5: Low precision is used when checking spot price deviationLogic error$0
- Notional Update #5: Lender transactions can be front-run, leading to lost fundsLogic error$0
- Notional Update #5: `ExternalLending`Logic error$0
- Notional Update #5: Rebalance will be delayed due to revertLogic error$0
- Notional Update #5: _isExternalLendingUnhealthy() using stale factorsLogic error$0
- Notional Update #5: `wfCashERC4626`Logic error$0
- Notional Update #5: Residual ETH will not be sent back to users during the minting of wfCashLogic error$0
- Notional Update #5: Rebalance might be skipped even if the external lending is unhealthyLogic error$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: `collateralizeWLp` can be bypassed even when collateralization is pausedReentrancy$0
- INIT Capital: `setPosMode` should not allow changing the mode when the new mode's `canRepay` status is disabledReentrancy$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: Decimals of LendingPool don't take into account the offset introduced by VIRTUAL\_SHARESLogic error$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: `TRST-M-8` from previous audit still presentLogic error$0
- INIT Capital: wLp tokens could be stolenLogic error$0
- INIT Capital: If wLP is blacklisted, then user will not be able to withdraw itLogic error$0
- INIT Capital: Admin configuration isAllowedForCollateral(mode, pool) can be bypassed by donating asset to the pool directly and then trigger sync cash via flashloanLogic error$0
- INIT Capital: setPosMode function doesn't check if wLp is whitelistedLogic 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: Liquidations can be prevented by frontrunning and liquidating 1 debt (or more) due to wrong assumption in POS\_MANAGERFront-running / MEV$0
- Open Dollar: Collateral could be transferred to an address, which is not `SAFEHandler` managed by the `SAFEManager`Logic 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: Old permissions in handlerCan mapping are still attached to the safeHandler of a transferred safeLogic error$0
- Open Dollar: `transferSAFEOwnership()` does not fully transfer ownershipLogic 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: Malicious users are able to bypass the Tax payment using making a Fake BasicActions ContractLogic error$0
- Wildcat Protocol: `codehash` check in factory contracts does not account for non-empty addressesFront-running / MEV$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: `create2WithStoredInitCode()` does not revert if contract deployment failedLogic error$0
- Wildcat Protocol: Function `WildcatMarketController.setAnnualInterestBips` allows for values outside the factory rangeLogic error$0
- Wildcat Protocol: Borrower can drain all funds of a sanctioned lenderLogic error$0
- Wildcat Protocol: Protocol markets are incompatible with rebasing tokensLogic error$0
- Wildcat Protocol: When `withdrawalBatchDuration` is set to zero lenders can withdraw more then allocated to a batchReentrancy$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: Blocked accounts keep earning interest contrary to the WhitePaperOracle manipulation$0
- Wildcat Protocol: `collectFees()` updates delinquency wrongly as `_writeState()` is called before assets are transferredLogic 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: `setAnnualInterestBips()` can be abused to keep a market's reserve ratio at 90%Logic error$0
- Wildcat Protocol: Borrower has no way to update `maxTotalSupply` of `market` or close market.Access control$0
- Tapioca DAO: TOFT in (m)TapiocaOft contracts can be stolen by calling removeCollateral() with a malicious removeParams.marketBridge exploit$0
- Tapioca DAO: Attacker can block LayerZero channel due to variable gas cost of saving payloadGovernance attack$0
- Tapioca DAO: `AaveStrategy.sol`: Changing swapper breaks the contractAccess control$0
- Tapioca DAO: Ability to steal user funds and increase collateral share infinitely in BigBang and SingularityGovernance attack$0
- Tapioca DAO: Lack of safety buffer between liquidation threshold and LTV ratio for borrowers to prevent unfair liquidationsGovernance attack$0
- Tapioca DAO: Liquidation transactions can potentially fail for all marketsOracle manipulation$0
- Tapioca DAO: Reentrancy in `USDO.flashLoan()`, enabling an attacker to borrow unlimited USDO exceeding the max borrow limitReentrancy$0
- Tapioca DAO: The amount of debt removed during `liquidation` may be worth more than the account's collateralOracle manipulation$0
- Tapioca DAO: The BigBang contract take more fees than it shouldGovernance 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: `LidoEthStrategy._currentBalance` is subject to price manipulation, allows overborrowing and liquidationsReentrancy$0
- Tapioca DAO: User's assets can be stolen when removing them from the Singularity market through the Magnetar contractOracle manipulation$0
- Tapioca DAO: TOFT `removeCollateral` can be used to steal all the balanceBridge exploit$0
- Tapioca DAO: Overflow risk in Market contractInteger overflow/underflow$0
- Tapioca DAO: `SGLLiquidation::_computeAssetAmountToSolvency`, `Market::_isSolvent` and `Market::_computeMaxBorrowableAmount` may overestimate the collateral, resulting in false solvencyGovernance attack$0
- Tapioca DAO: Rewards compounded in AaveStrategy are unredeemableGovernance attack$0
- Tapioca DAO: Attacker can steal victim's oTAP position contents via `MagnetarMarketModule#_exitPositionAndRemoveCollateral()`Governance attack$0
- Tapioca DAO: Incorrect liquidation reward computation causes excess liquidator rewards to be givenOracle manipulation$0
- Tapioca DAO: `_liquidateUser()` should not re-use the same minimum swap amount out for multiple liquidationGovernance attack$0
- Tapioca DAO: Funds are locked because borrowFee is not correctly implemented in BigBangGovernance attack$0
- Tapioca DAO: Incorrect solvency check because it multiplies collateralizationRate by share not amount when calculating liquidation thresholdInteger overflow/underflow$0
- Tapioca DAO: Incorrect formula used in function `Market.computeClosingFactor()`Integer overflow/underflow$0
- Tapioca DAO: Tokens can be stolen from other users who have approved MagnetarAccess control$0
- Lybra Finance: Understatement of `poolTotalPeUSDCirculation` amounts due to incorrect accounting after function `_repay` is calledLogic error$0
- Lybra Finance: Lack of timelock on `rigidRedemption`, enables to steal yield from other usersOracle manipulation$0
- Lybra Finance: Liquidation won't work when bad and safe collateral ratio are set to default valuesInteger overflow/underflow$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: Incorrect function call in `LybraRETHVault`'s `getAssetPrice`Logic error$0
- Lybra Finance: Making `_totalSupply` and `_totalShares` imbalance significantly by providing fake income leads to stealing fundLogic error$0
- Lybra Finance: `LybraPeUSDVaultBase.rigidRedemption` should use `getBorrowedOf` instead of `borrowed`Logic 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
- Lybra Finance: Fixed reward percentage for liquidators in the eUSD vault may cause a liquidation crisisLogic error$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
- 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: `_harvestCore()` roi calculation errorLogic error$0
- Ethos Reserve: Rewards will be locked in LQTYStaking ContractAccess control$0