https://sherlock-files.ams3.digitaloceanspaces.com/profile_images/defaults/default_avatar_3.png

oakcobalt

Security Researcher

Contact Me

High

30

Total

Medium

70

Total

$133.53K

Total Earnings

#72 All Time

29x

Payouts

silver

6x

2nd Places

bronze

3x

3rd Places

regular

15x

Top 10

All

Sherlock

Code4rena

Mar '25

StarkWare Perps

StarkWare Perps

442.45 USDC • Code4rena • oakcobalt

#18

Feb '25

Blend V2 Audit + Certora Formal Verification

Blend V2 Audit + Certora Formal Verification

9,151.12 USDC • 8 total findings • Code4rena • oakcobalt

silver

high

A reserve's `d_supply` is incorrectly updated and stored after flash loan execution

high

Potentially sensitive issue - disclosed privately

medium

Removing a pool from the reward zone leads to the loss of ungulped emissions

medium

Potentially sensitive disclosure - 5

medium

Division before multiplications may cause division by zero DOS during low backstop supply

medium

Missing update_rz_emis_data Calls in draw and donate Functions Lead to Incorrect Emissions Distribution

medium

Missing reserve interest accrual prior to backstop take rate update leads to incorrect backstop_credit computation

medium

Flash Loans Allow Borrowing From Frozen Pools, Bypassing Security Controls

Virtuals Protocol

Virtuals Protocol

4,945.06 USDC • 9 total findings • Code4rena • oakcobalt

silver

high

Public `ServiceNft::updateImpact` call leads to cascading issue

high

ValidatorRegistry::validatorScore/getPastValidatorScore allows validator to earn full rewards without actually engaging with the protocol

medium

Launched tokens are vulnerable to flashloan attacks forcing premature graduation, allowing reward manipulation

medium

Attacker can prevent user from executing application registered through `initFromToken()` in `AgentFactoryV4`.

medium

Functions in FERC20 can't be invoked

medium

BondingTax has invalid slippage implementation

medium

`AgentDAO::_castVote` doesn't check the array of votes emitted, which determine the number of battles fought in `EloCalculator.sol`, allowing the user to increase the ELO of a contribution unfairly, inflating the maturity/impact of `ServiceNFTs`

medium

battleElo is at risk of underflow revert, which may DOS voting

medium

Founder has to double-stake during migration with the initial LP locked in the old veToken

Initia Cosmos

Initia Cosmos

1,502.28 USDC • 2 total findings • Code4rena • oakcobalt

#5

medium

MsgCreate2 deviates from EVM spec causing a large range of address not reachable

medium

setBeforeSendHook can never delete an existing store due to vulnerable validate

Jan '25

Liquid Ron

Liquid Ron

0.03 USDC • 2 total findings • Code4rena • oakcobalt

#10

high

The calculation of `totalAssets()` could be wrong if `operatorFeeAmount` > 0, this can cause potential loss for the new depositors

medium

Incorrect Logic in onlyOperator Modifier Leading to Denial-of-Service for Authorized Operators Across Critical Functions

Nov '24

MANTRA DEX

MANTRA DEX

5,729.36 USDC • 10 total findings • Code4rena • oakcobalt

silver

high

Stable swap pools don't properly handle assets with different decimals, forcing LPs to receive wrong shares

high

User cannot claim rewards or close_position, due to vulnerable division by zero handling

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

Incorrect `slippage_tolerance` handling in stableswap `provide_liquidty` function

medium

Penalty fees can be shared among future farms or expired farms, risks of exploits

medium

In edge cases, create_pool can either be reverted or allow user underpay fees.

medium

When a user single-side deposit into a pool, slippage protection is invalid

medium

Vulnerable liquidity slippage calculation doesn't ensure slippage protection due to unscaled assets sum

medium

Liquidity providers can lose tokens due to disproportionate deposits not being properly handled

medium

Insufficient check on asset decimals input in create_pool allows malicious pool to be created with invalid swap results

Sep '24

Kakarot

Kakarot

2,594 USDC • 4 total findings • Code4rena • oakcobalt

#6

medium

No way to cancel l1 -< l2 messages

medium

handle_l1_message may unfairly revert l2 tx with sufficient l1 sender balance, due to vulnerable fee charge implementation

medium

Incorrect totalsupply value will be returned due to erroneous return data decode implementation

