Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
Jan '25
medium
medium
Oct '24
high
high
high
high
high
medium
Sep '24
medium
medium
medium
Nov '23
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
Jan '23
Jun '22
May '22
Apr '22
high
StakedCitadel depositors can be attacked by the first depositor with depressing of vault token denomination
medium
Owner can steal input tokens
medium
[WP-H3] `saleRecipient` can rug buyers
medium
New vest reset `unlockBegin` of existing vest without removing vested amount
medium
KnightingRound tokenOutPrice changes
Mar '22
high
Wrong formula when add fee `incentivePool` can lead to loss of funds.
high
Can deposit native token for free and steal funds
medium
[WP-H23] Improper `tokenGasPrice` design can overcharge user for the gas cost by a huge margin
medium
`LiquidityProviders`: Setting new LP token will break contract
medium
`LiquidityProviders`: Setting new liquidity pool will break contract
medium
`sharesToTokenAmount`: Division by zero
medium
Unsupported tokens cannot be withdrawn
medium
Owners have absolute control over protocol
medium
Incompatibility With Rebasing/Deflationary/Inflationary token
Feb '22
high
Reentrancy in `MessageProxyForSchain` leads to replay attacks
medium
NFT owner can change tokenURI
medium
Not compatible with Rebasing/Deflationary/Inflationary tokens
medium
[WP-H1] Transactions can be replayed when a connectedChain is removed and then reconnected
medium
TokenManagerERC20.sol uses transferFrom() instead of safeTransferFrom()
high
ERC4626 mint uses wrong `amount`
medium
ERC4626 does not work with fee-on-transfer tokens
medium
`ERC4626RouterBase.withdraw` should use a **max** shares out check
medium
Slurp can be frontrun with fee increase
medium
[WP-M2] Wrong implementation of `TurboSafe.sol#less()` may cause boosted record value in TurboMaster bigger than actual lead to `BoostCapForVault` and `BoostCapForCollateral` to be permanently occupied
high
StakedCitadel depositors can be attacked by the first depositor with depressing of vault token denomination
medium
Owner can steal input tokens
medium
[WP-H3] `saleRecipient` can rug buyers
medium
New vest reset `unlockBegin` of existing vest without removing vested amount
medium
KnightingRound tokenOutPrice changes
high
Shelter `claimed` mapping is set with `_to` address and not `msg.sender`
high
`ConvexStakingWrapper._calcRewardIntegral()` Can Be Manipulated To Steal Tokens From Other Pools
high
[WP-H8] `ConvexStakingWrapper.sol#_calcRewardIntegral` Wrong implementation can disrupt rewards calculation and distribution
high
Wrong reward token calculation in MasterChef contract
high
Repeated Calls to Shelter.withdraw Can Drain All Funds in Shelter
medium
Fee-on-transfer token donations in `Shelter` break withdrawals
medium
`StakingRewards` reward rate can be dragged out and diluted
medium
[WP-H16] `MasterChef.sol` A `depositor` can deposit an arbitrary amount without no cost
medium
[WP-H29] `StakingRewards.sol` `recoverERC20()` can be used as a backdoor by the `owner` to retrieve `rewardsToken`
Jan '22
high
DAO proposals can be executed by anyone due to vulnerable TimelockController
high
`CompoundToNotionalV2.notionalCallback` ERC20 return values not checked
high
Access restrictions on `CompoundToNotionalV2.notionalCallback` can be bypassed
high
Access restrictions on `NotionalV1ToNotionalV2.notionalCallback` can be bypassed
high
`TokenHandler.safeTransferOut` does not work on non-standard compliant tokens like USDT
high
`TokenHandler.safeTransferIn` does not work on non-standard compliant tokens like USDT
high
Liquidity token value can be manipulated
high
Treasury cannot claim COMP tokens & COMP tokens are stuck
medium
Allowance checks not correctly implemented
medium
`CompoundToNotionalV2.enableToken` ERC20 missing return value check
medium
nTokenERC20Proxy emits events even when not success
medium
`TokenHandler.setToken` ERC20 missing return value check
medium
Missing validation on latestRoundData
medium
`sNOTE.sol#_mintFromAssets()` Lack of slippage control
medium
Usage of deprecated ChainLink API in `EIP1271Wallet`
Dec '21
high
Wrong liquidity units calculation
high
Swap token can be traded as fake base token
high
`getAddedAmount` can return wrong results
high
4 Synths can be minted with fake base token
high
Missing access restriction on `lockUnits/unlockUnits`
high
Wrong slippage protection on Token -> Token trades
high
Anyone can curate pools and steal rewards
high
Anyone can list anchors / curate tokens
high
Wrong `calcAsymmetricShare` calculation
high
Tokens can be stolen through `transferTo`
high
Transfer fee is burned on wrong accounts
high
Vault rewards can be gamed
high
Vault rewards last claim time not always initialized
high
Vault Weight accounting is wrong for withdrawals
high
Proposals can be cancelled
high
`VaderRouter._swap` performs wrong swap
high
`VaderRouter.calculateOutGivenIn` calculates wrong swap
high
TWAPOracle might register with wrong token order
high
Minting and burning synths exposes users to unlimited slippage
high
All user assets which are approved to VaderPoolV2 may be stolen
high
`VaderPoolV2` minting synths & fungibles can be frontrun
high
Vader TWAP averages wrong
medium
Init function can be called by everyone
medium
`flashProof` is not flash-proof
medium
Interest debt is capped after a year
medium
Canceled proposals can still be executed
medium
Completed proposals can be voted on and executed again
medium
Handle transfers of different ERC20 tokens
medium
Governor's veto protection can be exploited
medium
Vests can be denied
medium
`TWAPOracle.getRate` does not scale the ratio
medium
Unclear `TwapOracle.consult` algorithm
high
Missing overflow check in `flashLoan`
high
`distribute` DoS on missing `receiveRewards` implementation
high
`getRandomTokenIdFromFund` yields wrong probabilities for ERC1155
high
A vault can be locked from MarketplaceZap and StakingZap
medium
Unbounded iteration in `NFTXEligiblityManager.distribute` over `_feeReceivers`
medium
Manager can grief with fees
medium
Tokens can get stuck in `NFTXMintRequestEligibility`
medium
Randomization of NFTs returned in redeem/swap operations can be brute-forced
medium
Rewards can be stolen
medium
Low-level call return value not checked
medium
transfer return value is ignored
high
Yearn token <> shares conversion decimal issue
high
Aave's share tokens are rebasing breaking current strategy code
high
SavingsAccount withdrawAll and switchStrategy can freeze user funds by ignoring possible strategy liquidity issues
medium
Extension voting threshold check needs to rerun on each transfer
Nov '21
medium
Frontrunning in UniswapHandler calls to UniswapV2Router
medium
Wrong permissions on `reassignGlobalAdmin`
medium
Bonding doesn't work with fee-on transfer tokens
medium
`_getFirstSample` returns wrong sample if count < sampleMemory
medium
`UniswapHandler.maltMarketPrice` returns wrong decimals
medium
Slippage checks when adding liquidity are too strict
high
`Controller.setCap` sets wrong vault balance
high
`Vault.withdraw` mixes normalized and standard amounts
high
`Vault.balance()` mixes normalized and standard amounts
high
Vault treats all tokens exactly the same that creates (huge) arbitrage opportunities.
high
An attacker can steal funds from multi-token vaults
medium
wrong YAXIS estimates
medium
`YAxisVotePower.balanceOf` can be manipulated
medium
ERC20 return values not checked
medium
`Vault.withdraw` sometimes burns too many shares
medium
token -> vault mapping can be overwritten
medium
VaultHelper deposits don't work with fee-on transfer tokens
medium
`Controller.inCaseStrategyGetStuck` does not update balance
high
Wrong liquidity units calculation
high
Swap token can be traded as fake base token
high
`getAddedAmount` can return wrong results
high
4 Synths can be minted with fake base token
high
Missing access restriction on `lockUnits/unlockUnits`
high
Wrong slippage protection on Token -> Token trades
high
Anyone can curate pools and steal rewards
high
Anyone can list anchors / curate tokens
high
Wrong `calcAsymmetricShare` calculation
high
Tokens can be stolen through `transferTo`
high
Transfer fee is burned on wrong accounts
high
Vault rewards can be gamed
high
Vault rewards last claim time not always initialized
high
Vault Weight accounting is wrong for withdrawals
high
Proposals can be cancelled
high
`VaderRouter._swap` performs wrong swap
high
`VaderRouter.calculateOutGivenIn` calculates wrong swap
high
TWAPOracle might register with wrong token order
high
Minting and burning synths exposes users to unlimited slippage
high
All user assets which are approved to VaderPoolV2 may be stolen
high
`VaderPoolV2` minting synths & fungibles can be frontrun
high
Vader TWAP averages wrong
medium
Init function can be called by everyone
medium
`flashProof` is not flash-proof
medium
Interest debt is capped after a year
medium
Canceled proposals can still be executed
medium
Completed proposals can be voted on and executed again
medium
Handle transfers of different ERC20 tokens
medium
Governor's veto protection can be exploited
medium
Vests can be denied
medium
`TWAPOracle.getRate` does not scale the ratio
medium
Unclear `TwapOracle.consult` algorithm
high
Locked funds are debited twice from user during tokenization leading to fund loss
high
`ERC20ConvictionScore`'s `governanceDelta` should be subtracted when user is not a governor anymore
high
`ERC20ConvictionScore._updateConvictionScore` uses stale credit score for `governanceDelta`
high
`Withdrawable.withdraw` does not decrease `pendingWithdrawals`
high
Incorrect type conversion in the contract `ABC` makes users unable to burn FSD tokens
high
Anyone Can Arbitrarily Call `FSDVesting.updateVestedTokens()`
high
Beneficiary cant get `fairSideConviction` NFT unless they only claim once, and only after it's fully vested
high
ERC20ConvictionScore._writeCheckpoint` does not write to storage on same block
medium
Conviction totals not updated during tokenization
medium
`ERC20ConvictionScore` allows transfers to special TOTAL_GOVERNANCE_SCORE address
medium
`ERC20ConvictionScore.acquireConviction` implements wrong governance checks
medium
Should check return data from Chainlink aggregators
Oct '21
medium
liquidation factor < collateral factor for Sigma type
medium
Debt accrual is path-dependant and inaccurate
medium
Changing engine.nft contract breaks vaults
medium
UniswapV2/SushiwapLPAdapter update the wrong token
medium
UniswapV2TokenAdapter does not support Sushiswap-only assets
medium
regerralFeePool is vulnerable to MEV searcher
medium
Unchecked ERC20 transfer calls
medium
Chainlink's `latestRoundData` might return stale or incorrect results
high
Insurance slippage reimbursement can be used to steal insurance fund
high
Wrong price scale for `GasOracle`
medium
No check transferFrom() return value
medium
Use of deprecated Chainlink API
medium
Deposits don't work with fee-on transfer tokens
medium
`uncommit` sends tokens to the wrong user
medium
Wrong keeper reward computation
Sep '21
high
Wrong inequality when adding/removing liquidity in current price range
high
`ConcentratedLiquidityPoolManager`'s incentives can be stolen
high
Unsafe cast in ConcentratedLiquidityPool burn leads to attack
high
Burning does not update reserves
high
Wrong usage of `positionId` in `ConcentratedLiquidityPoolManager`
medium
ConcentratedLiquidityPoolHelper: getTickState() might run out of gas
medium
Cannot claim reward
medium
Incentive should check that it hasn't started yet
medium
`TridentNFT.permit` should always check `recoveredAddress != 0`
high
Reward computation is wrong
high
`LendingPair.liquidateAccount` does not accrue and update cumulativeInterestRate
high
`LendingPair.liquidateAccount` fails if tokens are lent out
medium
Total LP supply & total debt accrual is wrong
medium
safeTransferFrom in TransferHelper is not safeTransferFrom
medium
Chainlink - Use latestRoundData instead latestAnswer to run more validations
medium
`LendingPair.withdrawUniPosition` should accrue debt first
medium
Supply part of the accrued debt can be stolen
medium
Use of deprecated Chainlink API
high
`HybridPool`'s reserve is converted to "amount" twice
high
Flash swap call back prior to transferring tokens in indexPool
high
Index Pool always swap to Zero
high
Unsafe cast in IndexPool mint leads to attack
high
IndexPool initial LP supply computation is wrong
high
`ConstantProductPool.burnSingle` swap amount computations should use balance
medium
Router's `complexPath` percentagePaths don't work as expected
medium
`_depositToBentoBox` sometimes uses both ETH and WETH
medium
`withdrawFromWETH` always reverts
medium
`HybridPool`'s `flashSwap` sends entire fee to `barFeeTo`
high
`Controller.setCap` sets wrong vault balance
high
`Vault.withdraw` mixes normalized and standard amounts
high
`Vault.balance()` mixes normalized and standard amounts
high
Vault treats all tokens exactly the same that creates (huge) arbitrage opportunities.
high
An attacker can steal funds from multi-token vaults
medium
wrong YAXIS estimates
medium
`YAxisVotePower.balanceOf` can be manipulated
medium
ERC20 return values not checked
medium
`Vault.withdraw` sometimes burns too many shares
medium
token -> vault mapping can be overwritten
medium
VaultHelper deposits don't work with fee-on transfer tokens
medium
`Controller.inCaseStrategyGetStuck` does not update balance
Aug '21
high
DAO proposals can be executed by anyone due to vulnerable TimelockController
high
`CompoundToNotionalV2.notionalCallback` ERC20 return values not checked
high
Access restrictions on `CompoundToNotionalV2.notionalCallback` can be bypassed
high
Access restrictions on `NotionalV1ToNotionalV2.notionalCallback` can be bypassed
high
`TokenHandler.safeTransferOut` does not work on non-standard compliant tokens like USDT
high
`TokenHandler.safeTransferIn` does not work on non-standard compliant tokens like USDT
high
Liquidity token value can be manipulated
high
Treasury cannot claim COMP tokens & COMP tokens are stuck
medium
Allowance checks not correctly implemented
medium
`CompoundToNotionalV2.enableToken` ERC20 missing return value check
medium
nTokenERC20Proxy emits events even when not success
medium
`TokenHandler.setToken` ERC20 missing return value check
medium
Missing validation on latestRoundData
medium
`sNOTE.sol#_mintFromAssets()` Lack of slippage control
medium
Usage of deprecated ChainLink API in `EIP1271Wallet`
high
Unchecked ERC20 transfers can cause lock up
high
anyone can call function sponsor
medium
Market-specific pause is not checked for sponsor
medium
Deposits can be denied by abusing `maxContractBalance`
medium
`RCNftHubL2.safeTransferFrom` not accoring to spec
medium
Parameter updates not propagated
medium
Deposits don't work with fee-on transfer tokens
Jul '21
high
Members lose SPARTA tokens in removeLiquiditySingle()
high
SynthVault rewards can be gamed
high
SynthVault withdraw forfeits rewards
high
Missing slippage checks
high
Dividend reward can be gamed
high
Pool.sol & Synth.sol: Failing Max Value Allowance
high
Result of transfer / transferFrom not checked
medium
Pools can be created without initial liquidity
medium
Pool: approveAndCall sets unnecessary approval
medium
Synth: approveAndCall sets unnecessary approval
medium
SynthVault deposit lockup bypass
medium
Missleading onlyDAO modifiers
medium
BondVault `BASE` incentive can be gamed
medium
Block usage of addCuratedPool
high
Reward computation is wrong
high
`LendingPair.liquidateAccount` does not accrue and update cumulativeInterestRate
high
`LendingPair.liquidateAccount` fails if tokens are lent out
medium
Total LP supply & total debt accrual is wrong
medium
safeTransferFrom in TransferHelper is not safeTransferFrom
medium
Chainlink - Use latestRoundData instead latestAnswer to run more validations
medium
`LendingPair.withdrawUniPosition` should accrue debt first
medium
Supply part of the accrued debt can be stolen
medium
Use of deprecated Chainlink API
Jun '21
high
Insurance slippage reimbursement can be used to steal insurance fund
high
Wrong price scale for `GasOracle`
medium
No check transferFrom() return value
medium
Use of deprecated Chainlink API
medium
Deposits don't work with fee-on transfer tokens
medium
`uncommit` sends tokens to the wrong user
medium
Wrong keeper reward computation
high
BadgerYieldSource balanceOfToken share calculation seems wrong
high
`YearnV2YieldSource` wrong subtraction in withdraw
high
withdraw timelock can be circumvented
medium
Return values of ERC20 `transfer` and `transferFrom` are unchecked
medium
SafeMath not completely used in yield source contracts
medium
`YieldSourcePrizePool_canAwardExternal` does not work
high
Unchecked ERC20 transfers can cause lock up
high
anyone can call function sponsor
medium
Market-specific pause is not checked for sponsor
medium
Deposits can be denied by abusing `maxContractBalance`
medium
`RCNftHubL2.safeTransferFrom` not accoring to spec
medium
Parameter updates not propagated
medium
Deposits don't work with fee-on transfer tokens
May '21
high
Locked funds are debited twice from user during tokenization leading to fund loss
high
`ERC20ConvictionScore`'s `governanceDelta` should be subtracted when user is not a governor anymore
high
`ERC20ConvictionScore._updateConvictionScore` uses stale credit score for `governanceDelta`
high
`Withdrawable.withdraw` does not decrease `pendingWithdrawals`
high
Incorrect type conversion in the contract `ABC` makes users unable to burn FSD tokens
high
Anyone Can Arbitrarily Call `FSDVesting.updateVestedTokens()`
high
Beneficiary cant get `fairSideConviction` NFT unless they only claim once, and only after it's fully vested
high
ERC20ConvictionScore._writeCheckpoint` does not write to storage on same block
medium
Conviction totals not updated during tokenization
medium
`ERC20ConvictionScore` allows transfers to special TOTAL_GOVERNANCE_SCORE address
medium
`ERC20ConvictionScore.acquireConviction` implements wrong governance checks
medium
Should check return data from Chainlink aggregators
high
Missing overflow check in `flashLoan`
high
`distribute` DoS on missing `receiveRewards` implementation
high
`getRandomTokenIdFromFund` yields wrong probabilities for ERC1155
high
A vault can be locked from MarketplaceZap and StakingZap
medium
Unbounded iteration in `NFTXEligiblityManager.distribute` over `_feeReceivers`
medium
Manager can grief with fees
medium
Tokens can get stuck in `NFTXMintRequestEligibility`
medium
Randomization of NFTs returned in redeem/swap operations can be brute-forced
medium
Rewards can be stolen
medium
Low-level call return value not checked
medium
transfer return value is ignored
Apr '21
high
Wrong liquidity units calculation
high
Swap token can be traded as fake base token
high
`getAddedAmount` can return wrong results
high
4 Synths can be minted with fake base token
high
Missing access restriction on `lockUnits/unlockUnits`
high
Wrong slippage protection on Token -> Token trades
high
Anyone can curate pools and steal rewards
high
Anyone can list anchors / curate tokens
high
Wrong `calcAsymmetricShare` calculation
high
Tokens can be stolen through `transferTo`
high
Transfer fee is burned on wrong accounts
high
Vault rewards can be gamed
high
Vault rewards last claim time not always initialized
high
Vault Weight accounting is wrong for withdrawals
high
Proposals can be cancelled
high
`VaderRouter._swap` performs wrong swap
high
`VaderRouter.calculateOutGivenIn` calculates wrong swap
high
TWAPOracle might register with wrong token order
high
Minting and burning synths exposes users to unlimited slippage
high
All user assets which are approved to VaderPoolV2 may be stolen
high
`VaderPoolV2` minting synths & fungibles can be frontrun
high
Vader TWAP averages wrong
medium
Init function can be called by everyone
medium
`flashProof` is not flash-proof
medium
Interest debt is capped after a year
medium
Canceled proposals can still be executed
medium
Completed proposals can be voted on and executed again
medium
Handle transfers of different ERC20 tokens
medium
Governor's veto protection can be exploited
medium
Vests can be denied
medium
`TWAPOracle.getRate` does not scale the ratio
medium
Unclear `TwapOracle.consult` algorithm
Feb '21