https://sherlock-files.ams3.digitaloceanspaces.com/profile_images/c75b4f65-db95-442d-90fb-434dfe6923e3.jpg

cmichel

Christoph Michel

See https://cmichel.io

Contact Me

High

223

Total

Medium

288

Total

$1.54M

Total Earnings

#1 All Time

100x

Payouts

gold

33x

1st Places

silver

19x

2nd Places

bronze

12x

3rd Places

All

Sherlock

Code4rena

Cantina

Jan '25

napier-v2

napier-v2

16,814.79 USDC • 2 total findings • Cantina • cmichel

silver

medium

Finding not yet public.

medium

Finding not yet public.

Oct '24

tensor-monorepo

tensor-monorepo

10,582.35 USDC • 2 total findings • Cantina • cmichel

#5

high

Finding not yet public.

high

Finding not yet public.

Omni Network

Omni Network

69,835.69 USDC • 4 total findings • Cantina • cmichel

#6

high

Finding not yet public.

high

Finding not yet public.

high

Finding not yet public.

medium

Finding not yet public.

Sep '24

uniswap-v4

uniswap-v4

29,757.18 USDC • 3 total findings • Cantina • cmichel

bronze

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

Nov '23

metamorpho-and-periphery

metamorpho-and-periphery

60,008.61 USDC • 11 total findings • Cantina • cmichel

gold

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

morpho-blue

morpho-blue

28,788.87 USDC • 6 total findings • Cantina • cmichel

gold

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

Jan '23

Optimism

Optimism

11,425.56 USDC • 1 total finding • Sherlock • cmichel

#14

medium

Withdrawal transactions can get stuck if output root is reproposed

Jun '22

Connext Amarok contest

Connext Amarok contest

195.02 USDC • Code4rena • cmichel

#46

May '22

OpenSea Seaport contest

OpenSea Seaport contest

132,893.58 USDC • 3 total findings • Code4rena • cmichel

bronze

high

Truncation in `OrderValidator` can lead to resetting the fill and selling more tokens

medium

Wrong items length assertion in basic order

medium

Merkle Tree criteria can be resolved by wrong tokenIDs

Apr '22

Badger Citadel contest

Badger Citadel contest

5,807.18 USDC • 5 total findings • Code4rena • cmichel

bronze

high

StakedCitadel depositors can be attacked by the first depositor with depressing of vault token denomination

medium

Owner can steal input tokens

medium

[WP-H3] `saleRecipient` can rug buyers

medium

New vest reset `unlockBegin` of existing vest without removing vested amount

medium

KnightingRound tokenOutPrice changes

JPEG'd contest

JPEG'd contest

17,759.44 USDC • 4 total findings • Code4rena • cmichel

gold

high

yVault: First depositor can break minting of shares

high

Setting new controller can break YVaultLPFarming

high

Reentrancy issue in `yVault.deposit`

medium

`setDebtInterestApr` should accrue debt first

Duality Focus contest

Duality Focus contest

7,191.81 USDC • 2 total findings • Code4rena • cmichel

silver

medium

Undercollateralized loans possible

medium

Dysfunctional `CToken._acceptAdmin` due to lack of function to assign `pendingAdmin`

Backed Protocol contest

Backed Protocol contest

2,966.75 USDC • 3 total findings • Code4rena • cmichel

bronze

high

Can force borrower to pay huge interest

medium

Borrowers lose funds if they call `repayAndCloseLoan` instead of `closeLoan`

medium

Might not get desired min loan amount if `_originationFeeRate` changes

Mar '22

Volt Protocol contest

Volt Protocol contest

42,069.4 USDC • 5 total findings • Code4rena • cmichel

gold

high

Oracle price does not compound

medium

`OracleRef` assumes backup oracle uses the same normalizer as main oracle

medium

Updating rate limit for addresses restores their entire buffer amount

medium

Setting new buffer does not reduce current buffer to cap

medium

Div by 0

prePO contest

prePO contest

4,453.58 USDC • 3 total findings • Code4rena • cmichel

silver

high

First depositor can break minting of shares

high

Withdrawal delay can be circumvented

medium

`getSharesForAmount` returns wrong value when `totalAssets == 0`

Biconomy Hyphen 2.0 contest

Biconomy Hyphen 2.0 contest

8,636.76 USDT • 9 total findings • Code4rena • cmichel

silver

high

Wrong formula when add fee `incentivePool` can lead to loss of funds.

high

Can deposit native token for free and steal funds

medium

[WP-H23] Improper `tokenGasPrice` design can overcharge user for the gas cost by a huge margin

medium

`LiquidityProviders`: Setting new LP token will break contract

medium

`LiquidityProviders`: Setting new liquidity pool will break contract

medium

`sharesToTokenAmount`: Division by zero

medium

Unsupported tokens cannot be withdrawn

medium

Owners have absolute control over protocol

medium

Incompatibility With Rebasing/Deflationary/Inflationary token

Feb '22

Anchor contest

Anchor contest

34,330.99 UST • 6 total findings • Code4rena • cmichel

gold

high

Spend limit on owner can be bypassed

medium

`bEth` Rewards May Be Depleted By Flashloans or Whales

medium

Unbonding validator random selection can be predicted

medium

