Banner
https://sherlock-files.ams3.digitaloceanspaces.com/twitter_images/95219cd6-2e84-44e0-a820-0cb9dcd9e9e2.jpg

hansfriese

Security Researcher

Founder @SoloditOfficial. Co-founder and Security Researcher @CyfrinAudits. Judge at @code4rena. Top Warden of 2023 @code4rena.

Contact Me

High

18

Total

Medium

2

Solo

37

Total

$202.63K

Total Earnings

#47 All Time

87x

Payouts

gold

6x

1st Places

silver

6x

2nd Places

bronze

4x

3rd Places

All

Sherlock

Apr '23

Notional Update #3

Notional Update #3

2,572.61 USDC • Sherlock • hansfriese

bronze

Findings not publicly available for private contests.

Feb '23

Syndr

Syndr

1,564.56 USDC • Sherlock • hansfriese

#5

Findings not publicly available for private contests.

OlympusDAO

OlympusDAO

450.72 USDC • 3 total findings • Sherlock • hansfriese

#16

medium

Reward tokens can't be added again once they are removed because there is no way to reset the user's previous debt/cache state.

medium

Users wouldn't claim their unclaimed rewards once the reward token is removed.

medium

`SingleSidedLiquidityVault.deposit()` and `SingleSidedLiquidityVault.withdraw()` will revert if `rewardToken.lastRewardTime > block.timestamp`.

Volta

Volta

1,662.01 USDC • Sherlock • hansfriese

bronze

Findings not publicly available for private contests.

Jan '23

Cooler

Cooler

442.13 USDC • 4 total findings • Sherlock • hansfriese

#5

high

Lenders can default the loan by reverting the `repay()` function.

high

Borrowers can abuse lenders and steal debt tokens.

medium

`Cooler.roll()` wouldn't work as expected when `newCollateral = 0`.

medium

`Cooler.clear()` should set `rollable = false` when it adds the loans.

UXD Protocol

UXD Protocol

2,230.24 USDC • 2 total findings • Sherlock • hansfriese

#5

medium

`PerpDepository._rebalanceNegativePnlWithSwap()` shouldn't use a `sqrtPriceLimitX96` twice.

medium

`rebalanceLite` should provide a slippage protection

Dec '22

Lyra

Lyra

868.23 USDC • Sherlock • hansfriese

#6

Findings not publicly available for private contests.

NounsDAO

NounsDAO

464.15 USDC • 2 total findings • Sherlock • hansfriese

#4

medium

rescueERC20() is not safe for tokens with multiple addresses

medium

Anyone can fabricate the stream history

Nov '22

Opyn Crab Netting

Opyn Crab Netting

44.82 USDC • 1 total finding • Sherlock • hansfriese

#21

high

A malicious user can cancel other's orders using `CrabNetting.checkOrder()`.

Isomorph

Isomorph

1,636.21 USDC • 4 total findings • Sherlock • hansfriese

#6

medium

Wrong constants for time delay

medium

The protocol shouldn't charge interests when paused

medium

Lyra vault underestimates the collateral value

medium

The virtual price of collateral is less than it should be.

Buffer Finance

Buffer Finance

1,013.05 USDC • 2 total findings • Sherlock • hansfriese

#6

high

Keepers can modify option exercise result using different asset price

medium

`tokenX.transfer` will not work as intended from some ERC20 tokens.

Bull v Bear

Bull v Bear

472.32 USDC • 4 total findings • Sherlock • hansfriese

#7

high

A malicious user can drain the protocol funds using `reclaimContract()`.

high

Attacker can trigger permanent lock of funds of normal traders

medium

The NFT might be locked inside the protocol forever after the contract was settled.

medium

Protocol can lose the fee and withdrawal function can become useless.

FrankenDAO

FrankenDAO

2,575.24 USDC • 6 total findings • Sherlock • hansfriese

silver

high

`Staking.unstake()` doesn't decrease the original voting power that was used in `Staking.stake()`.

high

`Staking._stakeToken()` calculates `stakedTimeBonus` wrongly.

high

The total community voting power can be huge because of incorrect conditions.

medium

`Governance.queue()` should update the `CommunityScoreData.proposalsPassed` instead of `CommunityScoreData.proposalsCreated`.

medium

Voters can increase their community voting power without any token voting power using `castVote()`.

medium

`Staking._stakeToken()` and `Staking.evilBonus()` don't calculate a voting power for a monster like a document.

Bond Protocol

Bond Protocol

802.13 USDC • 1 total finding • Sherlock • hansfriese

#6

medium

Circuit breaker could cancel the last transaction to prevent an unnecessary loss

Oct '22

Illuminate

Illuminate

344.33 USDC • 3 total findings • Sherlock • hansfriese

#18

high

`ERC5095.withdraw()` and `ERC5095.redeem()` don't transfer the principal token to the contract when they work before maturity.

medium

`ERC5095.mint()` uses the wrong slippage limit.

medium

Can not change the fee of the Redeemer

Astaria

Astaria

866.55 USDC • 9 total findings • Sherlock • hansfriese

#10

high

Refinance validation is wrong

high

Potential debt calculation on new loan is wrong

high

`AuctionHouse.cancelAuction()` doesn't refund the last bidder.

medium

timeToEpochEnd is wrong

medium

Rate is used in wrong units

medium

`AuctionHouse.createBid()` will revert when it should increase the duration.

medium

Inconsistent usage of `firstBidTime` in `AuctionHouse.createAuction()` and `AuctionHouse.createBid()`

medium

ChangeInSlope function is wrong.

medium

Borrower might get loss while repaying.

Mover

Mover

2,594.88 USDC • 1 total finding • Sherlock • hansfriese

silver

high

Users might steal the remaining fees inside the `ExchangeProxy` contract after `cardTopupToken` is changed.

Union Finance

Union Finance

684.00 USDC • 2 total findings • Sherlock • hansfriese

#13

medium

`AssetManager.removeAdapter()` doesn't update `withdrawSeq` after removing an adapter.

medium

`AssetManager.rebalance()` will revert when the balance of `tokenAddress` in the money market is 0.

Mycelium

Mycelium

1,345.87 USDC • 4 total findings • Sherlock • hansfriese

silver

high

The `Vault` contract should check more validations to prevent the `first depositor` issue.

medium

`Vault.convertToShares()` and `onTokenTransfer()` check the wrong condition for the first deposit.

medium

`Vault._withdrawFromPlugin()` always reverts when `_amount == 0`.

medium

The admin might add the same plugin using `Vault.addPlugin()` by fault.

Sep '22

Knox Finance

Knox Finance

6,578.08 USDC • 4 total findings • Sherlock • hansfriese

bronze

high

In `Auction.sol`, users might fail to withdraw the funds from the processed auction because of the uint underflow.

high

`AuctionInternal._previewWithdraw()` might return the wrong result after some orders are removed during the withdrawal.

medium

`Auction.getEpochsByBuyer()` might omit some valid epochs.

medium

Chainlink's latestRoundData might return stale or incorrect results.

Harpie

Harpie

23.74 USDC • 1 total finding • Sherlock • hansfriese

#20

medium

Funds might be locked inside the `Vault` for the fee-on-transfer tokens.

Notional

Notional

2,972.23 USDC • 1 total finding • Sherlock • hansfriese

#6

high

`TradingUtils._executeTrade()` doesn't check `preTradeBalance` properly.

Aug '22

Sentiment

Sentiment

219.53 USDC • 1 total finding • Sherlock • hansfriese

#22

medium

`Account` contract might be locked when `underlying` = address(0).