Business logic vulnerabilities in disclosed bug bounty reports
The code does exactly what it was written to do, and what it was written to do is wrong.
- Reports indexed
- 242
- Total paid
- $131k
- Critical
- 0
- Largest payout
- $120k
Logic errors are the residual category and the hardest to find with tooling, because there is no unsafe pattern to grep for. The contract compiles, the tests pass, and the specification itself has a hole in it: an off-by-one in a reward epoch, a state machine that permits a transition nobody considered, an accounting path that credits twice under a specific ordering.
The reports gathered here are the strongest argument for reading disclosures rather than checklists. Each one is a case where a reviewer reconstructed the intended invariant, then found the input that violated it — and the write-ups usually show that reasoning explicitly.
Common shapes include edge cases at zero and at maximum, first and last participant conditions, and paths that behave differently when a step is skipped or repeated.
What reviewers look for
- State machines with unreachable-looking transitions that are in fact reachable
- Zero-value, single-participant and final-participant edge cases
- Accounting that differs depending on the order of two independent calls
- Emergency or pause paths that bypass invariant checks
- Loops whose bounds depend on user-controlled length
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
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.
Oracle-free AMM invariant rounding allows slow drain
A directional rounding flaw in the Newton-Raphson solver for a StableSwap invariant enabled subtle value extraction during token exchanges. When computing invariant values and target balances, both routines rounded down, yielding an extra wei of token output to the user on specific balance ratios. On low-fee Layer 2 blockchains, an automated script could execute high-frequency minimal swaps to steadily extract pool reserves over time.
Docker Secret Disclosure via GitHub Actions Cache Poisoning
A GitHub Actions cache poisoning vulnerability was identified in the Hyperledger repository infrastructure. The flaw allowed unauthorized actors to modify shared build cache keys and execute arbitrary code within CI/CD pipeline steps. When downstream workflows restored the manipulated cache, sensitive Docker credentials stored in environment variables were exposed. This allowed attackers to extract critical pipeline secrets without requiring write permissions to the underlying repository.
Window.opener bug at www.coinbase.com
A web application link on www.coinbase.com opened external URLs using target="_blank" without setting the rel="noopener" or rel="noreferrer" security attributes. This allowed the newly opened destination window to access and manipulate the parent tab through the JavaScript window.opener reference. An attacker controlling the external target site could leverage this access to redirect the user's active Coinbase tab to a malicious external URL or phishing page. Coinbase rewarded the finding with a $100 bounty.
Good Entry: V3 Proxy does not send funds to the recipient, instead it sends to the msg.sender
Good Entry's V3 proxy wrapper exposes swap functions intended to be compatible with the Uniswap V2 interface, but these functions ignore the caller-supplied destination address and instead route output tokens to msg.sender. Any caller who passes a different `to` address loses the economic value of the swap — for instance a user blacklisted on the output token, or one whose allowance/signature was compromised and who tries to divert proceeds to a safe address, ends up with funds sent back to the caller. The issue was confirmed by the protocol and the judge rated it Medium; the final fix added an explicit `require(msg.sender == to)` to enforce that swaps only ever go to the caller, which is safe for the OPM-only usage the module was designed for.
Putty: An attacker can create a short put option order on an NFT that does not support ERC721 (like cryptopunk), and the user can fulfill the order, but cannot exercise the option
The Putty protocol incorrectly assumes that all NFT assets used as underlying collateral in options contracts support the full ERC-721 standard. By using a safeTransferFrom implementation that requires the onERC721Received callback, the protocol unintentionally renders certain legacy NFTs, like CryptoPunks, unexercisable. Attackers can exploit this by offering options on these incompatible assets, collecting premiums from users who are then unable to exercise their options or receive the underlying asset.
All reports in this group
- Putty: Create a short call order with non empty floor makes the option impossible to exercise and withdrawLogic error$0
- Putty: Overlap Between `ERC721.transferFrom()` and `ERC20.transferFrom()` Allows `order.erc20Assets` or `order.baseAsset` To Be ERC721 Rather Than ERC20Logic error$0
- Putty: `fillOrder()` and `exercise()` may lock Ether sent to the contract, foreverLogic error$0
- Putty: `fee` can change without the consent of usersLogic error$0
- PoolTogether: `_requireVaultCollateralized()` is called at the beginning of the functions `mintYieldFee()` and `liquidate()`Logic error$0
- PoolTogether: `TwabLib::getTwabBetween` can return inaccurate balances if `_startTime` and `_endTime` aren't safely boundLogic error$0
- Putty: Put option sellers can prevent exercise by specifying zero amounts, or non-existant tokensLogic error$0
- Putty: Fee is being deducted when Put is expired and not when it is exercised.Logic error$0
- Putty: Order duration can be set to 0 by Malicious makerLogic error$0
- PoolTogether: If the underlying asset is a fee on transfer token, it could break the internal accounting of the vaultLogic error$0
- PoolTogether: Delegated amounts can be forcefully removed from anyone in the `TwabController`Logic error$0
- PoolTogether: `Vault` is not compatible with some ERC4626 vaultsLogic error$0
- PoolTogether: Resetting delegation will result in user funds being lost foreverLogic error$0
- PoolTogether: The tier odds in `TieredLiquidityDistributor` are incorrectLogic error$0
- PoolTogether: Tiers can be maintained active to give unfair advantage to user through DoSLogic error$0
- PoolTogether: `depositWithPermit` and `mintWithPermit` are allowed to be called by the permit creator onlyLogic error$0
- PoolTogether: Number of prize tiers always increases if just 1 canary prize is claimedLogic error$0
- PoolTogether: Balance invariant between the individual and total `twabs` can be brokenLogic error$0
- PoolTogether: `VaultFactory` allows deployment of vaults with non-authentic `TwabController` and `PrizePool`Logic error$0
- PoolTogether: Vault does not conform to ERC4626Logic error$0
- PoolTogether: Improper handling of cases when withdrawable assets = 0Logic error$0
- PoolTogether: The threshold check for adding of new tiers is skipped when `_nextNumberOfTiers` is at the maximum amountLogic error$0
- PoolTogether: Vault contribution calculations wrongly include the current round when claiming prizesLogic error$0
- Rubicon: `Position` contract allows to interact with positions that are liquidatedLogic error$0
- Rubicon: Incorrect fee handling in `Position.sol's` Market `Buy`/`Sell` functionsLogic 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: Users are incentivized to not withdraw immediately after the market is closedLogic error$0
- The Wildcat Protocol: No lender is able to exit even after the market is closedLogic error$0
- The Wildcat Protocol: Role providers cannot be EOAs as stated in the documentationLogic error$0
- The Wildcat Protocol: `FixedTermLoanHook` looks at `block.timestamp` instead of `expiry`Logic error$0
- Superposition: No related function to set `fee_protocol`Logic error$0
- Superposition: Volatile pools with higher fee structure cannot be created because of tick_spacingLogic error$0
- Superposition: Unrevoked approvals allow NFT recovery by previous ownerLogic error$0
- Superposition: Parameter misordering in fee collection function causes denial of service and fee lossLogic error$0
- Superposition: `bytes data` param is not passed to ERC721 recipient as expected by EIP-721Logic error$0
- Superposition: When performing `swap` and the swap position does not cover `swap amount`, the base price of `sqrt_price` is set incorrectlyLogic error$0
- Superposition: `swapOut` functions have invalid slippage check, causing user loss of fundsLogic error$0
- Superposition: `_onTransferReceived()` does not work as intendedLogic error$0
- Superposition: `decrPosition09293696` will not work due to incorrect function signatureLogic error$0
- Superposition: `swap_2` implementation will randomly revert due to improper check, root cause for failed test `ethers_suite_uniswap_orchestrated_uniswap_two`Logic error$0
- Superposition: Wrong liquidity formula usedLogic error$0
- Superposition: If liquidity is insufficient, users may need to pay more tokens in `swap2`Logic error$0
- Superposition: `update_emergency_council_7_D_0_C_1_C_58()` updates nft manager instead of emergency councilLogic error$0
- Karak: Slashings will always fail in some casesLogic error$0
- Phi: Unrestricted changes to token settings allow artists to alter critical featuresLogic error$0
- Phi: `PhiFactory:claim` potentially causing loss of funds if `mintFee` changed beforehandLogic error$0
- Phi: `shareBalance` bloating eventually blocks curator rewards distributionLogic error$0
- Phi: Lack of data validation when users are claiming their art allows malicious user to bypass signature/merkle hash to provide unapproved `ref_`, `artId_` and `imageURI`Logic error$0
- Phi: Refunds sent to incorrect addresses in certain casesLogic error$0
- Phi: Exposed `_removeCredIdPerAddress` & `_addCredIdPerAddress` allows anyone to cause issues to current holders as well as upcoming onesLogic error$0
- Reserve: The time available for a canceled withdrawal should not impact future unstaking processesLogic 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: Borrower is not able to compensate his lenders if he is underwaterLogic error$0
- BendDAO: User are forced to borrow again in order to unlock their NFTs from `IsolateLending.sol`Logic error$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: The bot won't be able to unstake or repay risky positions in the yield contractLogic error$0
- BendDAO: Incorrect accounting of utilization, supply/borrow rates due to vulnerable implementation in `IsolateLogic::executeIsolateLiquidate`Logic error$0
- BendDAO: Risk of mass liquidation after pool/asset pause and unpause, due to borrow interest compounding implementationLogic error$0
- BendDAO: It's impossible to retrieve collected fines from the yield staking contractLogic error$0
- BendDAO: Borrower can prevent yield position repayment and closure by the botLogic error$0
- BendDAO: Updating fee factor may create issues for the protocolLogic error$0
- BendDAO: `erc721DecreaseIsolateSupplyOnLiquidate()` missing clear `lockerAddr`Logic error$0
- Basin: For extreme ratios, `getRatiosFromPriceSwap` will return data for which is impossible to converge into a reserveLogic error$0
- BendDAO: Protocol should update interest rate after changing rate model in the configurator moduleLogic error$0
- BendDAO: Fee-on-Transfer tokens cause problems in multiple placesLogic error$0
- BendDAO: Unhandled request invalidation by the owner of Etherfi will lead to stuck debtLogic error$0
- BendDAO: `executeYieldBorrowERC20()` checking `yieldCap` is wrongLogic error$0
- BendDAO: `wrapNativeTokenInWallet()` always reverts on ArbitrumLogic error$0
- BendDAO: Users cannot unstake from YiedlETHStakingEtherfi.sol, because YieldAccount.sol is incompatible with ether.fi's WithdrawRequestNFT.solLogic error$0
- Optimism: `MIPS` - Incorrect implementation of SRAV instructionLogic error$0
- Munchables: Single plot can be occupied by multiple rentersLogic error$0
- Munchables: Failure to update dirty flag in `transferToUnoccupiedPlot` prevents reward accumulation on valid plotLogic error$0
- Munchables: Users can farm on zero-tax land if the landlord locked tokens before the LandManager deploymentLogic error$0
- Olas: StakingToken.sol doesn't properly handle FOT, rebasing tokens or those with variable which will lead to accounting issues downstreamLogic error$0
- BadgerDAO: Incorrect comparison logic in post-operation checksLogic error$0
- Gondi: Function `settleWithBuyout()` does not call `LoanManager.loanLiquidation()` during a buyoutLogic error$0
- Predy: Reallocation incorrectly sends the exceed `quoteTokens` to Market contract instead of reallocatorLogic error$0
- Predy: Liquidation incorrectly tries to transfer token from Market instead of liquidator if `remainingMargin` is negativeLogic error$0
- Predy: Possible DoS When calling `GammaTradeMarket::_removePosition` will cause user position to not be able to get liquidatedLogic error$0
- Predy: 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: `updateIRMParams` does not call `applyInterestForToken` before updating `irmParams` which leads to incorrect calculation of interest rate for subsequent trades.Logic error$0
- Panoptic: Incorrect validation during checking liquidity spreadLogic error$0
- BakerFi: All supplied WETH to Aave as a deposit by a Strategy will be irrecoverableLogic error$0
- BakerFi: Vault can be DoSLogic error$0
- Panoptic: When Burning a Tokenized Position `validate` should be done before flipping the `isLong` bits in `_validateAndForwardToAMM()`Logic error$0
- Panoptic: Wrong leg `chunkKey` calculation in `haircutPremia` functionLogic error$0
- Panoptic: `CREATE2` address collision during pool deployment allows for complete draining of the poolLogic error$0
- Panoptic: `SettleLongPremium` is incorrectly implemented: premium should be deducted instead of addedLogic error$0
- Panoptic: `_updateSettlementPostBurn()` may not correctly reduce `s_grossPremiumLast[chunkKey]`Logic error$0
- Munchables: When `LockManager.lockOnBehalf` is called from `MigrationManager`, the user's `reminder` will be set to 0, resulting in fewer received `MunchableNFTs`Logic 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: `setUnboundedKerosineVault` not called during deployment, causing reverts when querying for Kerosene value after adding it as a Kerosene vaultLogic error$0
- Arbitrum Foundation: `BOLDUpgradeAction.sol` will fail to upgrade contracts due to error in the `perform` functionLogic error$0
- Arbitrum Foundation: Adversary can make honest parties unable to retrieve their assertion stakes if the required amount is decreasedLogic error$0
- DYAD: Incorrect deployment/missing contract will break functionalityLogic error$0
- DYAD: No incentive to liquidate small positions could result in protocol going underwaterLogic error$0
- Renzo: Withdrawals can be locked forever if recipient is a contractLogic error$0
- Renzo: Withdrawals can fail due to deposits reverting in `completeQueuedWithdrawal()`Logic error$0
- Renzo: Pending withdrawals prevent safe removal of collateral assetsLogic error$0
- Lavarage: Collateral can be claimed back without repaying its corresponding loan due to insufficient instruction validationLogic error$0
- Revert Lend: An attacker can easily bypass the collateral value limit factor checksLogic error$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: `dailyDebtIncreaseLimitLeft` is not updated in `liquidate()`Logic error$0
- Revert Lend: `DailyLendIncreaseLimitLeft` and `dailyDebtIncreaseLimitLeft` are not adjusted accuratelyLogic error$0
- Revert Lend: Users can lend and borrow above allowed limitationsLogic error$0
- Revert Lend: No `minLoanSize` means liquidators will have no incentive to liquidate small positionsLogic error$0
- Revert Lend: `V3Vault` is not ERC-4626 compliantLogic 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: Wrong global lending limit check in `_deposit` functionLogic error$0
- AI Arena: Since you can reroll with a different fighterType than the NFT you own, you can reroll bypassing maxRerollsAllowed and reroll attributes based on a different fighterTypeLogic error$0
- AI Arena: Almost all rarity rank combinations cannot be, and are not uniformly, generatedLogic error$0
- AI Arena: Malicious user can stake an amount which causes zero curStakeAtRisk on a loss but equal rewardPoints to a fair user on a winLogic error$0
- AI Arena: Erroneous probability calculation in physical attributes can lead to significant issuesLogic error$0
- AI Arena: Players have complete freedom to customize the fighter NFT when calling `redeemMintPass` and can redeem fighters of types Dendroid and with rare attributesLogic error$0
- AI Arena: Burner role cannot be revokedLogic error$0
- AI Arena: Minter / Staker / Spender roles can never be revokedLogic error$0
- AI Arena: Fighter created by `mintFromMergingPool` can have arbitrary weight and elementLogic error$0
- AI Arena: DoS in `MergingPool::claimRewards` function and potential DoS in `RankedBattle::claimNRN` function if called after a significant amount of rounds passedLogic error$0
- AI Arena: Fighters cannot be minted after the initial generation due to uninitialized `numElements` mappingLogic error$0
- AI Arena: Constraints of `dailyAllowanceReplenishTime` and `allowanceRemaining` during `mint()` can be bypassed by using alias accounts & `safeTransferFrom()`Logic error$0
- AI Arena: `FighterFarm::reRoll` won't work for nft id greater than 255 due to input limited to uint8Logic error$0
- AI Arena: Non-transferable `GameItems` can be transferred with `GameItems::safeBatchTransferFrom(...)`Logic error$0
- Abracadabra Money: Tokens yeild can not be set to claimable.Logic error$0
- Abracadabra Money: Staking contract is not able to support native USDB/WETHLogic error$0
- Wise Lending: Withdrawing uncollateralized deposits is possible even though the position is in liquidation modeLogic error$0
- Wise Lending: First depositor inflation attack in `PendlePowerFarmToken`Logic error$0
- Wise Lending: `PendlePowerFarmToken:: totalLpAssetsToDistribute` may lead to temporary DOS due to price growth check being skipped during depositLogic error$0
- Wise Lending: A user can lose more value than he specifies in the spread when he enters a `PowerFarm`Logic error$0
- Wise Lending: Unchecked return value bug on `TransferHelper::_safeTransferFrom()`Logic error$0
- Wise Lending: User's attempt to deposit & withdraw reverts due to the calculation style inside `_calculateShares()`Logic error$0
- Wise Lending: Lack of update when modifying pool feeLogic error$0
- Taiko: There is no slippage check for the eth deposits processing in the `LibDepositing.processDeposits`Logic error$0
- Taiko: Proposers would choose to avoid higher tier by exploiting non-randomness of parameter used in getMinTier()Logic error$0
- Taiko: Gas issuance is inflated and will halt the chain or lead to incorrect base feeLogic error$0
- Taiko: Incorrect __Essential_init() function is used in TaikoToken making snapshooter devoid of calling snapshot()Logic error$0
- Taiko: Validity and contests bond ca be incorrectly burned for the correct and ultimately verified transitionLogic error$0
- Taiko: Users will never be able to withdraw their claimed airdrop fully in ERC20Airdrop2.sol contractLogic error$0
- Taiko: Taiko SGX Attestation - Improper validation in certchain decodingLogic error$0
- Ondo Finance: Integration issue in `ousgInstantManager` with `BUIDL` if `minUSTokens` is set by blackrockLogic error$0
- Ondo Finance: Inadequate handling of `BUIDL` redemption limit in `OUSG` instant managerLogic error$0
- Ondo Finance: The `BURNER` cannot burn tokens from accounts not KYC verified due to the check in `_beforeTokenTransfer`.Logic error$0
- Ondo Finance: Users can lose access to funds due to minimum withdrawal limitsLogic error$0
- Amphora Protocol: `Vault.claimRewards` can break if Convex changes the operatorLogic error$0
- Amphora Protocol: crvRewardsContract `getReward` can be called directly, breaking vaults `claimRewards` functionallityLogic error$0
- Salty.IO: First depositor can break staking-rewards accountingLogic error$0
- Salty.IO: First Liquidity provider can claim all initial pool rewardsLogic error$0
- Spectra: PrincipalToken is not ERC-5095 compliantLogic error$0
- PoolTogether: Funds locked due to missing transfer checkLogic error$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: Permit doesn't work with DAILogic error$0
- reNFT: Blacklisted extensions can't be disabled for rental safesLogic error$0
- reNFT: `RentPayload`'s signature can be replayedLogic error$0
- zkSync: `Mul/div` relation should not be enforced when divisor is zeroLogic error$0
- Ethereum Credit Guild: Repayers using EOA accounts can be affected if bad debt is generated when they are repaying loansLogic error$0
- Ethereum Credit Guild: LendingTerm.sol `_partialRepay()` A user cannot partial repay a loan with `0` interestLogic error$0
- Ethereum Credit Guild: Inability to offboard term twice in a 7-day period may lead to bad debt to the marketLogic error$0
- Ethereum Credit Guild: LendingTerm `debtCeiling` function uses `creditMinterBuffer` incorrectlyLogic error$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: Users staking via the `SurplusGuildMinter` can be immediately slashed when staking into a gauge that had previously incurred a lossLogic error$0
- Ethereum Credit Guild: `LendingTerm::debtCeiling()` can return wrong debt as the `min()` is evaluated incorrectlyLogic error$0
- Ethereum Credit Guild: Inability to withdraw funds for certain users due to `whenNotPaused` modifier in `RateLimitedMinter`Logic error$0
- Collective: Since art pieces' size is not limited, attacker may block AuctionHouse from creating and settling auctionsLogic error$0
- Collective: Once EntropyRateBps is set too high, can lead to denial-of-service (DoS) due to an invalid ETH amountLogic error$0
- Collective: `VerbsToken.tokenURI()` is vulnerable to JSON injection attacksLogic error$0
- Collective: positionMapping for last element in heap is not updated when extracting max elementLogic error$0
- Collective: Violation of ERC-721 Standard in VerbsToken:tokenURI ImplementationLogic error$0
- Collective: MaxHeap.sol: Already extracted tokenId may be extracted againLogic error$0
- Olas: Wrong invocation of Whirpools's updateFeesAndRewards will cause it to always revertLogic error$0
- Olas: Griefing attack on `liquidity_lockbox` withdrawals due to lack of minimum depositLogic error$0
- Olas: Permanent DOS in `liquidity_lockbox` for under $10Logic 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: 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: wLp tokens could be stolenLogic 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: If wLP is blacklisted, then user will not be able to withdraw itLogic error$0
- NextGen: Auction payout goes to `AuctionDemo` contract owner, not the token ownerLogic error$0
- NextGen: Adversary can block `claimAuction()` due to push-strategy to transfer assets to multiple biddersLogic error$0
- NextGen: On a Linear or Exponential Descending Sale Model, a user that mints on the last `block.timestamp` mints at an unexpected price.Logic error$0
- NextGen: Bidder Funds Can Become Unrecoverable Due to 1 second Overlap in `participateToAuction()` and `claimAuction()`Logic error$0
- NextGen: Auction winner can prevent payments via `safeTransferFrom` callbackLogic error$0
- NextGen: User funds sent in excess are not refundedLogic error$0
- NextGen: Unchecked return value of low-level `call()/delegatecall()`Logic error$0
- NextGen: If an airdrop happens before a mint the price could skyrocketLogic error$0
- NextGen: Permanent DoS due to non-shrinking array usage in an unbounded loopLogic error$0
- NextGen: `MinterContract::payArtist` can result in double the intended payoutLogic 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: `ODSafeManager#allowSAFE()` cannot be executed either by the proxy contract or any other address.Logic error$0
- Open Dollar: Missing debt check lets users start a debt auction of non-existent debtLogic error$0
- Open Dollar: Collateral could be transferred to an address, which is not `SAFEHandler` managed by the `SAFEManager`Logic error$0
- Open Dollar: Malicious users are able to bypass the Tax payment using making a Fake BasicActions ContractLogic error$0
- Open Dollar: Approved address can approve other addresses for an owner's safeLogic error$0
- Open Dollar: SafeHandler contract doesn't have any method to call to `ODSafeManager.allowHandler()`, lead to DOS in some functionLogic error$0
- Open Dollar: ODSafeManager.enterSystem - Transfer wrong amount of collateral, debtLogic error$0
- Open Dollar: Vault721.tokenURI does not comply with ERC721 - Metadata specificationLogic 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
- Wildcat Protocol: `collectFees()` updates delinquency wrongly as `_writeState()` is called before assets are transferredLogic error$0
- Wildcat Protocol: Removing markets from `WildcatArchController` gives lenders immunity from sanctionsLogic error$0
- Wildcat Protocol: Borrower can drain all funds of a sanctioned lenderLogic error$0
- Wildcat Protocol: `create2WithStoredInitCode()` does not revert if contract deployment failedLogic error$0
- Wildcat Protocol: When a batch of withdrawals expires, that batch is often underpaid their owed interestLogic error$0
- Wildcat Protocol: `setAnnualInterestBips()` can be abused to keep a market's reserve ratio at 90%Logic error$0
- Wildcat Protocol: Function `WildcatMarketController.setAnnualInterestBips` allows for values outside the factory rangeLogic error$0
- Wildcat Protocol: Pending withdrawal batch debt cannot be paid by the borrower until the cycle endsLogic error$0
- Wildcat Protocol: Return values of `transfer()`/`transferFrom()` not checked and unsafe usageLogic error$0
- Wildcat Protocol: Protocol markets are incompatible with rebasing tokensLogic error$0
- Centrifuge: `LiquidityPool::requestRedeemWithPermit` transaction can be front run with the different liquidity poolLogic error$0
- Centrifuge: Cached `DOMAIN_SEPARATOR` is incorrect for tranche tokens potentially breaking permit integrationsLogic error$0
- Centrifuge: ```trancheTokenAmount``` should be rounded UP when proceeding to a withdrawal or previewing a withdrawalLogic error$0
- Lybra Finance: Understatement of `poolTotalPeUSDCirculation` amounts due to incorrect accounting after function `_repay` is calledLogic error$0
- Lybra Finance: Making `_totalSupply` and `_totalShares` imbalance significantly by providing fake income leads to stealing fundLogic error$0
- Lybra Finance: Incorrect Reward Distribution Calculation in `ProtocolRewardsPool`Logic error$0
- Lybra Finance: `LybraPeUSDVaultBase.rigidRedemption` should use `getBorrowedOf` instead of `borrowed`Logic error$0
- Lybra Finance: There is no mechanism that prevents from minting less than `esLBR` maximum supply in `StakingRewardsV2`Logic error$0
- Lybra Finance: `stakerewardV2pool.withdraw()` should check the user's boost lock status.Logic 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
- 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: Fixed reward percentage for liquidators in the eUSD vault may cause a liquidation crisisLogic error$0
- Lybra Finance: If `ProtocolRewardsPool` is insufficient in EUSD, users will not be able to claim any rewardsLogic error$0
- Asymmetry Finance: sFrxEth may revert on redeeming non-zero amountLogic error$0
- Asymmetry Finance: Potential `stake()` DoS if sole safETH holder (ie: first depositor) unstakes `totalSupply` - 1Logic error$0
- Asymmetry Finance: Stuck ether when use function `stake` with empty `derivatives`(`derivativeCount` = 0)Logic error$0
- Asymmetry Finance: No slippage protection on `stake()` in SafEth.solLogic error$0
- Ethos Reserve: `_harvestCore()` roi calculation errorLogic error$0
- Biconomy: DoS of user operations and loss of user transaction fee due to insufficient gas value submission by malicious bundlerLogic error$0
- Biconomy: Doesn't Follow ERC1271 StandardLogic error$0
- Biconomy: Transaction can fail due to batchId collisionLogic error$0
- Biconomy: Arbitrary transactions possible due to insufficient signature validationLogic error$0
- Biconomy: Paymaster ETH can be drained with malicious senderLogic error$0
- Biconomy: Non-compliance with EIP-4337Logic error$0
- Biconomy: `SmartAccount.sol` is intended to be upgradable but inherits from contracts that contain storage and no gapsLogic error$0