Sandwich attack on astroport sweep

medium

Staking tokens can be stolen

medium

Simple interest calculation is not exact

Foundation contest

Foundation contest

10,603.8 USDC • 5 total findings • Code4rena • cmichel

bronze

medium

Missing receiver validation in `withdrawFrom`

medium

`LockedBalance` library should drop parameters to 96/32 bits

medium

`MAX_ROYALTY_RECIPIENTS_INDEX` set too low

medium

Private sale spoofing

medium

EIP-712 signatures can be re-used in private sales

JPYC contest

JPYC contest

2,065.92 USDC • Code4rena • cmichel

#4

PoolTogether TWAB Delegator contest

PoolTogether TWAB Delegator contest

7,650 USDC • 1 total finding • Code4rena • cmichel

silver

medium

`permitAndMulticall()` May Be Used to Steal Funds Or as a Denial Of Service if `_from` Is Not The Message Sender

SKALE contest

SKALE contest

31,523.27 USDC • 5 total findings • Code4rena • cmichel

gold

high

Reentrancy in `MessageProxyForSchain` leads to replay attacks

medium

NFT owner can change tokenURI

medium

Not compatible with Rebasing/Deflationary/Inflationary tokens

medium

[WP-H1] Transactions can be replayed when a connectedChain is removed and then reconnected

medium

TokenManagerERC20.sol uses transferFrom() instead of safeTransferFrom()

Hubble contest

Hubble contest

7,480.73 USDC • 4 total findings • Code4rena • cmichel

silver

high

denial fo service

high

InsuranceFund depositors can be priced out & deposits can be stolen

medium

`Oracle.getUnderlyingPrice` could have wrong decimals

medium

`settleFunding` will exceed block gas with more markets and activity

Tribe Turbo contest

Tribe Turbo contest

16,665.73 USDC • 5 total findings • Code4rena • cmichel

gold

high

ERC4626 mint uses wrong `amount`

medium

ERC4626 does not work with fee-on-transfer tokens

medium

`ERC4626RouterBase.withdraw` should use a **max** shares out check

medium

Slurp can be frontrun with fee increase

medium

[WP-M2] Wrong implementation of `TurboSafe.sol#less()` may cause boosted record value in TurboMaster bigger than actual lead to `BoostCapForVault` and `BoostCapForCollateral` to be permanently occupied

Redacted Cartel contest

Redacted Cartel contest

2,044.19 USDC • 4 total findings • Code4rena • cmichel

#5

medium

Distributions must not match actual bribes

medium

Wrong slippage check

medium

SafeERC20.sol is imported but not used in the transferBribes() function

medium

[WP-H0] `DEFAULT_ADMIN_ROLE` of `BribeVault` can steal tokens from users' wallets

Aave Lens contest

Aave Lens contest

31,816.01 USDC • 6 total findings • Code4rena • cmichel

gold

medium

Cashback on referral

medium

Approvals not cleared when transferring profile

medium

Profile creation can be frontrun

medium

Name squatting

medium

Ineffective Whitelist

medium

Basis points constant BPS_MAX is used as minimal fee amount requirement

Nested Finance contest

Nested Finance contest

75.57 USDC • Code4rena • cmichel

#19

Badger Citadel contest

Badger Citadel contest

1,989.93 USDC • 5 total findings • Code4rena • cmichel

bronze

high

StakedCitadel depositors can be attacked by the first depositor with depressing of vault token denomination

medium

Owner can steal input tokens

medium

[WP-H3] `saleRecipient` can rug buyers

medium

New vest reset `unlockBegin` of existing vest without removing vested amount

medium

KnightingRound tokenOutPrice changes

Concur Finance contest

Concur Finance contest

5,370.92 USDC • 9 total findings • Code4rena • cmichel

bronze

high

Shelter `claimed` mapping is set with `_to` address and not `msg.sender`

high

`ConvexStakingWrapper._calcRewardIntegral()` Can Be Manipulated To Steal Tokens From Other Pools

high

[WP-H8] `ConvexStakingWrapper.sol#_calcRewardIntegral` Wrong implementation can disrupt rewards calculation and distribution

high

Wrong reward token calculation in MasterChef contract

high

Repeated Calls to Shelter.withdraw Can Drain All Funds in Shelter

medium

Fee-on-transfer token donations in `Shelter` break withdrawals

medium

`StakingRewards` reward rate can be dragged out and diluted

medium

[WP-H16] `MasterChef.sol` A `depositor` can deposit an arbitrary amount without no cost

medium

[WP-H29] `StakingRewards.sol` `recoverERC20()` can be used as a backdoor by the `owner` to retrieve `rewardsToken`

Jan '22

Notional contest

Notional contest

8,144.36 USDC • 15 total findings • Code4rena • cmichel

bronze

high

DAO proposals can be executed by anyone due to vulnerable TimelockController

high

`CompoundToNotionalV2.notionalCallback` ERC20 return values not checked

high

Access restrictions on `CompoundToNotionalV2.notionalCallback` can be bypassed

high

Access restrictions on `NotionalV1ToNotionalV2.notionalCallback` can be bypassed

high

`TokenHandler.safeTransferOut` does not work on non-standard compliant tokens like USDT

high

