https://sherlock-files.ams3.digitaloceanspaces.com/twitter_images/2683e023-058c-4144-b0d0-8b5864ef9d87.jpg

amar

Security Researcher

@HunterBlockSec Mentorship Cohort #1 🕵️‍♂️ | 1/2 OpaBatyo | ex cats

Contact Me

High

57

Total

Medium

2

Solo

56

Total

$15.89K

Total Earnings

#435 All Time

39x

Payouts

silver

2x

2nd Places

bronze

2x

3rd Places

regular

8x

Top 10

All

Sherlock

Code4rena

Cantina

CodeHawks

May '25

mystic-monorepo

mystic-monorepo

140.5 USDC • 5 total findings • Cantina • cats

#22

high

Finding not yet public.

high

Finding not yet public.

high

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

Apr '25

ZKP2P V2

ZKP2P V2

672.40 OP • Sherlock • OpaBatyo

#5

Findings not publicly available for private contests.

Aegis.im YUSD

Aegis.im YUSD

139.83 OP • 1 total finding • Sherlock • OpaBatyo

bronze

medium

Malicious user can DoS whole period redeems when limit is in place

Mar '25

Crestal Network

Crestal Network

0.01 USDC • 1 total finding • Sherlock • OpaBatyo

#12

high

Any unused approvals to `BlueprintV5.sol` can be used to steal funds

Symmio, Staking and Vesting

Symmio, Staking and Vesting

8.90 USDC • 2 total findings • Sherlock • OpaBatyo

#16

medium

Attacker can easily disrupt reward distribution and render `SymmStaking` useless

medium

Adding liquidity to the LP will revert in some cases

Feb '25

Core Contracts

Core Contracts

1,767.99 usdc • 45 total findings • CodeHawks • OpaBatyo

#4

high

Wrong amount is minted to user when they deposit into the lending pool

high

Multiple Delegation by Double Spending Boosts and Lack of Delegation Tracking in BoostController Contract

high

`BaseGauge` users can claim rewards without staking

high

`GaugeController` does not send funds to FeeCollector disrupting fees distribution and causing loss of funds

high

Reward manipulation vulnerability in StabilityPool

high

Incorrect Reward Claim Logic in FeeCollector::claimRewards Causes Denial of Service

high

Attackers can get most of RAACToken rewards by withdrawing dust amount from StabilityPool multiple times

high

NFTs Get Permanently Locked in Stability Pool After Liquidation

high

Double Usage Index Scaling in StabilityPool Liquidation Inflates Required CRVUSD Balance

high

Ownership Parameter Mismatch in LendingPool’s Vault Withdrawal Logic

high

Lack of Access Control in BoostController::updateUserBoost Leading to Unauthorized Delegation Overwrite.

high

Treasury Balance Tracking Bypass in FeeCollector

high

Attackers can double voting power and veToken amount by locking and increasing

high

Gauge Voting Misallocation Vulnerability

high

The total voting power of all veRAAC tokens is wrongly assigned

high

Interest Accrual Failure Due to Incorrect Scaling in RToken Implementation

high

Incorrect Debt Token Accounting Due to Multiple Scaling Issues

high

Gauge rewards are not transferred to gauge when distributeRewards() is called

high

Untracked Direct Fee Transfers from RAACToken to FeeCollector Break Fee Distribution System

high

Ineffective Time-Weighted Average Implementation in Fee Distribution

medium

`MAX_TOTAL_SUPPLY` Bypass in `veRAACToken` via `increase()` Function

medium

Missing Boost Balance and other parameters Update in veRAACToken Functions. Incomplete Boost State Updates Result in Inaccurate Voting Power and Reward Distribution

medium

Incorrect utilization rate forces protocol to issue maximum rewards indefinitely

medium

RToken.transferFrom() Does Not Scale User Balances Due to Stale Liquidity Index

medium

LendingPool deposits do not work with CurveVault due to lack of funds

medium

Liquidation Cannot Be Closed Even With Healthy Position Due To Strict Debt Check

medium

Using balanceOf Instead of Voting Power

medium

There is no logic checking for RAACNFT price staleness before minting it

medium

Treasury Contract Deposit Function Can Be Frontrun To Deny Protocol Operations

medium

Workingsupply would always be overwritten in boostcontroller.sol impacting reward calculations

medium

Emergency revoke in RAACReleaseOrchestrator will freeze revoked RAAC tokens in orchestrator

medium

Insufficient Balance Validation in BaseGauge Can Lead to Reward Insolvency

medium

`veRAACToken::_updateBoostState` function sets individual user voting power instead of system-wide totals

medium

Missing Boost State Update in extend() and withdraw()

medium

Gauge emissions revert when emissions are higher than the leftover buffer instead of depositing the difference

medium

User may not be able to increase the amount of locked RAAC tokens

medium

`GaugeController::distributeRewards` can be called multiple times by anyone, leading to excessive reward distribution

medium

Lack of Time-Weighted Voting and Weight Decay in GaugeController

low