medium

Account contract does not gracefully handle panics in called contracts

Aug '24

Superposition

Superposition

8,240.87 USDC • 9 total findings • Code4rena • oakcobalt

silver

high

Missing `lower<upper` check in `mint_position`

high

Unrevoked approvals allow NFT recovery by previous owner

high

update_emergency_council_7_D_0_C_1_C_58() updates nft manager instead of emergency council

high

swapOut functions have invalid slippage check, causing user loss of funds

medium

If liquidity is insufficient, users may need to pay more tokens in swap2

medium

_onTransferReceived() does not work as intended

medium

swap_2 implementation will randomly revert due to improper check, root cause for failed test ethers_suite_uniswap_orchestrated_uniswap_two

medium

`decrPosition09293696` will not work due to incorrect function signature

medium

No related function to set fee_protocol

Jul '24

Optimism Superchain

Optimism Superchain

3,818.05 OP • 1 total finding • Code4rena • oakcobalt

#11

medium

In some cases, proper CLOCK_EXTENTSION time cannot be ensured to generate the initial instruciton trace

Apr '24

Renzo

Renzo

2,208.61 USDC • 3 total findings • Code4rena • oakcobalt

#8

high

Incorrect withdraw queue balance in TVL calculation

medium

L1::xRenzoBridge and L2::xRenzoBridge uses the block.timestamp as dependency, which can cause issue.

medium

Withdrawals and Claims are meant to be pausable, but it is not possible in practice

NOYA

NOYA

436.31 USDC + NOYA stars • 12 total findings • Code4rena • oakcobalt

#27

high

BalancerConnector has incorrect implementation of totalSupply, positionTVL and total TVL will be invalid

high

`NoyaValueOracle.getValue` returns an incorrect price when a multi-token route is used

high

Numerous errors when calculating the TVL for the MorphoBlue connector

medium

CompoundConnector.sol misses unclaimed rewards in getPositionTVL, resulting in undervalued positionTVL/TVL

medium

Withdrawals in AccountManager are prone to DOS attacks.

medium

The `TVLHelper.sol#getTVL` function is DOSed by the `under collateralized connector`, and as a result, many parts of the protocol may be DOS.

medium

The modifier `onlyExistingRoute` works incorrectly

medium

Incorrect Return Value in `CompoundConnector.getBorrowBalanceInBase()` Affecting TVL Calculation

medium

Missing calls to `_updateTokenInRegistry` leads to incorrect state of tokens in registry

medium

Incorrect modifier condition

medium

In the AerodromeConnector, unclaimed rewards are not included in the calculation of the connectors TVL

medium

Dust donation might DOS all connectors to create new holding positions, by preventing removing existing holding positions

DYAD

DYAD

90.95 USDC • 4 total findings • Code4rena • oakcobalt

#63

high

Design flaw and mismanagement in vault licensing leads to double counting in collateral ratios and positions collateralized entirely with kerosine

high

Users can get their Kerosene stuck until TVL becomes greater than Dyad's supply

high

User can get their Kerosene stuck because of an invalid check on withdraw

medium

Incorrect deployment / missing contract will break functionality

Mar '24

zkSync Era

zkSync Era

68,441.76 USDC • 3 total findings • Code4rena • oakcobalt

silver

medium

User might be able to double withdraw during migration

medium

State transition manager is unable to force upgrade a deployed ST, which invalidates the designed safeguard for 'urgent high risk situation'

medium

Freezed Chain will never be unfreeze since `StateTransitionManager::unfreezeChain` is calling `freezeDiamond` instead of `unfreezeDiamond`.

Feb '24

HydraDX

HydraDX

1,367.4 USDC • 2 total findings • Code4rena • oakcobalt

#9

medium

a huge loss of funds for all the users who try to remove liquidity after swapping got disabled at manipulated price .

medium

[M09] No slippage check in `remove_liquidity` function in omnipool can lead to slippage losses during liquidity withdrawal.

Jan '24

Salty.IO

Salty.IO

1,452.86 USDC • 6 total findings • Code4rena • oakcobalt

#8

high

When borrowers repay USDS, it is sent to the wrong address, allowing anyone to burn Protocol Owned Liquidity and build bad debt for USDS

medium

formPOL lacks slippage and deadline protection

medium