`TokenHandler.safeTransferIn` does not work on non-standard compliant tokens like USDT

high

Liquidity token value can be manipulated

high

Treasury cannot claim COMP tokens & COMP tokens are stuck

medium

Allowance checks not correctly implemented

medium

`CompoundToNotionalV2.enableToken` ERC20 missing return value check

medium

nTokenERC20Proxy emits events even when not success

medium

`TokenHandler.setToken` ERC20 missing return value check

medium

Missing validation on latestRoundData

medium

`sNOTE.sol#_mintFromAssets()` Lack of slippage control

medium

Usage of deprecated ChainLink API in `EIP1271Wallet`

OpenLeverage contest

OpenLeverage contest

1,627.6 USDT • Code4rena • cmichel

#10

Behodler contest

Behodler contest

17.33 USDC • Code4rena • cmichel

#30

Trader Joe contest

Trader Joe contest

11,555.94 USDT • 5 total findings • Code4rena • cmichel

gold

high

Wrong token allocation computation for token decimals != 18 if floor price not reached

high

Users can lose value in emergency state

medium

Pair creation can be denied

medium

ERC20 return values not checked

medium

Uninitialized `RocketJoeStaking.lastRewardTimestamp` can inflate `rJoe` supply

ElasticSwap contest

ElasticSwap contest

202.8 USDC • Code4rena • cmichel

#12

InsureDAO contest

InsureDAO contest

3,932.87 tokens) • 3 total findings • Code4rena • cmichel

#5

high

Initial pool deposit can be stolen

high

backdoor in `withdrawRedundant`

medium

[WP-M17] `Vault.sol` Tokens with fee on transfer are not supported

Sandclock contest

Sandclock contest

2,470.87 USDC • 4 total findings • Code4rena • cmichel

#9

high

deposit() function is open to reentrancy attacks

high

Withdrawers can get more value returned than expected with reentrant call

high

Vaults with non-UST underlying asset vulnerable to flash loan attack on curve pool

medium

unsponsor, claimYield and withdraw might fail unexpectadly

XDEFI contest

XDEFI contest

939.38 USDC • 2 total findings • Code4rena • cmichel

#4

high

The reentrancy vulnerability in _safeMint can allow an attacker to steal all rewards

medium

`_safeMint` Will Fail Due To An Edge Case In Calculating `tokenId` Using The `_generateNewTokenId` Function

Timeswap contest

Timeswap contest

74.53 USDC • Code4rena • cmichel

#21

Dec '21

Vader Protocol contest

Vader Protocol contest

1,579.43 USDC • 32 total findings • Code4rena • cmichel

#4

high

Wrong liquidity units calculation

high

Swap token can be traded as fake base token

high

`getAddedAmount` can return wrong results

high

4 Synths can be minted with fake base token

high

Missing access restriction on `lockUnits/unlockUnits`

high

Wrong slippage protection on Token -> Token trades

high

Anyone can curate pools and steal rewards

high

Anyone can list anchors / curate tokens

high

Wrong `calcAsymmetricShare` calculation

high

Tokens can be stolen through `transferTo`

high

Transfer fee is burned on wrong accounts

high

Vault rewards can be gamed

high

Vault rewards last claim time not always initialized

high

Vault Weight accounting is wrong for withdrawals

high

Proposals can be cancelled

high

`VaderRouter._swap` performs wrong swap

high

`VaderRouter.calculateOutGivenIn` calculates wrong swap

high

TWAPOracle might register with wrong token order

high

Minting and burning synths exposes users to unlimited slippage

high

All user assets which are approved to VaderPoolV2 may be stolen

high

`VaderPoolV2` minting synths & fungibles can be frontrun

high

Vader TWAP averages wrong

medium

Init function can be called by everyone

medium

`flashProof` is not flash-proof

medium

Interest debt is capped after a year

medium

Canceled proposals can still be executed

medium

Completed proposals can be voted on and executed again

medium

Handle transfers of different ERC20 tokens

medium

Governor's veto protection can be exploited

medium

Vests can be denied

medium

`TWAPOracle.getRate` does not scale the ratio

medium

Unclear `TwapOracle.consult` algorithm

Yeti Finance contest

Yeti Finance contest

11,087.86 USDC • 1 total finding • Code4rena • cmichel

bronze

medium

Wrong `lastBuyBackPrice`

NFTX contest

NFTX contest

5,767.68 USDC • 11 total findings • Code4rena • cmichel

#4

high

Missing overflow check in `flashLoan`

high

`distribute` DoS on missing `receiveRewards` implementation

high

`getRandomTokenIdFromFund` yields wrong probabilities for ERC1155

high

A vault can be locked from MarketplaceZap and StakingZap

medium

Unbounded iteration in `NFTXEligiblityManager.distribute` over `_feeReceivers`

medium

Manager can grief with fees

medium

Tokens can get stuck in `NFTXMintRequestEligibility`

medium

Randomization of NFTs returned in redeem/swap operations can be brute-forced

medium

Rewards can be stolen

medium

Low-level call return value not checked

medium

transfer return value is ignored

Amun contest

Amun contest

4,412.08 USDC • 2 total findings • Code4rena • cmichel

#5

medium

SingleNativeTokenExitV2 assumes first exchange holds the outputToken