Limited veRaac Token Supply Triggers DoS, Hampering Proper Governance Participation.

low

Irreversible emission cap reduction in BaseGauge

low

Impossible to rescue funds from `RToken` contract

low

Incorrect Initialization of minBoost in BaseGauge Constructor Breaks Core Contract Functionality

low

Missing Checkpoint Reset in `veRAACToken::emergencyWithdraw` Function

low

Missing Pause Functionality in veRAACToken Contract Can Be Abused When Emergency Withdrawal Mechanism Is Activated

low

`FeeCollector::updateFeeType` wrong fee share validation leads to impossible update for some fee types

Jan '25

Peapods

Peapods

130.12 USDC • 1 total finding • Sherlock • OpaBatyo

#24

medium

Hardcoded addresses

Dec '24

Alchemix Transmuter

Alchemix Transmuter

3.30 op • 2 total findings • CodeHawks • OpaBatyo

#28

low

Missing Router Update Mechanism in StrategyMainnet Contract

low

Old router retains token allowance after update

Numa

Numa

4,647.12 USDC • 2 total findings • Sherlock • OpaBatyo

#6

medium

Buy fee PID is updated with wrong amounts leading to unexpected fee growth

medium

Vaults can be purposefully bricked by leaving small amounts of rETH

Teller Lender Groups Update Audit

Teller Lender Groups Update Audit

3,648.53 USDC • 3 total findings • Sherlock • OpaBatyo

silver

high

Lenders can force borrowers into liquidation

high

Lender group members can be prevented from burning their shares forever

medium

Overpaying a loan can DoS an entire lender commitment group

Lambo.win

Lambo.win

34.72 USDC • 2 total findings • Code4rena • OpaBatyo

#28

high

Minting zero tokens when underlyingToken is not Ether in cashIn()

medium

`sellQuote` and `buyQuote` are missing deadline check in `LamboVEthRouter`

Nov '24

Concrete

Concrete

532.82 USDC • Code4rena • OpaBatyo

#30

hyperlend

hyperlend

43.12 USDC • 1 total finding • Cantina • cats

#16

high

Finding not yet public.

Sep '24

Royco Protocol

Royco Protocol

84.39 USDC • 4 total findings • Cantina • OpaBatyo

#42

high

Finding not yet public.

high

Finding not yet public.

medium

Finding not yet public.

medium

Finding not yet public.

Flayer

Flayer

952.52 USDC • 7 total findings • Sherlock • OpaBatyo

#16

high

Malicious attacker can brick users claiming sale proceeds from collection shutdown by reclaiming vote

high

`ERC721Bridgable` cannot receive ETH for royalty payouts

high

Users cannot claim royalties for `ERC1155`

high

Users can create permanent protected listings and inflate interest rates

medium

If a collection has been shutdown but later re-initialized, it cannot be shutdown again

medium

Users can dodge `createListing` fees

medium

Users can sandwich unlocking their protected listings to pay less fees

Aug '24

Phi

Phi

96.86 USDC • 6 total findings • Code4rena • OpaBatyo

#19

high

Unrestricted Changes to Token Settings Allow Artists to Alter Critical Features

high

Exposed `_removeCredIdPerAddress` & `_addCredIdPerAddress` allows anyone to cause issues to current holders as well as upcoming ones

high

`shareBalance` bloating eventually blocks curator rewards distribution

high

Signature replay in `createArt` allows to impersonate artist and steal royalties

medium

Refunds sent to incorrect addresses in certain cases

medium

Incorrect Fee Handling Prevents Protocol from Updating Fees

Fjord Token Staking

Fjord Token Staking

94.87 USDC • 2 total findings • CodeHawks • amarfares

#16

medium

[H-01] Auction tokens will be lost forever when auction ends without bids

medium

Epoch mismatch in FjordPoints and FjordStaking leads to user being able to stake and unstake instantly for rewards

May '24

Munchables

Munchables

0.01 USDC • 1 total finding • Code4rena • cats

#16

high

Malicious User can call `lockOnBehalf` repeatedly extend a users `unlockTime`, removing their ability to withdraw previously locked tokens

Apr '24

Zivoe

Zivoe

687.82 USDC • 4 total findings • Sherlock • amar

#17

high

Wrong value decremented from `totalSupply` when revoking a vesting schedule will lead to last users not being able to withdraw their funds

high

"Revoked" vesting amount can still be used for voting even after vesting is revoked

high

Any user can grief rewards distribution `rewardRate` variable

medium

A user can split up their junior deposit into smaller portions to extract maximum `maxBonusIncentive` value

Mar '24

RadicalxChange

RadicalxChange

1.18 USDC • 1 total finding • Sherlock • cats

bronze

high

Flawed bid cancellation logic allows user to win auction with 100% certainty without even spending any money

Zap Protocol

Zap Protocol

25.12 USDC • 2 total findings • Sherlock • cats

#10

high

Reentrancy when claiming vesting funds allows attacker to steal all other users' funds

medium

