Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
CodeHawks
Dec '24
high
high
high
high
medium
medium
medium
medium
medium
medium
Oct '24
high
high
medium
Jul '24
high
Market Disruption and Financial Loss Post-Liquidation
high
`LiquidationBranch::checkLiquidatableAccounts()` executes `for` loop with wrong values, causing array out of bounds to be recovered, the program will not work as expected
medium
An Uninitialized Variable In The `MarketConfiguration::update` Function Causes The `PrepMarket::getIndexPrice` Function To Revert
low
Trading accounts can exceed the maximum number of allowed open positions.
May '24
high
`LibChainlinkOracle::getTokenPrice` will always return instantaneuous prices
high
LibUsdOracle will compromise Beanstalk peg due to wrong price and DoS
high
LibUsdOracle returns the wrong price for Uniswap Oracle
high
`ReseedSilo#reseedSiloDeposit` does not credit the user any `roots`
high
Successful transactions are not stored, causing a replay attack on ``redeemDepositsAndInternalBalances``
high
Internal balances are never actually migrated within `L2ContractMigrationFacet`
high
L2ContractMigrationFacet doesn't increase total Stalk and Roots
high
User's stalk is overwritten instead of increased within `ReseedSilo`
high
Grown Stalk is incorrectly calculated in ReseedSilo
high
L2ContractMigrationFacet migrates incorrect amount of Stalk
high
`L2ContractMigrationFacet.addMigratedDepositsToAccount()` doesn't update some global balances during the migration.
high
Possible loss of user's balances after calling `addMigratedDepositsToAccount()`.
high
ReseedSilo doesn't update total balances of Stalk and Roots
high
`LibPipelineConvert.executePipelineConvert()` doesn't decrease Grown Stalk when BDV decreases
high
ReseedBarn.sol doesn't initialize of `s.sys.fert.recapitalized`
high
`s.sys.silo.unripeSettings` are never set after migration which breaks Unripe functionality
medium
USD prices dont work for 20 hours per day
medium
The declaration and use of `LibTractor::BLUEPRINT_TYPE_HASH` are inconsistent with the structure `struct Blueprint`, and the standard is confusing. It is recommended to unify the standard
medium
`SiloFacet::transferDeposit` does not verify if amount is 0, leading to full withdrawal DoS for any recipient
medium
LibUsdOracle is completely broken for the to-deploy L2 chain
medium
quickSort function does not work as expected, compromising the calculation of Beans per Well to be minted during a flood
medium
When migrating via `L2ContractMigrationFacet`, user is not minted roots for the newly accrued stalk
medium
`LibSilo.transferStalk()` uses incorrect formula to roundUp
medium
`L2ContractMigrationFacet.addMigratedDepositsToAccount()` forfeits "unmowed" rewards from other Silo deposits
medium
`L2ContractMigrationFacet.addMigratedDepositsToAccount()` doesn't push depositId to `depositIdList`
medium
ReseedField.sol incorrectly configures Field values because of mistake in storage layout
medium
Invariable.sol won't save Bean from exploit because of flawed entitlement calculation
medium
Attacker can spam Plots to victim to cause DOS on Plot transfer
medium
Orderers will lose their Beans after migration to L2
medium
Potential Loss of Fertilizer ERC1155 NFTs During L1 to L2 Migration.
low
The `LibWeth` hardcodes the `WETH` address which makes it incompatible on the to-deploy L2 chain
low
LibUsdOracle inverses Chainlink TWAP price which results in incorrect price
low
`BeanL1RecieverFacet#recieveL1Beans()` would never work
low
Incorrect Hardcoded Block Time Assumptions in Beanstalk's LibDibbler
low
ETH/USD 1 hour period is too large for Optimism/Base L2 Chains and too small for Arbitrum/Avalanche leading to consuming stale price data.
low
The `DepotFacet` contract uses an incorrect `PIPELINE` address.
low
Cannot configure `temperature` in ReseedField due to type mismatch
low
`ReseedBarn.init()` will run out of gas due to minting firtilizers on some L2s
low
`LibWell.getBeanTokenPriceFromTwaReserves()` incorrectly assumes that token has 18 decimals
low
`LibWell.getWellTwaUsdLiquidityFromReserves()` returns liquidity with incorrect precision
low
`LibFertilizer.beginBarnRaiseMigration()` incorrectly checks that Oracle supports such token
low
SeasonGettersFacet returns the wrong totalDeltaB
low
UsdOracle reverts on tokens which are not wstETH, WETH, Bean
Apr '24
high
Attacker can make 0 value deposit() calls to deny user from redeeming or withdrawing collateral
high
Inability to perform partial liquidations allows huge positions to accrue bad debt in the system
high
Design flaw and mismanagement in vault licensing leads to double counting in collateral ratios and positions collateralized entirely with kerosine
high
Kerosene collateral is not being moved on liquidation, exposing liquidators to loss
high
Users can get their Kerosene stuck until TVL becomes greater than Dyad's supply
medium
`VaultManagerV2.sol::burnDyad` function is missing an `isDNftOwner` modifier, allowing a user to burn another user's minted DYAD
medium
No incentive to liquidate small positions could result in protocol going underwater
medium
Value of kerosene can be manipulated to force liquidate users
medium
setUnboundedKerosineVault not called during deployment, causing reverts when querying for Kerosene value after adding it as a Kerosene vault
medium
No incentive to liquidate when CR <= 1 as asset received < dyad burned
Mar '24
Feb '24
Findings not publicly available for private contests.
Jan '24
Nov '23
medium
695.82 USDC • 2 total findings • Code4rena • T1MOH
#7
Oct '23
high
Missing debt check lets users start a debt auction of non-existent debt
high
Incorrect calculations for Surplus Auction creation cause massive surplus imbalances
medium
Unable to retrieve price information with CamelotRelayer contract
medium
Approved address can approve other addresses for an owner's safe
medium
Due to extremely short `votingDelay` and `votingPeriod`, governance is practically impossible.
medium
`ODSafeManager#allowSAFE()` cannot be executed either by the proxy contract or any other address.
Sep '23
high
Users Lose Funds and Market Functionality Breaks When Market Reachs 65k Id
medium
Possible DOS on deposit(), withdraw() and unstake() for BridgeReth, leading to user loss of funds
medium
User can create small position after exit with bid
medium
Division before multiplication results in lower `dittoMatchedShares` distributed to users
medium
Using a cached price in the critical shutdownMarket()
low
Loss of precision in `twapPriceInEther` due to division before multiplication
low
`onERC721Received()` callback is never called when new tokens are minted in Erc721Facet.sol
low
ETH cannot always be unstaked using Rocket Pool
low
Instant arbitrage opportunity through rETH and stETH price discrepancy
low
Partial filled short does not reset liquidation flag after user gets fully liquidated, meaning healthy position will still be flagged if the rest of the order gets filled.
low
Combined short record might exceed the maximum collateral ratio (CRATIO_MAX)
low
User will lose collateral in the exact case `cRatio == minimumCR`
Aug '23
high
The settle feature will be broken if attacker arbitrarily transfer collateral tokens to the PerpetualAtlanticVaultLP
high
Incorrect precision assumed from RdpxPriceOracle creates multiple issues related to value inflation/deflation
medium
Inaccurate swap amount calculation in ReLP leads to stuck tokens and lost liquidity
medium
_curveSwap: getDpxEthPrice and getEthPrice is in wrong order
medium
`sync` function in `RdpxV2Core.sol` should be called in multiple scenarios to account for the balance changes that occurs
medium
No slippage protection for bonders
medium
Change of `fundingDuration` causes "time travel" of `PerpetualAtlanticVault.nextFundingPaymentTimestamp()`
Jul '23
medium
Incorrect chainId of Base in deploy script will force redeployment
medium
Incorrect address is set as Wormhole Bridge, which breaks deploy
medium
Initial deploy won't succeed because of too high `initialMintAmount` for USDC market
medium
Proposals which intend to send native tokens to target addresses can't be executed
medium
`TemporalGovernor` can be bricked by `guardian`
Jun '23
high
Governance wrongly calculates `_quorumReached()`
high
`_voteSucceeded()` returns true when `againstVotes > forVotes` and vice versa
medium
Due to inappropriately short `votingPeriod` and `votingDelay`, it is near impossible for the governance to function correctly.
medium
Liquidation won't work when bad and safe collateral ratio are set to default values
May '23
high
Incorrect flow of adding liquidity in UlyssesRouter.sol
high
TalosBaseStrategy#init() lacks slippage protection
high
Rerange/rebalance should not use protocolFee as asset for adding liquidity
medium
Governance relies on current totalSupply of bHermes when calculate `proposalThresholdAmount` and `quorumVotesAmount`
medium
ERC4626PartnerManager.sol mints extra `partnerGovernance` tokens to itself, resulting in over supply of governance token
medium
`unstakeAndWithdraw` inside `BoostAggregator` could lose pendingRewards in certain case
medium
Wrong consideration of blockformation period causes incorrect votingPeriod and votingDelay calculations
medium
[M-01] Some functions in Talos contracts does not allow user to supply slippage and deadline, which may cause swap revert
medium
RestakeToken function is not permissionless
medium
Lack of slippage protection can lead to significant loss of user funds
medium
Deploy flow of Talos is broken
medium
UlyssesPool.sol does not match EIP4626 because of preview functions
high
ETH/USD priceFeed address is used as BTC/USD
high
Wrong decimals for DAI/ETH chainlink priceFeed is used
high
No access control in rebalancer functions in USSD.sol
high
No slippage control when performing swap in USSD.sol
high
Protocol assumes DAI is $1
medium
Chainlink's latestRoundData return stale or incorrect result
medium
StableOracle contracts will return the wrong price for asset if underlying aggregator hits minAnswer
medium
StableOracleWBTC use BTC/USD chainlink oracle to price WBTC which is problematic if WBTC depegs
medium
`BuyUSSDSellCollateral()` always sells 0 amount if need to sell part of collateral
medium
Possible DOS of USSDRebalancer due to price deviation of oracle
Apr '23
high
RubiconMarket batchOffer and batchRequote make offers as self; complete loss of funds for some types of tokens, for example WETH
high
Reward accounting is incorrect in BathBuddy contract
medium
BathBuddy contract should implement methods to pause and unpause contract
medium
Incorrect fee handling in Position.sol's Market Buy/Sell functions
medium
Incorrect calculations can occur when calling `Position._marketBuy` and `Position._marketSell` functions that do not include maker fee in `_fee`
medium
Calling `Position._marketBuy` and `Position._marketSell` functions that calculate `_fee` by dividing by `10000` can cause incorrect calculations
Mar '23