medium

ERC20 return values not checked

Sublime contest

Sublime contest

6,804.69 USDC • 4 total findings • Code4rena • cmichel

silver

high

Yearn token <> shares conversion decimal issue

high

Aave's share tokens are rebasing breaking current strategy code

high

SavingsAccount withdrawAll and switchStrategy can freeze user funds by ignoring possible strategy liquidity issues

medium

Extension voting threshold check needs to rerun on each transfer

PoolTogether TwabRewards contest

PoolTogether TwabRewards contest

393.76 USDC • 1 total finding • Code4rena • cmichel

#16

high

Rewards can be claimed multiple times

Perennial contest

Perennial contest

1,759.81 USDC • 1 total finding • Code4rena • cmichel

#5

medium

Chainlink's `latestRoundData` might return stale or incorrect results

Kuiper contest

Kuiper contest

40.95 ETH • 2 total findings • Code4rena • cmichel

#14

high

Re-entrancy in `settleAuction` allow stealing all funds

medium

Unsafe approve would halt the auction and burn the bond

Mellow Protocol contest

Mellow Protocol contest

10,840.47 USDC • 6 total findings • Code4rena • cmichel

silver

high

AaveVault does not update TVL on deposit/withdraw

medium

Bad redirects can make it impossible to deposit & withdraw

medium

User deposits don't have min. return checks

medium

Users can avoid paying vault fees

medium

Admin can break `_numberOfValidTokens`

medium

UniswapV3's path issue for `swapExactOutput`

Maple Finance contest

Maple Finance contest

6,487.26 USDC • 1 total finding • Code4rena • cmichel

silver

medium

Potential huge arbitrage opportunities / MPL price decrease

Nov '21

Streaming Protocol contest

Streaming Protocol contest

2,728.11 USDC • 2 total findings • Code4rena • cmichel

#12

high

Reward token not correctly recovered

high

Tokens can be stolen when `depositToken == rewardToken`

Fei Protocol contest

Fei Protocol contest

4,747.4 USDC • Code4rena • cmichel

bronze
Malt Finance contest

Malt Finance contest

6,373.9 USDC • 6 total findings • Code4rena • cmichel

#4

medium

Frontrunning in UniswapHandler calls to UniswapV2Router

medium

Wrong permissions on `reassignGlobalAdmin`

medium

Bonding doesn't work with fee-on transfer tokens

medium

`_getFirstSample` returns wrong sample if count < sampleMemory

medium

`UniswapHandler.maltMarketPrice` returns wrong decimals

medium

Slippage checks when adding liquidity are too strict

Unlock Protocol contest

Unlock Protocol contest

8,857.88 USDC • 6 total findings • Code4rena • cmichel

silver

high

Approvals not cleared after key transfer

medium

Referrer discount token amount can be manipulated

medium

Missing scaling factor in `recordKeyPurchase`?

medium

Inaccurate fees computation

medium

Support of different ERC20 tokens

medium

Key transfer will destroy key if from==to

Overlay Protocol contest

Overlay Protocol contest

9,592.02 ETH • 3 total findings • Code4rena • cmichel

gold

high

`OverlayV1UniswapV3Market` computes wrong market liquidity

medium

_totalSupply not updated in _transferMint() and _transferBurn()

medium

Improper Upper Bound Definition on the Fee

yAxis contest

yAxis contest

3,344.26 USDC • 12 total findings • Code4rena • cmichel

bronze

high

`Controller.setCap` sets wrong vault balance

high

`Vault.withdraw` mixes normalized and standard amounts

high

`Vault.balance()` mixes normalized and standard amounts

high

Vault treats all tokens exactly the same that creates (huge) arbitrage opportunities.

high

An attacker can steal funds from multi-token vaults

medium

wrong YAXIS estimates

medium

`YAxisVotePower.balanceOf` can be manipulated

medium

ERC20 return values not checked

medium

`Vault.withdraw` sometimes burns too many shares

medium

token -> vault mapping can be overwritten

medium

VaultHelper deposits don't work with fee-on transfer tokens

medium

`Controller.inCaseStrategyGetStuck` does not update balance

Nested Finance contest

Nested Finance contest

3,322.98 USDC • Code4rena • cmichel

#5

Vader Protocol contest

Vader Protocol contest

8,817.59 USDC • 32 total findings • Code4rena • cmichel

#4

high

Wrong liquidity units calculation

high

Swap token can be traded as fake base token

high

`getAddedAmount` can return wrong results

high

4 Synths can be minted with fake base token

high

Missing access restriction on `lockUnits/unlockUnits`

high

Wrong slippage protection on Token -> Token trades

high

Anyone can curate pools and steal rewards

high

Anyone can list anchors / curate tokens

high

Wrong `calcAsymmetricShare` calculation

high

Tokens can be stolen through `transferTo`

high

Transfer fee is burned on wrong accounts

high

Vault rewards can be gamed

high

Vault rewards last claim time not always initialized

high

Vault Weight accounting is wrong for withdrawals

high

Proposals can be cancelled

high

`VaderRouter._swap` performs wrong swap

high

`VaderRouter.calculateOutGivenIn` calculates wrong swap

high

TWAPOracle might register with wrong token order

high

