Security Researcher
I hunt bugs on-chain Lead Auditor @SecurityOak, SR @SpearbitDAO, https://t.co/LWCkCaqoY7 🏅Judge @Code4rena | DM for audits
High
Solo
Total
Medium
Solo
Total
Total Earnings
#35 All Time
Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
Jan '25
Collaborative Audit • Sherlock • berndartmueller
May '24
3,788.40 USDC • 3 total findings • Sherlock • berndartmueller
#7
high
Draw auction rewards likely exceed the available rewards, resulting in overpaying rewards or running into an `InsufficientReserve` error
medium
The RNG finish draw auction rewards are overpaid due to missing to account for the time it takes to fulfill the Witnet randomness request
medium
`DrawManager.canStartDraw` does not consider retried RNG requests when determining if a new draw auction can be started
Feb '24
high
high
high
high
high
high
high
high
high
high
medium
medium
medium
medium
medium
medium
medium
medium
Nov '23
high
Using unconfirmed UTXOs as inputs for transactions is vulnerable to griefing attacks
high
Tombstoned observer can maliciously add a duplicate observer address resulting in forfeiting voting rewards of targeted observers
high
Outbound transactions that can not be broadcasted to an external EVM chain cause a Denial of Service of all outgoing transactions to this chain
high
zEVM cross-chain messages ignore the user-specified message and prevent calling the destination contract
high
Disabling outbound transactions is ineffective and allows for Zeta token theft
high
A malicious inbound transaction can prevent subsequent events from being processed by observers
high
Fake `ZetaReceived` events cause the outbound cctx to remain pending resulting in a blocked outbound EVM transaction queue
medium
`ZetaSupplyChecker` calculation error
medium
When updating gas, if one chain fails, the others should continue to be updated instead of being skipped.
medium
An already executed InTxTracker can still be added
medium
ZRC20 Token Pause Check Bypass
medium
Incorrect genesis initialization of pending nonces
medium
Lagging median gas price when the set of observers changes
medium
Inability to reliably verify inbound transactions may result in missed inbound transactions
medium
Lack of message ordering may lead to failed transactions
medium
Inbound transactions submitted to the `InTxTracker` that contain multiple `ZetaSent` and `Deposited` events are not processed correctly by the observers resulting in a loss of funds
medium
A single malicious observer can fill the block space with `MsgGasPriceVoter` messages without proper gas compensation resulting in griefing blocks
medium
Zeta token supply checker incorrectly classifies in-transit cctxs as settled resulting in misleading checks
medium
Arbitrary destination gas limit for `CoinType_Zeta` cctxs results in paying lower gas fees
medium
Observer can halt outbound cctxs and steal funds
medium
Outbound zEVM cross-chain messages ignore the user-specified gas limit and may fail with an out-of-gas error
medium
The `Sender` of an outbound cctx originating from the zEVM is potentially set to an incorrect sender address resulting in lost assets during a refund
medium
ERC-20 deposit cctxs are refunded to the EOA instead of an intermediary contract
medium
The outbound transaction tracker only keeps track of a maximum of two different transaction hashes, preventing cctxs from being efficiently confirmed and blocking the outbound transaction queue
medium
A single malicious observer can exploit the infinite gas meter to grief ZetaChain blocks without proper gas compensation
Jul '23
high
Risk-free profits for an attacker due to outdated debt reporting during `LMPVault` deposits
high
Consecutively queueing new rewards transfers more tokens than anticipated
high
Performing the liquidation process reverts due to failing to swap the reward tokens
high
Claimed destination vault base asset rewards are potentially lost during `LMPVault` withdrawals
high
`MainRewarder` staking rewards are diluted by new stakers resulting in less rewards for existing stakers
high
Potentially overpaying for vault shares due to the lack of incorporating native ETH into the required `assets` amount
high
Destination vault debt can be selectively updated to collect fees on "profits" while ignoring the losses from other destination vaults
medium
Users are unable to withdraw from `LMPVault` if the accumulated `TOKE` rewards are below the `MIN_STAKE_AMOUNT` threshold
medium
Edge case scenario during `LMPVault` withdrawals results in the inability to withdraw
medium
Protocol fees are not collected for a while after the `LMPVault` got emptied
high
Option token receiver can steal funds by repeatedly reclaiming expired options
high
A malicious option token deployer can drain quote token funds from the `FixedStrikeOptionTeller` contract
medium
Claiming epoch rewards at the time of the options expiry will mint options that are immediately expired and thus unable to get exercised
medium
A malicious user can prevent reward accrual
medium
Depositing staking tokens at a later epoch requires claiming rewards for all epochs since the very first epoch
medium
If the `receiver` is prevented from receiving exercised proceed tokens, exercising options is not possible
medium
Funds can be stolen from the `FixedStrikeOptionTeller` contract by creating put option tokens without providing collateral
Jun '23
high
Expired signatures with outdated prices can be used to liquidate Party A's positions
high
Emergency position closing can be griefed by Party A
high
Depositing and allocating funds for Party B potentially allocates less than anticipated
medium
Liquidating a turned solvent Party A does not credit the profits to Party A
medium
Consecutive symbol price updates can be exploited to drain protocol funds
medium
Inaccurate solvency check during position opening can lead to immediate insolvency
medium
Party B liquidation can expire, causing the liquidation to be stuck
medium
Party B can grief Party A by filling the close request for a limit order with a zero amount
medium
Party B liquidations are not incentivized if the losses exceed the locked liquidation possibly resulting in not liquidating Party B and Party A not receiving the liquidation proceeds
medium
Fully opening a limit quote with down-adjusted locked values could lead to a quote value smaller than the enforced minimum
medium
Fee collector can grief the protocol by withdrawing trading fees that could still need to be returned to Party A
Mar '23
high
Entitled asset shares are not withdrawn and are lost when minting rollovers
high
Delisting a rollover queue item reorders an item and prevents the reordered item from being rolled over in the next epoch
high
Updating carousel vault rollover queue item sets the wrong index
medium
Adversary can trigger a regular end epoch for a null epoch and cause premium vault users to lose funds
medium
`Carousel.mintRollovers` potentially mints `0` shares and can grief rollover queue
medium
Null epoch prevents carousel rollover
medium
Risk-free hedge if depeg is triggered at the start of the epoch
medium
Arbitrum sequencer downtime lasting before and beyond epoch expiry prevents triggering depeg
Feb '23
high
Inability to claim collateral
high
Decreasing a position without a swap path is susceptible to slippage
high
Underestimated gas estimation for executing withdrawals leads to insufficient keeper compensation
high
The claimable collateral factor with the key `Keys.claimableCollateralFactorKey` remains unchanged and results in a claimable collateral amount of zero
medium
Depositing in a market with the same long and short tokens will revert
high
Too few `ICHI` v2 farming reward tokens transferred to the user due to incorrect decimal precision
high
Failure to withdraw Ichi vault LP tokens to the user
high
Failure to refund `ICHI` v2 farming reward tokens upon increasing farming position
high
`SoftVault` accrued interest is not refunded and stuck forever
high
A liquidator can repay the smaller debt position to fully liquidate a position and receive the full collateral
medium
The maximum size of an `ICHI` vault spell position can be arbitrarily surpassed
medium
Closing an `IchiVaultSpell` position is susceptible to slippage when swapping tokens
medium
Rebase/FoT tokens are not supported as isolated collateral
medium
The total lent amount of a bank is not decremented when a position is liquidated
Jan '23
high
Executing funded standard proposals can be prevented by a proposal slate with duplicate proposals
medium
Claiming accumulated rewards while the contract is underfunded can lead to a loss of rewards
medium
Calculating new rewards is susceptible to precision loss due to division before multiplication
medium
Claiming rewards from a future not yet existing epoch prevents claiming rewards for those epochs later on
medium
Extraordinary proposals can receive more tokens than eligible
high
Anyone can use the token spending allowance from another address to rebalance negative Perp PnL
high
Calculating the Perp short position value uses a potentially unsafe TWAP interval
medium
Redeeming all UXD tokens is not possible if some have been minted via Perp quote minting
medium
Rebalancing a negative Perp PnL via a Uniswap V3 token swap is broken due to the lack of token spending allowance
medium
Rebalancing a negative Perp PnL will fail to deposit to the vault due to decimal precision inconsistencies
medium
Fee accounting for Perp positions is incorrect
medium
Inaccurate Perp debt calculation
Nov '22
high
Non-existing revenue contract can be passed to claimRevenue to send all tokens to treasury
high
addCredit / increaseCredit cannot be called by lender first when token is ETH
high
Borrower can close a credit without repaying debt
high
Repaying a line of credit with a higher than necessary claimed revenue amount will force the borrower into liquidation
medium
Whitelisted functions aren't scoped to revenue contracts and may lead to unnoticed calls due to selector clashing
medium
Borrower/Lender excessive ETH not refunded and permanently locked in protocol
medium
Lender can reject closing a position
Oct '22
Sep '22
Aug '22
Jul '22
high
Migration can permanently fail if user specifies different lengths for `selectors` and `plugins`
high
Steal NFTs from a Vault, and ETH + Fractional tokens from users.
high
Cash-out from a successful buyout allows an attacker to drain Ether from the `Buyout` contract
medium
An attacker can DoS vault's buyout with as little as 1 wei per 4 days
medium
Delegate call in `Vault#_execute` can alter Vault's ownership
high
Token Change Can Be Frontrun, Blocking Token
medium
Use a safe transfer helper library for ERC20 transfers
medium
Discounted fee calculation is imprecise and calculates less fees than anticipated
medium
Locked splits can be updated
medium
More outstanding reserved tokens are distributed than anticipated leading to less redeemable assets and therefore loss of user funds
medium
Unhandled chainlink revert would lock all price oracle access
Jun '22
high
Fee is being deducted when Put is expired and not when it is exercised.
medium
`fillOrder()` and `exercise()` may lock Ether sent to the contract, forever
medium
Options with a small strike price will round down to 0 and can prevent assets to be withdrawn
medium
Put options are free of any fees
medium
[Denial-of-Service] Contract Owner Could Block Users From Withdrawing Their Strike
medium
Putty position tokens may be minted to non ERC721 receivers
medium
`fee` can change without the consent of users
high
Overpayment of native ETH is not refunded to buyer
high
Accumulated ETH fees of InfinityExchange cannot be retrieved
medium
Malicious governance can use `updateWethTranferGas` to steal WETH from buyers
medium
Protocol fee rate can be arbitrarily modified by the owner and the new rate will apply to all existing orders
May '22
high
First depositor can break minting of shares
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
No cap on fees can result in a DOS in BathToken.withdraw()
medium
Use `safeTransfer()`/`safeTransferFrom()` instead of `transfer()`/`transferFrom()`
medium
`RubiconMarket` buys can not be disabled if offer matching is disabled
medium
`RubiconMarket.feeTo` set to zero-address can DoS `buy` function
medium
Changing `matchingEnabled` in `RubiconMarket` breaks protocol
medium
Use `call()` instead of `transfer()` when transferring ETH in RubiconRouter
medium
Use safeTransferFrom instead of transferFrom for ERC721 transfers
medium
Owner can modify the feeRate on existing vaults and steal the strike value on exercise
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
Apr '22
Mar '22