Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Jul '24
Apr '24
Mar '24
Feb '24
high
Two Pyth prices can be used in the same transaction to attack the LP pools
high
Whale LPs can make the admin's risk control parameters ineffective
medium
SpotHedgeBaseMaker uses the wrong oracle for non-evm/non-erc20 markets
medium
Attackers can create positions that have no incentive to be liquidated
medium
Price band caps apply to decreasing orders, but not to liquidations
medium
Withdrawal caps can be bypassed by opening positions against the SpotHedgeBaseMaker
medium
Attackers can sandwich their own trades up to the price bands
medium
No slippage control on maker LP `deposit()`/`withdraw()`
medium
Reservation price does not take into account the size of the order
medium
Borrow fees can be arbitrarily increased without the maker providing any value
Jan '24
Dec '23
Nov '23
Jul '23
May '23
Apr '23
high
Pool amount adjustments for collateral decreases aren't undone if swaps are successful
high
Swaps associated with position orders will use the wrong price
high
Limit swap orders can be used to get a free look into the future
high
`initialCollateralDeltaAmount` is incorrectly interpreted as a USD value when calculating estimated remaining collateral
medium
Stop-loss orders do not become marketable orders
medium
Users can get impact pool discounts while also increasing the virtual impact pool skew
medium
Virtual swap balances don't take into account token prices
medium
Virtual swap impacts can be bypassed by swapping through markets where only one of the collateral tokens has virtual inventory
Feb '23
high
Limit orders can be used to get a free look into the future
high
Pool value calculation uses wrong portion of the borrowing fees
high
Accounting breaks if end market appears multiple times in swap path
high
Fee receiver is given twice the amount of borrow fees it's owed
high
Collateral cannot be claimed due to inverted comparison condition
high
Collateral cannot be claimed because there is no mechanism for the config keeper to change the claimable factor
high
User-supplied slippage for decrease orders is ignored
high
Malicious revert reasons with faked lengths can disrupt order execution
high
Limit orders are broken when there are price gaps
high
Keepers can be forced to waste gas with long revert messages
high
ADL operations do not have any slippage protection
high
Tracking of the latest ADL block use the wrong block number on Arbitrum
medium
Users that have to claim collateral more than once for a time slot, may get the wrong total amount
medium
Collateral tokens that cannot be automatically swapped to the PnL token, cannot have slippage applied to them
medium
Virtual impacts can be trivially bypassed via structuring
medium
Fee receiver does not get paid when collateral is enough to cover the funding fee, during liquidation
medium
Market orders lose submitted prices if markets are temporarily disabled
medium
Missing checks for whether Arbitrum Sequencer is active
medium
Oracles are vulnerable to cross-chain replay attacks
medium
Missing checks for whether a position is still an ADL candidate
medium
PnL is incorrectly counted as collateral when determining whether to close positions automatically
medium
Trades in blocks where the bid or ask drops to zero will be priced using the previous block's price
medium
Positions cannot be liquidated once the oracle prices are zero
medium
Position fees are still assessed even if the ability to decrease positions is disabled
medium
Global position-fee-related state not updated until _after_ liquidation checks are done
medium
Slippage is not respected if PnL swap associated with a decrease order fails
medium
Limit orders are unnecessarily delayed by a block
medium
Malicious order keepers can trigger the cancellation of any order, with old blocks
medium
Single-sided deposits that are auto-adjusted may have their collateral value cut in half
medium
Orders with single-sided deposits that are auto-adjusted, always revert
medium
Orders with single-sided deposits that are auto-adjusted, always revert part 2
medium
When underlying collateral tokens are paused, orders can't be canceled
medium
Positions can still be liquidated even if orders to prevent it can't execute
medium
Insufficient funding fee rounding protection
medium
Unnecessary loss of precision
medium
Gas spikes after outages may prevent order execution
medium
Insufficient oracle validation
medium
`EmptyFeedPrice` will cause orders to be canceled
medium
Delayed orders won't use correct prices
medium
Negative prices will cause old orders to be canceled
medium
Liquidation shouldn't be used to close positions that were fully-collateralized prior to collateral requirement changes
medium
A single precision value may not work for both the min and max prices
medium
Order creation does not ensure the market is enabled
Jan '23
Dec '22
high
Inflation of ggAVAX share price by first depositor
high
Hijacking of node operators minipool causes loss of staked funds
medium
Users may not be able to redeem their shares due to underflow
medium
wrong reward distribution between early and late depositors because of the late syncRewards() call in the cycle, syncReward() logic should be executed in each withdraw or deposits (without reverting)
Findings not publicly available for private contests.
Nov '22
high
Anyone can prevent themselves from being liquidated as long as they hold one of the supported NFTs
medium
During oracle outages or feeder outages/disagreement, the `ParaSpaceFallbackOracle` is not used
medium
Interactions with AMMs do not use deadlines for operations
medium
Centralization risk: admin can with rug the project by removing asset and price manipulation on oracle.
Oct '22
high
Illuminate PTs can be used to mint other Illuminate PTs
high
APWine PT redemptions can be blocked forever
high
Illuminate redemptions don't account for protocol pauses/temporary blocklistings
high
Illuminate's PT doesn't respect users' slippage specifications
high
Sense PTs can never be redeemed
high
Users can mint free Illuminate PTs if underlying decimals don't match external PTs
high
`IAPWineRouter` can be used to lock all protocol fees
medium
ERC777 transfer hooks can be used to bypass fees for markets that support Swivel
medium
The Pendle version of `lend()` uses the wrong function for swapping fee-on-transfer tokens
medium
Notional PT redemptions do not use flash-resistant prices
medium
Sense PT redemptions do not allow for known loss scenarios
medium
Fee-on-transfer underlyings can be used to mint Illuminate PTs without fees
medium
Wrong Illuminate PT allowance checks lead to loss of principal
medium
Holders of worthless external PTs can stick other Illuminate PT holders with bad debts
medium
Tempus lending only works with unlimited slippage
medium
There can only ever be one market with USDT as the underlying
Sep '22
medium
Token amounts over `type(uint128).max` are lost forever
medium
No support for fee-on-transfer tokens
medium
`payable().transfer()` is used to transfer Eth
medium
Signature malleability not protected against
medium
Nonces not used in signed data
medium
Cross-chain replay attacks are possible with `changeRecipientAddress()`
medium
NFTs may be lost due to non-safe transfers
Aug '22
Jul '22
high
ORACLE DATA FEED CAN BE OUTDATED YET USED ANYWAYS WHICH WILL IMPACT ON PAYMENT LOGIC
medium
Juicebox project owner can create a honeypot to cause grief
medium
Lack of check on `mustStartAtOrAfter`
medium
Use a safe transfer helper library for ERC20 transfers
medium
Code credits fee-on-transfer tokens for amount stated, not amount transferred
medium
processFees() may fail due to exceed gas limit
Jun '22
medium
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
medium
Put option sellers can prevent exercise by specifying zero amounts, or non-existant tokens
medium
`fillOrder()` and `exercise()` may lock Ether sent to the contract, forever
medium
Unbounded loops may cause `exercise()`s and `withdraw()`s to fail
medium
Options with a small strike price will round down to 0 and can prevent assets to be withdrawn
medium
Putty position tokens may be minted to non ERC721 receivers
May '22
high
RubiconRouter _swap does not pass whole amount to RubiconMarket
high
RubiconRouter: Offers created through offerWithETH() can be cancelled by anyone
high
RubiconRouter.swapEntireBalance() doesn't handle the slippage check properly
medium
USDT is not supported because of approval mechanism
medium
Inconsistent Order Book Accounting When Working With Transfer-On-Fee or Deflationary Tokens
medium
RubiconRouter: Excess ether did not return to the user
medium
Admin rug vectors
medium
Use `safeTransfer()`/`safeTransferFrom()` instead of `transfer()`/`transferFrom()`
medium
RubiconRouter maxSellAllAmount does not trasnfer user's fund into its address, causing calls to always revert
medium
Wrong DOMAIN_SEPARATOR
medium
Use `call()` instead of `transfer()` when transferring ETH in RubiconRouter
high
hard-coded slippage may freeze user funds during market turbulence
high
The check for value transfer success is made after the return statement in _withdrawFromYieldPool of LidoVault
medium
`processYield()` and `distributeYield()` may run out of gas and revert due to long list of extra rewards/yields
high
[WP-H0] Fake balances can be created for not-yet-existing ERC20 tokens, which allows attackers to set traps to steal funds from future users
medium
Owner can modify the feeRate on existing vaults and steal the strike value on exercise
medium
Owner can set the feeRate to be greater than 100% and cause all future calls to `exercise` to revert
medium
Vaults steal rebasing tokens' rewards
medium
Vault is Not Compatible with Fee Tokens and Vaults with Such Tokens Could Be Exploited
medium
User's may accidentally overpay in `buyOption()` and the excess will be paid to the vault creator
high
MerkleVesting withdrawal does not verify that tokens were transferred successfully
high
SpeedBumpPriceGate: Excess ether did not return to the user
medium
Rebasing tokens go to the pool owner, or remain locked in the various contracts
medium
Unbounded loop in `withdraw()` may cause rewards to be locked in the contract
medium
Pool owners can prevent the payment of taxes
medium
Pool owners can prevent withdrawals of specific receipts
medium
Merkle-tree-related contracts vulnerable to cross-chain-replay attacks
medium
amount requires to be updated to contract balance increase (1)
medium
ERC20 tokens with different decimals than 18 leads to loss of funds
medium
Owner of a pool may prevent any taxes being withdrawn
Apr '22
high
Customers cannot be `topUp()`ed a second time
medium
Chainlink's latestRoundData might return stale or incorrect results
medium
Lack of `safeApprove(0)` prevents some registrations, and the changing of stakers and LP tokens
medium
`call()` should be used instead of `transfer()` on an `address payable`
Mar '22
Feb '22
Jan '22