No way for vesting contract to receive native funds to pay out to users

Feb '24

Rio Network

Rio Network

261.58 USDC • 3 total findings • Sherlock • cats

#21

medium

Partial withdrawals to operator delegator are bricked due to low-level call gas limit

medium

Attacker can front-run rewards distribution to be awarded unfairly which decreases the yield for honest users

medium

Minting formula does not subtract pending withdrawals

AI Arena

AI Arena

63.64 USDC • 7 total findings • Code4rena • cats

#85

high

A locked fighter can be transferred; leads to game server unable to commit transactions, and unstoppable fighters

high

Since you can reroll with a different fighterType than the NFT you own, you can reroll bypassing maxRerollsAllowed and reroll attributes based on a different fighterType

high

Players have complete freedom to customize the fighter NFT when calling `redeemMintPass` and can redeem fighters of types Dendroid and with rare attributes

high

Non-transferable `GameItems` can be transferred with `GameItems::safeBatchTransferFrom(...)`

medium

Can mint NFT with the desired attributes by reverting transaction

medium

Constraints of dailyAllowanceReplenishTime and allowanceRemaining during mint() can be bypassed by using alias accounts & safeTransferFrom()

medium

Fighter created by mintFromMergingPool can have arbitrary weight and element

Jan '24

Salty.IO

Salty.IO

159.06 USDC • 3 total findings • Code4rena • cats

#57

medium

No proposal time limit traps sponsors of unpopular proposals

medium

SALT staker can get extra voting power by simply unstaking their xSALT

medium

Creation of token whitelisting proposals can be DOS'd

Curves

Curves

143.38 USDC • 7 total findings • Code4rena • cats

#31

high

Whitelised accounts can be forcefully DoSed from buying curveTokens during the presale

high

Attack to make ````CurveSubject```` to be a ````HoneyPot````

high

Unauthorized Access to setCurves Function

medium

Protocol and referral fee would be permanently stuck in the Curves contract when selling a token

medium

Selling will be bricked if all other tokens are withdrawn to ERC20 token

medium

Curves::_buyCurvesToken(), Excess of Eth received is not refunded back to the user.

medium

If a user sets their curve token symbol as the default one plus the next token counter instance it will render the whole default naming functionality obsolete

SYMM IO

SYMM IO

0.73 USDC • Sherlock • cats

#36

Dec '23

The Standard

The Standard

0.04 USDC • 2 total findings • CodeHawks • amarfares

#103

high

Looping over unbounded `pendingStakes` array can lead to permanent DoS and frozen funds

low

`costInEuros` calculation will incur precision loss due to division before multiplication

Footium Update

Footium Update

1.58 USDC • Sherlock • cats

#36

Ethereum Credit Guild

Ethereum Credit Guild

3.05 USDC • 1 total finding • Code4rena • cats

#87

high

Users staking via the `SurplusGuildMinter` can be immediately slashed when staking into a gauge that had previously incurred a loss

Nov '23

Canto Application Specific Dollars and Bonding Curves for 1155s

Canto Application Specific Dollars and Bonding Curves for 1155s

19.04 USDC • Code4rena • cats

#26

Kelp DAO | rsETH

Kelp DAO | rsETH

1,091.39 USDC • 2 total findings • Code4rena • CatsSecurity

silver

high

The price of rsEHT could be manipulated by the first staker

high

Possible arbitrage from Chainlink price discrepancy

Oct '23

NextGen

NextGen

27.69 USDC • Code4rena • cats

#75

Sep '23

Allo V2

Allo V2

0.09 USDC • 1 total finding • Sherlock • cats

#74

medium

Incompatibility With Fee-On-Transfer Tokens

Centrifuge

Centrifuge

335.49 USDC • Code4rena • cats

#22

Aug '23

Cooler Update

Cooler Update

19.86 USDC • 2 total findings • Sherlock • cats

#18

medium

Front-Running rollLoan With newTermsForRoll Forces High Interest Rate on Loan

medium

No Access Control Modifier for rollLoan() can Force Borrower to Default and Lose Collateral

Sparkn

Sparkn

5.95 USDC • 3 total findings • CodeHawks • amarfares

#71

medium

Malicious/Compromised organiser can reclaw all funds, stealing work from supporters

low

Centralization Risk for trusted organizers

low

DAI Tokens at Risk Due to Lack of address(0) Check in distribute

Tangible Caviar

Tangible Caviar

0.03 USDC • Code4rena • cats

#87

Jul '23

Moonwell

Moonwell

44.88 USDC • Code4rena • cats

#36

Beedle - Oracle free perpetual lending

Beedle - Oracle free perpetual lending

5.01 USDC • 4 total findings • CodeHawks • amarfares

#170

high

During refinance() new Pool balance debt is subtracted twice

high

[H-04] Lender#buyLoan - Malicious user could take over a loan for free without having a pool because of wrong access control

low

Lender fails to giveLoan because of inconsistent length between `loadIds` and `poolIds`

low

Possible DOS by borrowers in `setPool()`