High
Solo
Total
Medium
Solo
Total
$892.88K

Total Earnings
#6 All Time

119x
Payouts

18x
1st Places

7x
2nd Places

6x
3rd Places
All
Sherlock
Code4rena
Jan '25
Nov '24
Aug '24
Jul '24
high
`repayBorrowWithERC20Permit()` functions use incorrectly scaled accumulated interest value
high
UserManager's `debtWriteOff()` updates `_totalStaked` incorrectly
medium
Minimum borrow amount can be surpassed and borrower can be treated as being overdue earlier than their actual overdue time
medium
`updateLocked()` locks a rounded down value
Jun '24
high
Users won't liquidate positions because the logic used to calculate the liquidator's profit is incorrect
high
The collateral remainder cap is incorrectly calculated during liquidation
medium
Fragmentation fee is not taken if user compensates with newly created position
medium
`executeBuyCreditMarket` returns the wrong amount of cash and overestimates the amount that needs to be checked in the variable pool
medium
Credit can be sold forcibly as `forSale` setting can be ignored via Compensate
medium
Neither `sellCreditMarket()` nor `compensate()` checks whether the credit position to be sold is allowed for sale
medium
Users can not to buy/sell minimum credit allowed due to exactAmountIn condition
Mar '24
high
Rewards can be stolen from other proposals and votes by extending auction revenue period with the help of bogus proposals
high
Eligibility of cancelled proposals makes it possible for `proposalEligibilityQuorumBps` controlling actor to create multiple eligible proposals, stealing rewards from all others
medium
Rewards can be allocated for less than minimal reward period with the help of bogus proposal
Feb '24
high
TOFTOptionsReceiverModule will have the user lose the whole output TAP when requested to exercise all eligible options
high
Liquidation fees are permanently frozen on Penrose YB account
high
`totalBorrow.elastic` and `totalBorrow.base` aren't updated in BB and SGL regular liquidations
high
TOFTOptionsReceiverModule miss cross-chain transformation for deposit and lock amounts
high
Malicious MarketHelper contract can be used in TOFTMarketReceiverModule's leverageUpReceiver and marketRemoveCollateralReceiver functions
medium
BBLeverage's and SGLLeverage's `buyCollateral()` remove the required funds from the target twice
medium
Allowances is double spent in BBLeverage's and SGLLeverage's `sellCollateral()`
medium
Operation residual is lost for the user of BBLeverage's and SGLLeverage's `sellCollateral()`
medium
Leverage operations of ETH market change debt, but do not accrue linked BB markets, corrupting their interest rate accrual logic
medium
mTOFT's fees cannot be paid on native wrapping
medium
TOFTOptionsReceiverModule's and UsdoOptionReceiverModule's exerciseOptionsReceiver can lose the option payment provided
medium
SGL and BB repay do not round up both on allowance spending and elastic amount
medium
Leverage borrowing with stale rate can atomically create bad debt with no prior positions and no investment
medium
Balancer rebalance operation is permanently blocked whenever owner assigns `rebalancer` role to some other address
medium
Unpausing with accrue timestamp reset can remove the accrual between last recorded accrue time and pausing time
Oct '23
Jun '23
high
Settlement can be called when auction period isn't concluded, allowing HPB depositors to game bad debt settlements
high
LUP is not recalculated after adding kicking penalty to pool's debt, so kick() updates the pool state with an outdated LUP
high
Debt write off can be prohibited by HPB depositor by continuously allocating settlement blocking dust deposits in the higher buckets
high
Pool's kickWithDeposit misses liquidation debt check
high
kickWithDeposit removes the deposit without HTP pool state check
high
moveQuoteToken updates pool state using intermediary LUP, biasing pool's interest rate calculations
medium
Due to excessive HTP check moveQuoteToken can be unavailable for big deposits
medium
Limit index isn't checked in repayDebt, so user control is void
medium
LenderActions's moveQuoteToken can create a total debt undercoverage
May '23
high
Delegation rewards are not counted toward granting fund
high
PositionManager's moveLiquidity can set wrong deposit time and permanently freeze LP funds moved
high
PositionManager's moveLiquidity can freeze funds by removing destination index even when the move was partial
medium
It is possible to steal the unallocated part of every delegation period budget
Apr '23
Findings not publicly available for private contests.
Mar '23
Feb '23
high
Vault's withdrawFromProtocol incorrectly scales amount to be withdrawn
high
Vault rewards withdrawal swapping is subject to sandwich attack
high
Reward part of yield is permanently frozen for Providers other than Compound
high
CompoundProvider's balanceUnderlying and calcShares outputs are scaled incorrectly
high
IdleProvider's balanceUnderlying and calcShares outputs are misscaled by up to 10^12
high
Vault can lose rewards due to lack of precision
high
YearnProvider freezes yearn tokens on partial withdrawal
high
Any tokens can be stolen via withdraw from YearnProvider and AaveProvider balances
high
Vault's savedTotalUnderlying tracks withdrawn funds incorrectly
medium
There is no price conversion between vault token and provider underlying token amounts in withdrawFromProtocol
medium
minimumPull Vault parameter cannot be adjusted
medium
Funds can be frozen on protocol blacklisting
medium
IdleProvider overstates balanceUnderlying() and understates calcShares()
medium
Vault withdraws always more from CompoundProvider and understates its holdings as stale exchangeRateStored value is used for valuation
medium
Rebalancing can become unavailable when Aave pool has liquidity shortage
medium
Beta pools performance isn't accounted for in player rewards
medium
If Connext don't use all allowance and token employs approval race protection the cross chain functionality can become stuck
medium
Current period profit can be extracted from the Vault by front running state change before exchange rate recalculation
medium
Native funds sent with pushVaultAmounts and sendFundsToVault can be lost
medium
Rebalancing breaks and can corrupt the accounting if amountToProtocol or amountToChain turn negative
high
Staker can perform rewards withdrawal every overdueBlocks less 1 and have zero frozenCoinAge
high
Staker can manipulate lockedCoinAge and earn rewards in excess of the allowed maximum
high
UserManager's cancelVouchInternal breaks up voucher accounting on voucher removal
medium
Market adapter removal corrupts withdraw sequence
Jan '23
high
Remaining collateral used by ERC721Pool is missed in Auctions take and bucketTake return structures
high
ERC721Pool's mergeOrRemoveCollateral allows to remove collateral while auction is clearable
high
removeCollateral miss bankrupcy logic and can make future LPs sharing losses with the current ones
high
scaledQuoteTokenAmount isn't updated to be collateral sell value in the quote token constraint case of _calculateTakeFlowsAndBondChange
high
RewardsManager doesn't delete old bucket snapshot info on unstaking
high
ERC721Pool's take will proceed with truncated collateral amount and full debt when borrower's collateral is fractional
medium
Interest rates can be raised above the market as a griefing, disabling the pool
medium
Flashloan end result isn't controlled
medium
Deposits are eliminated before currently unclaimed reserves when there is no reserve auction
medium
Settled collateral of a borrower aren't available for lenders until borrower's debt is fully cleared
medium
ERC721Pool taker callback misreports quote funds whenever there was collateral amount rounding
medium
If borrower or kicker got blacklisted by asset contract their collateral or bond funds can be permanently frozen with the pool
Dec '22
Findings not publicly available for private contests.
Nov '22
high
setMinUSDC and setMinCrab can be front-run to bloat deposit and withdraw arrays
high
Netting and withdraw auction can be frozen permanently
high
External checkOrder can be used to invalidate any order, preventing the auction
high
debtToMint incorrectly treats feeAdjustment decimals
medium
Precision is lost in depositAuction and withdrawAuction user amount due calculations
Oct '22
high
Yield, Swivel, Element, APWine and Sense lend() are subject to reentracy resulting in Illuminate PT over-mint
high
There are no Illuminate PT transfers from the owner in ERC5095's withdraw and redeem before maturity
high
No returning of premium if there is no swap to PT
high
Sense redeem is unavailable and funds are frozen for underlyings whose decimals are smaller than the corresponding IBT decimals
high
External PT redeem functions can be reentered to double count the received underlying funds
high
Unlimited mint of Illuminate PTs is possible whenever any market is uninitialized and unpaused
medium
Slippage control is rendered void by misusing asset amount to be sold as a slippage base
medium
Converter cannot be changed in Redeemer
high
repayBorrow is inaccessible by overdue borrowers
high
Stakers will lose their rewards as updateLocked() updates only the first active vouches until there is a prepayment
high
repayBorrow calls wrong frozen info update for overdue repayments
high
UNION rewards issuance can be maximized without providing credit
high
Staker rewards can be gathered with maximal multiplier no matter how borrowers are overdue
medium
Stakers can have their funds locked for an extended period not related to the performance of their borrowers
medium
Vouchers and vouchees indices become corrupted by UserManager's cancelVouch
medium
Maximal approvals remain for the AssetManager's adapters and tokens after removal
medium
It's impossible to writing off any vouch fully for an outside actor
medium
Partial withdrawals by AssetManager lead to user funds freeze
medium
Priority withdrawal sequence array will grow infinitely over time
Sep '22
high
ERC721Votes's delegation disables NFT transfers and burning
high
`ERC721Votes`: Token owners can double voting power through self delegation
medium
NFT owner can block token burning and transfer by delegating to zero address
medium
Proposals can be bricked and Auctions stalled by bad settings
medium
Index out of bounds error when properties length is more than attributes length breaks minting
Aug '22
Jul '22
high
Division rounding can make fraction-price lower than intended (down to zero)
high
Migration::withdrawContribution falsely assumes that user should get exactly his original contribution back
high
Malicious User Could Burn The Assets After A Successful Migration
medium
Use of `payable.transfer()` may lock user funds
medium
Migration total supply reduction can be used to remove minority shareholders
Jun '22
high
Unable to redeem from Notional
high
Able to mint any amount of PT
high
Funds may be stuck when `redeeming` for Illuminate
high
Illuminate PT redeeming allows for burning from other accounts
high
[H-05] Not minting iPTs for lenders in several lend functions
medium
Principal types in Illuminate and Yield lending are mixed up
medium
Sandwich attacks are possible as there is no slippage control option in Marketplace and in Lender yield swaps
May '22
high
User rewards stop accruing after any _writeCheckpoint calling action
high
VotingEscrow's merge and withdraw aren't available for approved users
medium
Malicious user can populate `rewards` array with tokens of their interest reaching limits of `MAX_REWARD_TOKENS`
medium
Rewards aren't updated before user's balance change in Gauge's withdrawToken
medium
Gauge set can be front run if bribe and gauge constructors aren't run atomically
medium
registerAsset misuse can permanently disable TransmuterBuffer and break the system
medium
TransmuterBuffer's setAlchemist will freeze deposited funds
medium
TransmuterBuffer's _alchemistWithdraw use hard coded slippage that can lead to user losses
medium
New gALCX token denomination can be depressed by the first depositor
medium
Alchemist can mint `AlTokens` above their assigned ceiling by calling `lowerHasMinted()`
medium
EthAssetManager and ThreePoolAssetManager don't control Meta tokens decimals
medium
YearnTokenAdapter's wrap can become stuck as it uses one step approval for an arbitrary underlying
high
SpeedBumpPriceGate: Excess ether did not return to the user
medium
PermissionlessBasicPoolFactory's withdraw can become frozen on zero reward token transfers
medium
safeTransferFrom is recommended instead of transfer (1)
medium
amount requires to be updated to contract balance increase (1)
medium
ERC20 tokens with different decimals than 18 leads to loss of funds
Apr '22
Mar '22
medium
WithdrawFacet's withdraw calls native payable.transfer, which can be unusable for DiamondStorage owner contract
medium
Should prevent users from sending more native tokens in the `startBridgeTokensViaCBridge` function
medium
DexManagerFacet: batchRemoveDex() removes first dex only
medium
cBridge integration fails to send native tokens
medium
ERC20 bridging functions do not revert on non-zero msg.value
medium
Anyone can get swaps for free given certain conditions in `swap`.
medium
`msg.value` is Sent Multipletimes When Performing a Swap
high
[WP-H4] Deleting `nft Info` can cause users' `nft.unpaidRewards` to be permanently erased
high
[WP-H17] Users will lose a majority or even all of the rewards when the amount of total shares is too large, due to precision loss
medium
[WP-H23] Improper `tokenGasPrice` design can overcharge user for the gas cost by a huge margin
Feb '22
high
denial fo service
medium
Assets sent from MarginAccount to InsuranceFund will be locked forever
medium
Blocking of the VUSD withdrawals is possible if the reserve token doesn't support zero value transfers
medium
ClearingHouse margin calculations will break up if an AMM returning non-6 decimals positions be white listed
medium
Liquidations can be run on the bogus Oracle prices
medium
Basis points constant BPS_MAX is used as minimal fee amount requirement
medium
Collect modules can fail on zero amount transfers if treasury fee is set to zero
medium
Zero collection module can be whitelisted and set to a post, which will then revert all collects and mirrors with PublicationDoesNotExist
high
Repeated Calls to Shelter.withdraw Can Drain All Funds in Shelter
medium
StakingRewards.setRewardsDuration allows setting near zero or enormous rewardsDuration, which breaks reward logic
medium
ConvexStakingWrapper deposits and withdraws will frequently be disabled if a token that doesn't allow zero value transfers will be added as a reward one
Jan '22
Dec '21
high
Covering impermanent loss allows profiting off asymmetric liquidity provision at expense of reserve holdings
high
Mixing different types of LP shares can lead to losses for Synth holders
high
Using single total native reserve variable for synth and non-synth reserves of VaderPoolV2 can lead to losses for synth holders
high
LPs of VaderPoolV2 can manipulate pool reserves to extract funds from the reserve.
high
A vault can be locked from MarketplaceZap and StakingZap
medium
NFTXSimpleFeeDistributor._sendForReceiver doesn't return success if receiver is not a contract
medium
NFTXVaultFactoryUpgradeable implementation can be replaced in production breaking the system
medium
NFTXStakingZap and NFTXMarketplaceZap's transferFromERC721 transfer Cryptokitties to the wrong address
medium
transfer return value is ignored
Nov '21
high
recoverTokens doesn't work when isSale is true
high
Reward token not correctly recovered
high
Wrong calculation of excess depositToken allows stream creator to retrieve `depositTokenFlashloanFeeAmount`, which may cause fund loss to users
medium
Any arbitraryCall gathered airdrop can be stolen with recoverTokens
high
Covering impermanent loss allows profiting off asymmetric liquidity provision at expense of reserve holdings
high
Mixing different types of LP shares can lead to losses for Synth holders
high
Using single total native reserve variable for synth and non-synth reserves of VaderPoolV2 can lead to losses for synth holders
high
LPs of VaderPoolV2 can manipulate pool reserves to extract funds from the reserve.
Oct '21