Minting and burning synths exposes users to unlimited slippage

high

All user assets which are approved to VaderPoolV2 may be stolen

high

`VaderPoolV2` minting synths & fungibles can be frontrun

high

Vader TWAP averages wrong

medium

Init function can be called by everyone

medium

`flashProof` is not flash-proof

medium

Interest debt is capped after a year

medium

Canceled proposals can still be executed

medium

Completed proposals can be voted on and executed again

medium

Handle transfers of different ERC20 tokens

medium

Governor's veto protection can be exploited

medium

Vests can be denied

medium

`TWAPOracle.getRate` does not scale the ratio

medium

Unclear `TwapOracle.consult` algorithm

FairSide contest

FairSide contest

9,818.99 ETH • 12 total findings • Code4rena • cmichel

gold

high

Locked funds are debited twice from user during tokenization leading to fund loss

high

`ERC20ConvictionScore`'s `governanceDelta` should be subtracted when user is not a governor anymore

high

`ERC20ConvictionScore._updateConvictionScore` uses stale credit score for `governanceDelta`

high

`Withdrawable.withdraw` does not decrease `pendingWithdrawals`

high

Incorrect type conversion in the contract `ABC` makes users unable to burn FSD tokens

high

Anyone Can Arbitrarily Call `FSDVesting.updateVestedTokens()`

high

Beneficiary cant get `fairSideConviction` NFT unless they only claim once, and only after it's fully vested

high

ERC20ConvictionScore._writeCheckpoint` does not write to storage on same block

medium

Conviction totals not updated during tokenization

medium

`ERC20ConvictionScore` allows transfers to special TOTAL_GOVERNANCE_SCORE address

medium

`ERC20ConvictionScore.acquireConviction` implements wrong governance checks

medium

Should check return data from Chainlink aggregators

Boot Finance contest

Boot Finance contest

2,686.78 USDC • 3 total findings • Code4rena • cmichel

#7

high

Swaps are not split when trade crosses target price

medium

Overwrite benRevocable

medium

Unchecked transfers

Oct '21

Slingshot Finance contest

Slingshot Finance contest

4,064.26 ETH • Code4rena • cmichel

#4

BadgerDAO ibBTC Wrapper contest

BadgerDAO ibBTC Wrapper contest

1,871.04 ETH • 2 total findings • Code4rena • cmichel

#6

high

Approved spender can spend too many tokens

high

WrappedIbbtcEth contract will use stalled price for mint/burn if updatePricePerShare wasn't run properly

Mochi contest

Mochi contest

8,492.04 ETH • 8 total findings • Code4rena • cmichel

#4

medium

liquidation factor < collateral factor for Sigma type

medium

Debt accrual is path-dependant and inaccurate

medium

Changing engine.nft contract breaks vaults

medium

UniswapV2/SushiwapLPAdapter update the wrong token

medium

UniswapV2TokenAdapter does not support Sushiswap-only assets

medium

regerralFeePool is vulnerable to MEV searcher

medium

Unchecked ERC20 transfer calls

medium

Chainlink's `latestRoundData` might return stale or incorrect results

Tally contest

Tally contest

1,288.31 ETH • 1 total finding • Code4rena • cmichel

#4

medium

Swap.sol implements potentially dangerous transfer

Covalent contest

Covalent contest

12,011 ETH • 1 total finding • Code4rena • cmichel

gold

high

`unstake` should update exchange rates first

Ambire contest

Ambire contest

12,385.29 USDC • 2 total findings • Code4rena • cmichel

gold

high

Signature replay attacks for different identities (nonce on wrong party)

high

QuickAccManager Smart Contract signature verification can be exploited

Union Finance contest

Union Finance contest

18,783.05 ETH • 4 total findings • Code4rena • cmichel

gold

high

`borrow` must `accrueInterest` first

medium

Rebalance will fail if a market has high utilization

medium

Rebalance will fail due to low precision of percentages

medium

`UnionToken` should check whitelist on `from`?

Tempus Finance contest

Tempus Finance contest

14,977.57 USDC • 2 total findings • Code4rena • cmichel

silver

medium

`depositAndFix` can be made to fail

medium

`exitTempusAMM` can be made to fail

Tracer contest

Tracer contest

35,702.71 tokens) • 7 total findings • Code4rena • cmichel

gold

high

Insurance slippage reimbursement can be used to steal insurance fund

high

Wrong price scale for `GasOracle`

medium

No check transferFrom() return value

medium

Use of deprecated Chainlink API

medium

Deposits don't work with fee-on transfer tokens

medium

`uncommit` sends tokens to the wrong user

medium

Wrong keeper reward computation

PoolTogether v4 contest

PoolTogether v4 contest

35,571.48 USDC • 2 total findings • Code4rena • cmichel

silver

high

The formula of number of prizes for a degree is wrong

medium

Deposits don't work with fee-on transfer tokens

Sep '21

Sushi Trident contest phase 2

Sushi Trident contest phase 2

16,009.52 USDC • 9 total findings • Code4rena • cmichel

#4

high

Wrong inequality when adding/removing liquidity in current price range

high

`ConcentratedLiquidityPoolManager`'s incentives can be stolen

high

Unsafe cast in ConcentratedLiquidityPool burn leads to attack

high

Burning does not update reserves

high

Wrong usage of `positionId` in `ConcentratedLiquidityPoolManager`

medium

ConcentratedLiquidityPoolHelper: getTickState() might run out of gas

medium

Cannot claim reward

medium

Incentive should check that it hasn't started yet

medium

`TridentNFT.permit` should always check `recoveredAddress != 0`

Swivel contest

Swivel contest

12,612.64 ETH • 3 total findings • Code4rena • cmichel

silver

high

Unsafe handling of underlying tokens

high

return value of 0 from ecrecover not checked

medium

Previously created markets can be overwritten

Wild Credit contest

Wild Credit contest

11,696.01 USDC • 9 total findings • Code4rena • cmichel

silver

high

Reward computation is wrong

high

`LendingPair.liquidateAccount` does not accrue and update cumulativeInterestRate

high

`LendingPair.liquidateAccount` fails if tokens are lent out

medium

Total LP supply & total debt accrual is wrong

medium

safeTransferFrom in TransferHelper is not safeTransferFrom

medium

Chainlink - Use latestRoundData instead latestAnswer to run more validations

medium

`LendingPair.withdrawUniPosition` should accrue debt first

medium

Supply part of the accrued debt can be stolen

medium

Use of deprecated Chainlink API

Kuiper contest

Kuiper contest

4,800.92 USDC • 2 total findings • Code4rena • cmichel

silver

high

Re-entrancy in `settleAuction` allow stealing all funds

medium

Unsafe approve would halt the auction and burn the bond

Sushi Trident contest phase 1

Sushi Trident contest phase 1

40,669.16 USDC • 10 total findings • Code4rena • cmichel

silver

high

`HybridPool`'s reserve is converted to "amount" twice

high

Flash swap call back prior to transferring tokens in indexPool

high

Index Pool always swap to Zero

high

Unsafe cast in IndexPool mint leads to attack

high

IndexPool initial LP supply computation is wrong

high

`ConstantProductPool.burnSingle` swap amount computations should use balance

medium

Router's `complexPath` percentagePaths don't work as expected

medium

`_depositToBentoBox` sometimes uses both ETH and WETH

medium

`withdrawFromWETH` always reverts

medium

`HybridPool`'s `flashSwap` sends entire fee to `barFeeTo`

Sushi Miso contest

Sushi Miso contest

24,749.25 USDC • 2 total findings • Code4rena • cmichel

gold

high

SushiToken transfers are broken due to wrong delegates accounting on transfers

high

`PostAuctionLauncher.sol#finalize()` Adding liquidity to an existing pool may allows the attacker to steal most of the tokens

