High
Solo
Total
Medium
Solo
Total
Total Earnings
#12 All Time
Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
Feb '25
Collaborative Audit • Sherlock • bin2chen
Aug '24
high
updateExtension() lacks permission restrictions
high
Maliciously specifying a very large intent.price will result in a large gain at settlement, stealing funds
medium
settle() asyncFee is left in the KeepFactory and is not transfer to the keeper.
medium
when ReserveBase undercollateralized , Manager.orders will not be able to execute
medium
_ineligible() redemptionEligible is miscalculated
medium
cancelGroupWithSignature() lacks security checks and can maliciously cancel anyone's signature group
medium
TriggerOrder.notionalValue() Using the wrong latestPositionLocal to calculate the value causes the user to overpay fees
Jul '24
Jun '24
high
Users won't liquidate positions because the logic used to calculate the liquidator's profit is incorrect
high
When `sellCreditMarket()` is called to sell credit for a specific cash amount, the protocol might receive a lower swapping fee than expected.
medium
Credit can be sold forcibly as `forSale` setting can be ignored via Compensate
medium
Size uses wrong source to query available liquidity on Aave, resulting in borrow and lend operations being bricked upon mainnet deployment
medium
Multicall does not work as intended
medium
withdraw() users may can't withdraw underlyingBorrowToken properly
36,840.74 USDC • 9 total findings • Sherlock • bin2chen
high
verify_origin() previous_sender may be forged
medium
when a validator is kicked out of the bonded validator set ,unstake funds will remain in the contract
medium
execute_stake() without setting DistributionMsg::SetWithdrawAddress, partial reward may remain in the contract
medium
If WithdrawAddrEnabled = false, execute_claim() will fail
medium
if Slash Validator occurs, UNSTAKING_QUEUE's unstake amount will not be accurate
medium
is_permissioned() may underflow
medium
is_permissioned() It doesn't make sense to have permissions by default after Blacklisted expires.
medium
claim_batch() last_claimed_release_time is set too large when the balance is not enough
medium
execute_claim() possible loss of accuracy or even inability to retrieve funds
May '24
Findings not publicly available for private contests.
Apr '24
high
Attacker can steal all fees from SFPM in pools with ERC777 tokens.
high
`SettleLongPremium` is incorrectly implemented: premium should be deducted instead of added
medium
_updateSettlementPostBurn() may not correctly reduce s_grossPremiumLast[chunkKey]
medium
`_validatePositionList()` does not check for duplicate tokenIds, allowing attackers to bypass solvency checks
Mar '24
Feb '24
high
exerciseOptionsReceiver() Lack of Ownership Check for oTAP, Allowing Anyone to Use oTAPTokenID
high
Multiple lzCompose messages did not verify the legality of _srcChainSender
high
Unupdated totalBorrow After BigBang Liquidation
high
Unrestricted srcChainSender in USDO.executeModule()
high
SGL Liquidation Fees be Locked in Penrose
high
leverageUpReceiver() Missing Security Check for msg_.marketHelper
medium
buyCollateral() does not work properly
medium
sellCollateral() does not work properly
medium
sellCollateral() using incorrect parameters when calling getAsset
medium
sellCollateral() when sell collateral, the quantity parameter passed may too large
medium
rebalance() Permission Control Error
medium
mTOFTReceiver MSG_XCHAIN_LEND_XCHAIN_LOCK unable to execute
medium
Multiple contracts cannot be paused
medium
mTOFT when erc20==address(0) need to pay fees twice
medium
TOFT.exerciseOptionsReceiver may unable to Retrieve TapToken
medium
Balancer using safeApprove may lead to revert.
Jan '24
high
high
medium
medium
medium
high
mintViaUnderlying() minImpliedRate may be invalid
high
wfCashLogic.sol returned eth is locked in the contract
medium
_isExternalLendingUnhealthy() using stale factors
medium
recover() using the standard transfer may not be able to retrieve some tokens
medium
getOracleData() maxExternalDeposit not accurate
medium
getTargetExternalLendingAmount() when targetUtilization == 0 no check whether enough externalUnderlyingAvailableForWithdraw
medium
getTargetExternalLendingAmount() targetAmount may far less than the correct value
medium
Immediate payment of REWARD_TOKEN may block most of nToken's operations
Dec '23
Nov '23
high
Attacker can steal all fees from SFPM in pools with ERC777 tokens.
high
`SettleLongPremium` is incorrectly implemented: premium should be deducted instead of added
medium
_updateSettlementPostBurn() may not correctly reduce s_grossPremiumLast[chunkKey]
medium
`_validatePositionList()` does not check for duplicate tokenIds, allowing attackers to bypass solvency checks
902.93 USDC • 3 total findings • Code4rena • bin2chen
Oct '23
medium
MultiInvoker closableAmount the calculation logic is wrong
medium
interfaceFee Incorrectly converted uint40 when stored
medium
KeeperOracle callbacks only can set first market and user
medium
vault.claimReward() If have a market without reward token, it may cause all markets to be unable to retrieve rewards.
Sep '23
Aug '23
high
The settle feature will be broken if attacker arbitrarily transfer collateral tokens to the PerpetualAtlanticVaultLP
high
The peg stability module can be compromised by forcing lowerDepeg to revert.
high
Users can get immediate profit when deposit and redeem in `PerpetualAtlanticVaultLP`
high
`UniV3LiquidityAMO::recoverERC721` will cause `ERC721` tokens to be permanently locked in `rdpxV2Core`
medium
_curveSwap: getDpxEthPrice and getEthPrice is in wrong order
medium
reLP() mintokenAAmount the calculations are wrong.
medium
`sync` function in `RdpxV2Core.sol` should be called in multiple scenarios to account for the balance changes that occurs
medium
Change of `fundingDuration` causes "time travel" of `PerpetualAtlanticVault.nextFundingPaymentTimestamp()`
high
`rngComplete` function should only be called by `rngAuctionRelayer`
medium
Missing `deadline` param in `swapExactAmountOut()` allowing outdated slippage and allow pending transaction to be executed unexpectedly.
medium
_computeAvailable() the calculations are wrong
medium
RngRelayAuction.rngComplete() DOS attack
Jul '23
high
_claimRewards() Convex rewards may be locked in contracts
high
queueNewRewards() transferFrom number is wrong
high
updatePricingInfo() averagePrice calculations are wrong.
high
_beforeTokenTransfer() Missing call MainRewarder._updateReward
high
LMPVaultRouter duplicate transfer ETH
high
_withdraw() idleIncrease might be less
high
_performLiquidation() not working properly
medium
deposit() may overflow
high
Resetting delegation will result in user funds being lost forever
high
`Vault.mintYieldFee` FUNCTION CAN BE CALLED BY ANYONE TO MINT `Vault Shares` TO ANY RECIPIENT ADDRESS
medium
Loss of precision leads to undercollateralized
medium
Number of prize tiers always increases if just 1 canary prize is claimed
high
Collateral can be locked in BigBang contract when `debtStartPoint` is nonzero
high
Exercise option cross chain message in the (m)TapiocaOFT will always revert in the destination, losing debited funds in the source chain
high
Attacker can pass duplicated reward token addresses to steal the reward of contract `twTAP.sol`
high
Incorrect liquidation reward computation causes excess liquidator rewards to be given
high
Ability to steal user funds and increase collateral share infinitely in BigBang and Singularity
high
A user with a TapiocaOFT allowance >0 could steal all the underlying ERC20 tokens of the owner
high
Tokens can be stolen from other users who have approved Magnetar
high
twTAP.claimAndSendRewards() will claim the wrong amount for each reward token due to the use of wrong index.
high
Attacker can prevent rewards from being issued to gauges for a given epoch in TapiocaOptionBroker
medium
`totalCollateralShare` state variable not updated in `Singularity` market upon liquidation, resulting in an error on `addCollateral` with skim functionality
medium
Incorrect `eligibleAmount` for `AirdropBroker` Phase 3
medium
`extractTAP()` function can allow minting an infinite amount in one week, leading to a DoS attack in `emitForWeek()`
medium
`TapiocaOptionLiquidityProvision` causes Loss of Yield when depositing and withdrawing from Singularity - should use shares to track balances
medium
TOFT `exerciseOption` fails due to not passing `msg.value` properly
medium
`StargateStrategy#_currentBalance` calculation is incorrect and may lead to DoS
medium
oTAP::participate - Call will always revert if msg.sender is approved but not owner
medium
A portion of stargate token rewards earned by StargateStrategy are permanently locked in the contract
high
steal funds with variable decimals of payoutToken
high
reclaim() can be executed repeatedly
medium
stake() missing set lastEpochClaimed when userBalance equal 0
medium
claimRewards() If a rewards is too small, it may block other epochs
medium
receiver can prevent exercise then force OptionToken to expire
Jun '23
high
liquidatePartyA() Liquidate DOS
high
setSymbolsPrice() can use the priceSig from a long time ago
high
Liquidation missing partyNonces++
high
LibMuon Signature hash collision
high
liquidatePositionsPartyA() may underflow
medium
After the liquidation timeout, the corresponding trading is locked forever.
medium
openPosition() need notSuspended() modifier
medium
lockQuote() increaseNonce parameters do not work properly
medium
fillCloseRequest() when CANCEL_CLOSE_PENDING , missing check minAcceptableQuoteValue
high
`VaultProxy` implementation can be initialized by anyone and self-destructed
medium
Owner in VaultProxy.sol is address(0)
medium
Chainlink's `latestRoundData` may return stale or incorrect result
medium
depositETHOverTargetWeight() malicious modifications poolIdArrayIndexForExcessDeposit
medium
`updatePoolAddress` functions always reverts when updating existing poolId
medium
`pause/unpause` functionnalities not implemented in many pausable contracts
May '23
high
Incorrect flow of adding liquidity in UlyssesRouter.sol
high
`UlyssesToken` asset ID accounting error
high
redeem() beforeRedeem using the wrong owner parameter
high
withdrawProtocolFees() Possible malicious or accidental withdrawal of all rewards
high
Multiple issues with decimal scaling will cause incorrect accounting of hTokens and underlying tokens
high
setWeight() Logic error
high
Rerange/rebalance should not use protocolFee as asset for adding liquidity
medium
ERC4626PartnerManager.sol mints extra `partnerGovernance` tokens to itself, resulting in over supply of governance token
medium
`UlyssesToken.setWeights(...)` can cause user loss of assets on vault deposits/withdrawals
medium
`BribesFactory::createBribeFlywheel` can be completely blocked from creating any Flywheel by a malicious actor
medium
Ulysses omnichain - addbridgeagentfactory in rootPort is not functional
medium
Removing more gauge weight than it should be while transfering ````ERC20Gauges```` token
medium
RestakeToken function is not permissionless
medium
_decrementWeightUntilFree() Possible infinite loop
medium
updatePeriod() less mint HERMES
medium
vMaia Lack of override forfeitBoost
medium
migratePartnerVault() the first vault does not work properly
Apr '23
high
CHALLENGER_REWARD can be used to drain reserves and free mint
high
[H-06] Double-entrypoint collateral token allows position owner to withdraw underlying collateral without repaying ZCHF
high
Challenges can be frontrun with de-leveraging to cause lossses for challengers
medium
initializeClone() price calculation should round up
medium
need alternative ways for fund transfer in `end()` to prevent DoS
medium
POSITION LIMIT COULD BE FULLY REDUCED TO ZERO BY CLONES
medium
function `restructureCapTable()` in Equity.sol not functioning as expected
high
`RubiconMarket._buys` will not work for V1 offers due to the reversion in `cancel` method.
high
DOS of market operations with malicious offers
medium
A liquidated position possibly cannot be closed
medium
Incorrect calculations can occur when calling `Position._marketBuy` and `Position._marketSell` functions that do not include maker fee in `_fee`
Mar '23
high
enlistInRollover() wrong set ownerToRollOverQueueIndex
high
mintDepositInQueue() queue funds may be locked
high
mintRollovers() incorrect number to _mintShares()
high
delistInRollover() disrupt the rolloverQueue order
medium
emissionsToken may be remain in the contract
medium
getLatestPrice() possible use stale price
medium
changeTreasury() Lack of check and remove old
medium
ControllerPeggedAssetV2 should use vault's own treasury
medium
triggerEndEpoch() miss check vault.totalAssets() equals 0
medium
mintRollovers() the logic of judging whether to win may wrong
medium
rolloverQueue may lead to GAS OUT risk
Feb '23
high
Malicious seller forced break lockCapital()
high
claimUnlockedCapital() can be repeatedly claimed
high
_calculateClaimableAmount() wrong calculate the claimable amount
high
activeProtectionIndexes OUT_OF_GAS attacks
high
requestWithdrawal() lack of refresh pool cycle before get cycle index
high
user may not be able to renewProtection() properly within protectionRenewalGracePeriodInSeconds
high
malicious expiration leads to refund failure and fund lock
high
claimTiered() steal bounty
high
ClaimBounty () If any NFT has refund, it will lead to failure to claim other bounty
high
not support token: revert on Zero Value Transfers.
high
deposits OUT_OF_GAS attacks
high
block claim bounty attacks
medium
nftDepositLimit attack
medium
fundBountyToken() cannot fund token that has been added before
medium
setPayoutScheduleFixed/setPayoutSchedule() can't resize to fewer tiers
Jan '23
high
Anyone who uses same adapter have ability to pause it
high
Modifier VaultController._verifyCreatorOrOwner does not work as intented
high
BeefyAdapter() malicious vault owner can use malicious _beefyBooster to steal the adapter's token
medium
AdpaterBase.harvest should be called before deposit and withdraw
medium
AdapterBase should always use delegatecall to call the functions in the strategy
medium
Malicious Users Can Drain The Assets Of Vault. (Due to not being ERC4626 Complaint)
medium
The calculation of ````takeFees```` in ````Vault```` contract is incorrect
medium
`Vault.redeem` function does not use `syncFeeCheckpoint` modifier
medium
cool down time period is not properly respected for the `harvest` method
medium
VaultController() Missing call DeploymentController.nominateNewDependencyOwner()
medium
Anyone can reset fees to 0 value when Vault is deployed
medium
`Vault::takeFees` can be front run to minimize `accruedPerformanceFee`
high
Protocol fees can be withdrawn multiple times in `Erc20Quest`
medium
Possible scenario for Signature Replay Attack
medium
Funds can be stuck due to wrong order of operations
medium
Users may not claim Erc1155 rewards when the Quest has ended
medium
User may loose rewards if the receipt is minted after quest end time
high
Attacker can take loan for Victim
high
Lack of StrategyDetailsParam.vault validation allows the borrower to steal all the funds from the vault
high
Improper validations in Clearinghouse. possible to lock collateral NFT in contract.
high
ERC4626Cloned deposit and mint logic differ on first deposit
medium
minDepositAmount is unnecessarily high, can price out many users
medium
For a public vault, minimum deposit requirement that is enforced by `ERC4626Cloned.deposit` function can be bypassed by `ERC4626Cloned.mint` function or vice versa when share price does not equal one
medium
LienToken.transferFrom There is a possibility of malicious attack
medium
settleAuction() Check for status errors
medium
_buyoutLien() does not properly validate the liquidationInitialAsk
medium
LienToken._payment function increases users debt
Dec '22
high
MinipoolManager: node operator can avoid being slashed
high
Hijacking of node operators minipool causes loss of staked funds
high
ProtocolDAO lacks a method to take out GGP
medium
MinipoolManager: recordStakingError function does not decrease minipoolCount leading to too high GGP rewards for staker
medium
MultisigManager may not be able to add a valid Multisig
medium
State Transition: Minipools can be created using other operator's AVAX deposit via recreateMinipool
medium
Coding logic of the contract upgrading renders upgrading contracts impractical
high
Users can bypass the `maxWinPercent` limit using a partially closing
high
Not enough margin pulled or burned from user when adding to a position
medium
StopLoss/TakeProfit should be validated again for the new price in `Trading.executeLimitOrder()`
medium
Governance NFT holder, whose NFT was minted before `Trading._handleOpenFees` function is called, can lose deserved rewards after `Trading._handleOpenFees` function is called
medium
Chainlink price feed is not sufficiently validated and can return stale price
high
selfdestruct may cause the funds to be lost
high
`LPDA` price can underflow the price due to bad settings and potentially brick the contract
high
`saleReceiver` and `feeReceiver` can steal refunds after sale has ended
medium
Sale contracts can be bricked if any other minter mints a token with an id that overlaps the sale
medium
Use of `payable.transfer()` Might Render ETH Impossible to Withdraw
Nov '22
high
Malicious Users Can Drain The Assets Of Auto Compound Vault
high
fee loss in AutoPxGmx and AutoPxGlp and reward loss in AutoPxGlp by calling PirexRewards.claim(pxGmx/pxGpl, AutoPx*) directly which transfers rewards to AutoPx* pool without compound logic get executed and fee calculation logic and pxGmx wouldn't be exe
medium
Deposit Feature Of The Vault Will Break If Update To A New Platform
medium
PirexGmx#migrateReward() may cause users to lose Reward.
high
Giant pools can be drained due to weak vault authenticity check
medium
Incorrect implementation of the ETHPoolLPFactory.sol#rotateLPTokens let user stakes ETH more than maxStakingAmountPerValidator in StakingFundsVault, and DOS the stake function in LiquidStakingManager
medium
Giant pools cannot receive ETH from vaults
Oct '22
high
WithdrawProxy allows anyone to deposit/mint, resulting in malicious enlargement of shares.
high
cancelAuction() no refund of the final bid amount
high
commitToLiens() Execution always fails
high
buyoutLien() will cause the vault to fail to processEpoch()
high
Auction#reservePrice maybe less than required
medium
createBid() newDuration miscalculation
medium
new loans "max duration" is not restricted
medium
_payment() maybe overpayment
Sep '22
high
Multiple vote checkpoints per block will lead to incorrect vote accounting
medium
Delegation should not be allowed to address(0)
medium
Truncation in casting can lead to a founder receiving all the base tokens
medium
The quorum votes calculations don't take into account burned tokens
medium
A proposal can pass with 0 votes in favor at early DAO stages
medium
Index out of bounds error when properties length is more than attributes length breaks minting
Aug '22
Jul '22