When forming POL the DAO will end up stucked with DAI and USDS tokens that cannot handle.

medium

changeWallets() can be confirmed immediately after proposalWallets() by manipulating activeTimelock beforehand

medium

PriceFeed is likely to be disabled in times of volatility, causing liquidations and borrows to freeze

medium

Impossible to change managed wallets with `proposeWallets` after first rejection

reNFT

reNFT

1,084.23 USDC • Code4rena • oakcobalt

#12

Dec '23

Olas

Olas

380.63 USDC • 1 total finding • Code4rena • oakcobalt

#13

medium

Missing slippage protection in `liquidity_lockbox::withdraw`

Nov '23

Shell Protocol

Shell Protocol

5,217.42 USDC • 1 total finding • Code4rena • oakcobalt

silver

high

Lack of Balance Validation

ZetaChain

ZetaChain

9,692.06 USDC • 6 total findings • Code4rena • oakcobalt

bronze

high

In ZetaTokenConsumerTrident. strategy.sol, swapping zeta for other tokens will always revert due to incorrect exactInputSingle router method being used

medium

When updating gas, if one chain fails, the others should continue to be updated instead of being skipped.

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

User not refunded for failed Zeta gas payment in cross chain transaction

medium

PayGasFeeInZetaAndUpdateCctx() is prone to slippage, causing sender overpays the revert gas and lose returned funds

medium

AddToInTxTracker doens't allow permissionless tx validation for Bitcoin chain, InTxTracker permissionless tx validation for Bitcoin chain will always fail

Oct '23

NextGen

NextGen

778.9 USDC • 4 total findings • Code4rena • oakcobalt

#16

high

Attacker can drain all ETH from AuctionDemo when block.timestamp == auctionEndTime

high

Multiple mints can brick any form of `salesOption` 3 mintings

medium

On a Linear or Exponential Descending Sale Model, a user that mint on the last `block.timestamp` mint at an unexpected price.

medium

Bidder Funds Can Become Unrecoverable Due to 1 second Overlap in `participateToAuction()` and `claimAuction()`

Ethena Labs

Ethena Labs

99.71 USDC • Code4rena • oakcobalt

#29

zkSync Era

zkSync Era

95.22 USDC • 3 total findings • Code4rena • oakcobalt

#37

medium

User might be able to double withdraw during migration

medium

State transition manager is unable to force upgrade a deployed ST, which invalidates the designed safeguard for 'urgent high risk situation'

medium

Freezed Chain will never be unfreeze since `StateTransitionManager::unfreezeChain` is calling `freezeDiamond` instead of `unfreezeDiamond`.

Sep '23

Venus Prime

Venus Prime

211.73 USDC • 1 total finding • Code4rena • oakcobalt

#18

medium

DoS and gas griefing of calls to Prime.updateScores()

Aug '23

Dopex

Dopex

108.9 USDC • 2 total findings • Code4rena • oakcobalt

#73

high

The settle feature will be broken if attacker arbitrarily transfer collateral tokens to the PerpetualAtlanticVaultLP

medium

`sync` function in `RdpxV2Core.sol` should be called in multiple scenarios to account for the balance changes that occurs

Shell Protocol

Shell Protocol

2,181.09 USDC • 1 total finding • Code4rena • oakcobalt

bronze

high

Lack of Balance Validation

veRWA

veRWA

258.67 USDC • 2 total findings • Code4rena • oakcobalt

#16

high

When adding a gauge, its initial value has to be set by an admin or all voting power towards it will be lost

high

Voters from VotingEscrow can vote infinite times in vote_for_gauge_weights() of GaugeController

Good Entry

Good Entry

106.54 USDC • 1 total finding • Code4rena • oakcobalt

#27

medium

User can steal refunded underlying tokens from `initRange` operation inside `RangeManager`

Jul '23

Basin

Basin

2,795.93 USDC • 2 total findings • Code4rena • oakcobalt

bronze

high

Pumps are not updated in the shift() and sync() functions, allowing oracle manipulation

medium

Single hardcoded cap used for multiple tokens in a pump causing some assets to be more stale, while having no effects on other stable assets

Jun '23

Hubble Exchange

Hubble Exchange

100.66 USDC • 1 total finding • Sherlock • oakcobalt

#28

medium

Preset stable prices directly passes to protocol without checking with oracle price