yAxis contest

yAxis contest

8,607.9 tokens) • 12 total findings • Code4rena • cmichel

gold

high

`Controller.setCap` sets wrong vault balance

high

`Vault.withdraw` mixes normalized and standard amounts

high

`Vault.balance()` mixes normalized and standard amounts

high

Vault treats all tokens exactly the same that creates (huge) arbitrage opportunities.

high

An attacker can steal funds from multi-token vaults

medium

wrong YAXIS estimates

medium

`YAxisVotePower.balanceOf` can be manipulated

medium

ERC20 return values not checked

medium

`Vault.withdraw` sometimes burns too many shares

medium

token -> vault mapping can be overwritten

medium

VaultHelper deposits don't work with fee-on transfer tokens

medium

`Controller.inCaseStrategyGetStuck` does not update balance

bveCVX by BadgerDAO contest

bveCVX by BadgerDAO contest

41,474.85 tokens) • 3 total findings • Code4rena • cmichel

gold

high

`veCVXStrategy.manualRebalance` has wrong logic

medium

`SettV3.transferFrom` block lock can be circumvented

medium

`CvxLocker.setBoost` wrong validation

Aug '21

Notional contest

Notional contest

114,668.11 USDC • 15 total findings • Code4rena • cmichel

gold

high

DAO proposals can be executed by anyone due to vulnerable TimelockController

high

`CompoundToNotionalV2.notionalCallback` ERC20 return values not checked

high

Access restrictions on `CompoundToNotionalV2.notionalCallback` can be bypassed

high

Access restrictions on `NotionalV1ToNotionalV2.notionalCallback` can be bypassed

high

`TokenHandler.safeTransferOut` does not work on non-standard compliant tokens like USDT

high

`TokenHandler.safeTransferIn` does not work on non-standard compliant tokens like USDT

high

Liquidity token value can be manipulated

high

Treasury cannot claim COMP tokens & COMP tokens are stuck

medium

Allowance checks not correctly implemented

medium

`CompoundToNotionalV2.enableToken` ERC20 missing return value check

medium

nTokenERC20Proxy emits events even when not success

medium

`TokenHandler.setToken` ERC20 missing return value check

medium

Missing validation on latestRoundData

medium

`sNOTE.sol#_mintFromAssets()` Lack of slippage control

medium

Usage of deprecated ChainLink API in `EIP1271Wallet`

Reality Cards contest

Reality Cards contest

4,235.55 tokens) • 7 total findings • Code4rena • cmichel

silver

high

Unchecked ERC20 transfers can cause lock up

high

anyone can call function sponsor

medium

