Security Researcher
Aerospace engineer 🚀🚀 turned security researcher 👨💻 Full portfolio: https://bit.ly/carrotsmuggler-profile 📋
High
Total
Medium
Solo
Total
Total Earnings
#85 All Time
Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
CodeHawks
Jan '25
high
high
high
high
high
high
high
Dec '24
Nov '24
high
Stable swap pools don't properly handle assets with different decimals, forcing LPs to receive wrong shares
high
Logical error in `validate_fees_are_paid` can cause a DoS or allow users to bypass fees if `denom_creation_fee` includes multiple coins including `pool_creation_fee` and the user attempts to pay all fees using only `pool_creation_fee`
high
Protocol allows creating broken tricrypto CPMM pools
high
Multi-token stableswap pools allow 0 liquidity for tokens, creating bricked pools
high
Stableswap pool can be skewed free of fees
high
Block gas limit can be hit due to loop depth
high
Attackers can force the rewards to be stuck in the contract with malicious `x/tokenfactory` denoms
high
Incorrect `slippage_tolerance` handling in stableswap `provide_liquidty` function
high
Farms can be created to start in past epochs
high
Stableswap does disjoint swaps, breaking the underlying invariant
medium
Single sided liquidity can't be used to lock LP tokens in the farm manager
medium
`withdraw_liquidity` lacks slippage protection
medium
User is unable to claim their reward for the expanded epochs if farm is expanded
Oct '24
Jul '24
Jun '24
medium
Findings not publicly available for private contests.
May '24
high
Malicious User can call `lockOnBehalf` repeatedly extend a users `unlockTime`, removing their ability to withdraw previously locked tokens
high
Invalid validation allows users to unlock early
medium
Missing disapproval check in `LockManager.sol::approveUSDPrice` allows simultaneous approval and disapproval of a price proposal
Apr '24
high
Attacker can make 0 value deposit() calls to deny user from redeeming or withdrawing collateral
high
Users can get their Kerosene stuck until TVL becomes greater than Dyad's supply
high
Flash loan protection mechanism can be bypassed via self-liquidations
high
Unable to withdraw Kerosene from `vaultmanagerv2::withdraw` as it expects a `vault.oracle()` method which is missing in Kerosene vaults
medium
`VaultManagerV2.sol::burnDyad` function is missing an `isDNftOwner` modifier, allowing a user to burn another user's minted DYAD
medium
Attacker can frontrun to prevent vaults from being removed from the dNFT owner's position
medium
Value of kerosene can be manipulated to force liquidate users
medium
Incorrect deployment / missing contract will break functionality
medium
setUnboundedKerosineVault not called during deployment, causing reverts when querying for Kerosene value after adding it as a Kerosene vault
medium
Liquidation bonus logic is wrong
Mar '24
high
`transfer_share_and_rewards` can be used to transfer out shares without transferring reward debt due to rounding.
high
Early user can break pool via inflation attack due to no minimum liquidity check in the incentive contract
medium
Storage can be bloated with low liquidtiy positions
medium
Incentive accumulation can be sandwiched with additional shares to gain advantage over long-term depositors
Feb '24
medium
Malicious liquidity provider can put pool into highly manipulatable state
medium
[H02] No `safe_withdrawal` option in `withdraw_protocol_liquidity` function in omnipool can be abused by frontrunners to cause losses to the admin when removing liquidity
medium
[M02] Complete liquidity removals fail from stableswap pools
medium
[M09] No slippage check in `remove_liquidity` function in omnipool can lead to slippage losses during liquidity withdrawal.
Findings not publicly available for private contests.
Jan '24
Dec '23
high
Looping over unbounded `pendingStakes` array can lead to permanent DoS and frozen funds
medium
Missing deadline check allow pending transactions to be maliciously executed
medium
Fees are hardcoded to 3000 in ExactInputSingleParams
medium
Divergence in the pricing method for collateral within the `calculateMinimumAmountOut()` may result in vaults transitioning into an uncollateralized state after executing swaps.
low
Anyone with TST tokens can monitor the mempool and frontrun mint/burn functions to get EUROs rewards without even staking.
low
Attackers can mint vaults to a victim to gas grief them
high
Users staking via the `SurplusGuildMinter` can be immediately slashed when staking into a gauge that had previously incurred a loss
medium
There is no way to liquidate a position if it breaches maxDebtPerCollateralToken value creating bad debt.
medium
PnL system can be broken by large users intentionally or unintentionally.
medium
`totalBorrowedCredit` can revert, breaking gauges.
medium
LendingTerm.sol#_partialRepay() A user cannot partial repay a loan with 0 interest
medium
LendingTerm debtCeiling function uses creditMinterBuffer incorrectly
medium
Malicious borrower can decrease Guild holders reward
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`
medium
_curveSwap: getDpxEthPrice and getEthPrice is in wrong order
medium
reLP() mintokenAAmount the calculations are wrong.
medium
User can avoid paying high premium price by correctly timing his bond call
high
The same signature can be used in different `distribution` implementation causing that the caller who owns the signature, can distribute on unauthorized implementations
low
If a winner is blacklisted on any of the tokens they can't receive their funds
low
DAI Tokens at Risk Due to Lack of address(0) Check in distribute
Jul '23
63.27 USDC • 1 total finding • CodeHawks • carrotsmuggler
#35
286.68 USDC • 2 total findings • CodeHawks • carrotsmuggler
#22
high
Incorrect idle value accounting in `LMPVault.sol` leads to lost tokens.
high
Users can steal reward tokens due to bad update of rewardDebt in `LMPVault.sol`.
medium
`LMPVaultRegistry` removed vaults cannot be added again since `_vaultsByType` mapping is not cleared
medium
OOG / unexpected reverts due to incorrect usage of staticcall.
medium
Slashing during `LSTCalculatorBase.sol` deployment can show bad apr for months
high
[HD05] Magnetar contract has no approval checking
high
[HE02] `twTAP.sol`: Reward tokens stored in index 0 can be stolen
high
[HF05] `BaseTOFT.sol`: `removeCollateral` can be used to manipulate other user's positions and steal tokens due to absent approval check.
high
[HF06] `BaseTOFT.sol`: `retrieveFromStrategy` can be used to manipulate other user's positions due to absent approval check.
high
[HF08] `BaseTOFTLeverageModule.sol`: `leverageDownInternal` tries to burn tokens from wrong address
high
Collateral can be locked in BigBang contract when `debtStartPoint` is nonzero
high
TOFT and USDO Modules Can Be Selfdestructed
high
Incorrect formula used in function `Market.computeClosingFactor()`
high
Refund mechanism for failed cross-chain transactions does not work
high
Incorrect liquidation reward computation causes excess liquidator rewards to be given
high
`_liquidateUser()` should not re-use the same minimum swap amount out for multiple liquidation
high
`LidoEthStrategy._currentBalance` is subject to price manipulation, allows overborrowing and liquidations
high
Usage of `BalancerStrategy.updateCache` will cause single sided Loss, discount to Depositor and to OverBorrow from Singularity
high
A user with a TapiocaOFT allowance >0 could steal all the underlying ERC20 tokens of the owner
high
Potential 99.5% loss in `emergencyWithdraw()` of two Yieldbox strategies
high
Attacker can prevent rewards from being issued to gauges for a given epoch in TapiocaOptionBroker
high
[HB02] `BalancerStrategy.sol`: `_withdraw` withdraws insufficient tokens
high
[HB10] `AaveStrategy.sol`: Changing swapper breaks the contract
medium
[HC07] `SGLLiquidation`: Liquidations will fail if `liquidationAddress` is set
medium
[MC01] Market liquidations can revert due to arithmetic underflow
medium
[HF07] `BaseTOFTMarketModule.sol`: `removeCollateral` removes collateral from the wrong account
medium
a4185aaf2a0a953dd8ea2e7f62a58087c4cd5680bfbe8c3a749efef847af3c3b - Sent Privately
medium
all deposit and withdraw function in Convex and Curve nativeLP Strategy, apply slippage on internal pricing; which call real-time on chain price from Curve directly and subject to MEV
medium
Swapper contract isn't validated for cross-chain leverage operations
medium
[HB09] `emergencyWithdraw` on all strategy contracts useless without a pause mechanism
medium
[MB01] Inadvised hardcoding of pool address in `AaveStrategy.sol`
Jun '23
Findings not publicly available for private contests.
May '23
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
high
DOS of market operations with malicious offers
high
Some offers can't be cancelled
medium
Incorrect fee handling in Position.sol's Market Buy/Sell functions
medium
Calling `ExpiringMarket.stop` and `ExpiringMarket.isClosed` functions cannot pause any functionlities of the market
Mar '23
high
An attacker can manipulate the preDepositvePrice to steal from other users.
high
Staking, unstaking and rebalanceToWeight can be sandwiched (Mainly rETH deposit )
high
Reth.sol: Withdrawals are unreliable and depend on excess RocketDepositPool balance which can brick the whole protocol
high
`WstEth` derivative assumes a ~1=1 peg of stETH to ETH
high
Users can fail to unstake and lose their deserved ETH because malfunctioning or untrusted derivative cannot be removed
Jan '23
Dec '22
high
`LPDA` price can underflow the price due to bad settings and potentially brick the contract
medium
Editions should be checked if they are actually deployed from the legitimate Escher721Factory
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
Sep '22
high
Incorrect handling of pricefeed.decimals()
high
Users who deposit in one vault can lose all deposits and receive nothing when counterparty vault has no deposits
medium
User fund lost because they can't withdraw() their funds before epoch startTime and they have to stuck in positions that become unprofitable even when epoch is not started