Market-specific pause is not checked for sponsor

medium

Deposits can be denied by abusing `maxContractBalance`

medium

`RCNftHubL2.safeTransferFrom` not accoring to spec

medium

Parameter updates not propagated

medium

Deposits don't work with fee-on transfer tokens

Yield micro contest #1

Yield micro contest #1

14,292.1 USDC • 5 total findings • Code4rena • cmichel

gold

high

CompositeMultiOracle returns wrong decimals for prices?

high

ERC20Rewards returns wrong rewards if no tokens initially exist

high

ERC20Rewards breaks when setting a different token

medium

TimeLock cannot schedule the same calls multiple times

medium

No ERC20 safe* versions called

Float Capital contest

Float Capital contest

5,945.09 USDC • 4 total findings • Code4rena • cmichel

#4

high

copy paste error in _batchConfirmOutstandingPendingActions

medium

Incorrect balance computed in `getUsersConfirmedButNotSettledSynthBalance()`

medium

Prevent markets getting stuck when prices don't move

medium

latestMarket used where marketIndex should have been used

Jul '21

PoolTogether micro contest #1

PoolTogether micro contest #1

2,002.31 USDC • 4 total findings • Code4rena • cmichel

#4

high

`redeemToken` can fail for certain tokens

medium

Old yield source still has infinite approval

medium

Use of safeApprove will always cause approveMax to revert

medium

Inconsistent balance when supplying transfer-on-fee or deflationary tokens

Sherlock contest

Sherlock contest

19,550.14 USDC • 3 total findings • Code4rena • cmichel

gold

high

Single under-funded protocol can break paying off debt

medium

`_doSherX` optimistically assumes premiums will be paid

medium

Incorrect internal balance bookkeeping

Spartan Protocol contest

Spartan Protocol contest

24,581.02 USDC • 14 total findings • Code4rena • cmichel

gold

high

Members lose SPARTA tokens in removeLiquiditySingle()

high

SynthVault rewards can be gamed

high

SynthVault withdraw forfeits rewards

high

Missing slippage checks

high

Dividend reward can be gamed

high

Pool.sol & Synth.sol: Failing Max Value Allowance

high

Result of transfer / transferFrom not checked

medium

Pools can be created without initial liquidity

medium

Pool: approveAndCall sets unnecessary approval

medium

Synth: approveAndCall sets unnecessary approval

medium

SynthVault deposit lockup bypass

medium

Missleading onlyDAO modifiers

medium

BondVault `BASE` incentive can be gamed

medium

Block usage of addCuratedPool

Connext contest

Connext contest

5,166.54 USDC • 5 total findings • Code4rena • cmichel

silver

high

Approval is not reset if the call to IFulfillHelper fails

high

Router liquidity on receiving chain can be double-dipped by the user

high

Anyone can arbitrarily add router liquidity

medium

Malicious router can block cross-chain-transfers

medium

Signatures use only tx ID instead of entire digest

Wild Credit contest

Wild Credit contest

33,709.73 USDC • 9 total findings • Code4rena • cmichel

gold

high

Reward computation is wrong

high

`LendingPair.liquidateAccount` does not accrue and update cumulativeInterestRate

high

`LendingPair.liquidateAccount` fails if tokens are lent out

medium

Total LP supply & total debt accrual is wrong

medium

safeTransferFrom in TransferHelper is not safeTransferFrom

medium

Chainlink - Use latestRoundData instead latestAnswer to run more validations

medium

`LendingPair.withdrawUniPosition` should accrue debt first

medium

Supply part of the accrued debt can be stolen

medium

Use of deprecated Chainlink API

Gro Protocol contest

Gro Protocol contest

26,071.3 USDC • 5 total findings • Code4rena • cmichel

gold

high

`Buoy3Pool.safetyCheck` is not precise and has some assumptions

high

implicit underflows

medium

Usage of deprecated ChainLink API in `Buoy3Pool`

medium

Early user can break minting

medium

BaseVaultAdaptor assumes `sharePrice` is always in underlying decimals

Jun '21

Tracer contest

Tracer contest

19,609.1 USDC • 7 total findings • Code4rena • cmichel

silver

high

Insurance slippage reimbursement can be used to steal insurance fund

high

Wrong price scale for `GasOracle`

medium

No check transferFrom() return value

medium

Use of deprecated Chainlink API

medium

Deposits don't work with fee-on transfer tokens

medium

`uncommit` sends tokens to the wrong user

medium

Wrong keeper reward computation

PoolTogether contest

PoolTogether contest

19,268.7 USDC • 6 total findings • Code4rena • cmichel

gold

high

BadgerYieldSource balanceOfToken share calculation seems wrong

high

`YearnV2YieldSource` wrong subtraction in withdraw

high

withdraw timelock can be circumvented

medium

Return values of ERC20 `transfer` and `transferFrom` are unchecked

medium

SafeMath not completely used in yield source contracts

medium

`YieldSourcePrizePool_canAwardExternal` does not work

Reality Cards contest

Reality Cards contest

6,981.24 USDC • 7 total findings • Code4rena • cmichel

bronze

high

Unchecked ERC20 transfers can cause lock up

high

anyone can call function sponsor

medium

Market-specific pause is not checked for sponsor

medium

Deposits can be denied by abusing `maxContractBalance`

medium

`RCNftHubL2.safeTransferFrom` not accoring to spec

medium

Parameter updates not propagated

medium

Deposits don't work with fee-on transfer tokens

May '21

Yield contest

Yield contest

9,353.29 USDC • 2 total findings • Code4rena • cmichel

#4

medium

Uniswap Oracle uses wrong prices

medium

Undercollateralized vaults' owner can be overwritten

FairSide contest

FairSide contest

18,416 USDC • 12 total findings • Code4rena • cmichel

gold

high

Locked funds are debited twice from user during tokenization leading to fund loss

high

`ERC20ConvictionScore`'s `governanceDelta` should be subtracted when user is not a governor anymore

high

`ERC20ConvictionScore._updateConvictionScore` uses stale credit score for `governanceDelta`

high

`Withdrawable.withdraw` does not decrease `pendingWithdrawals`

high

Incorrect type conversion in the contract `ABC` makes users unable to burn FSD tokens

high

Anyone Can Arbitrarily Call `FSDVesting.updateVestedTokens()`

high

Beneficiary cant get `fairSideConviction` NFT unless they only claim once, and only after it's fully vested

high

ERC20ConvictionScore._writeCheckpoint` does not write to storage on same block

medium

Conviction totals not updated during tokenization

medium

`ERC20ConvictionScore` allows transfers to special TOTAL_GOVERNANCE_SCORE address

medium

`ERC20ConvictionScore.acquireConviction` implements wrong governance checks

medium

Should check return data from Chainlink aggregators

Visor contest

Visor contest

5,438.46 USDC • 1 total finding • Code4rena • cmichel

#5

high

Approval for NFT transfers is not removed after transfer

88mph contest

88mph contest

17,618.19 USDC • 1 total finding • Code4rena • cmichel

gold

medium

Incompatability with deflationary / fee-on-transfer tokens

NFTX contest

NFTX contest

14,938.39 USDC • 11 total findings • Code4rena • cmichel

gold

high

Missing overflow check in `flashLoan`

high

`distribute` DoS on missing `receiveRewards` implementation

high

`getRandomTokenIdFromFund` yields wrong probabilities for ERC1155

high

A vault can be locked from MarketplaceZap and StakingZap

medium

Unbounded iteration in `NFTXEligiblityManager.distribute` over `_feeReceivers`

medium

Manager can grief with fees

medium

Tokens can get stuck in `NFTXMintRequestEligibility`

medium

Randomization of NFTs returned in redeem/swap operations can be brute-forced

medium

Rewards can be stolen

medium

Low-level call return value not checked

medium

transfer return value is ignored

Apr '21

LarvaLabs Meebits Contest

LarvaLabs Meebits Contest

969.25 USDC • Code4rena • cmichel

#5

Based Loans contest

Based Loans contest

18,392.87 USDC • 2 total findings • Code4rena • cmichel

gold

high

UniswapConfig getters return wrong token config if token config does not exist

medium

Reward rates can be changed through flash borrows

Vader Protocol contest

Vader Protocol contest

45,038.91 USDC • 32 total findings • Code4rena • cmichel

gold

high

Wrong liquidity units calculation

high

Swap token can be traded as fake base token

high

`getAddedAmount` can return wrong results

high

4 Synths can be minted with fake base token

high

Missing access restriction on `lockUnits/unlockUnits`

high

Wrong slippage protection on Token -> Token trades

high

Anyone can curate pools and steal rewards

high

Anyone can list anchors / curate tokens

high

Wrong `calcAsymmetricShare` calculation

high

Tokens can be stolen through `transferTo`

high

Transfer fee is burned on wrong accounts

high

Vault rewards can be gamed

high

Vault rewards last claim time not always initialized

high

Vault Weight accounting is wrong for withdrawals

high

Proposals can be cancelled

high

`VaderRouter._swap` performs wrong swap

high

`VaderRouter.calculateOutGivenIn` calculates wrong swap

high

TWAPOracle might register with wrong token order

high

Minting and burning synths exposes users to unlimited slippage

high

All user assets which are approved to VaderPoolV2 may be stolen

high

`VaderPoolV2` minting synths & fungibles can be frontrun

high

Vader TWAP averages wrong

medium

Init function can be called by everyone

medium

`flashProof` is not flash-proof

medium

Interest debt is capped after a year

medium

Canceled proposals can still be executed

medium

Completed proposals can be voted on and executed again

medium

Handle transfers of different ERC20 tokens

medium

Governor's veto protection can be exploited

medium

Vests can be denied

medium

`TWAPOracle.getRate` does not scale the ratio

medium

Unclear `TwapOracle.consult` algorithm

Maple Finance contest

Maple Finance contest

33,406.11 USDC • 1 total finding • Code4rena • cmichel

gold

medium

Potential huge arbitrage opportunities / MPL price decrease

Marginswap contest

Marginswap contest

20,405.51 USDC • Code4rena • cmichel

gold

Feb '21

ElasticDAO contest

ElasticDAO contest

16,896.33 ETH • Code4rena • cmichel

gold
Slingshot Finance contest

Slingshot Finance contest

1,634.32 USDC • Code4rena • cmichel

#5