Security Researcher
I weed out t0x1c bugs from codebases || Security Researcher @ Pashov Audit Group || Portfolio: https://github.com/t0x1cC0de
High
Total
Medium
Solo
Total
Total Earnings
#159 All Time
Payouts
2nd Places
3rd Places
Top 10
All
Sherlock
Code4rena
CodeHawks
May '25
Apr '25
Mar '25
Feb '25
high
If users withdraw while a position is in loss, the whole PNL of the position to their withdrawal amount instead of just their share of it.
medium
getExecutionGasLimit() reports a lower gas limit due to gasPerSwap miscalculation
medium
User may withdraw more than expected if ADL event happens
low
Protocol Recovery Mechanism at Risk Due to Unhandled Token Transfer Failures
low
`_withdraw` function uses `shortTokenPrice.max` instead of `shortTokenPrice.min` when computing negative PnL adjustment, leading to underestimation of losses and excessive collateral withdrawal
high
Faulty Gauge Weight Update Formula: Voting Power Delta Not Considered Leading to Arithmetic Underflow and Vote Weight Inconsistency
high
Users Can Overwrite Existing Locks in veRAACToken Resulting in Permanent Loss of Funds
high
Gauge period cannot be updated
high
`GaugeController::_calculateReward` implementation will cause smaller shares to be allocated to every gauge
high
Multiple issues from unnecessary balance increase calculation in DebtToken.mint
high
Incorrect Reward Claim Logic in FeeCollector::claimRewards Causes Denial of Service
high
RToken's transfer function lead to loss of funds due to incorrect math
high
Users can borrow more assets than they have deposited as collateral
high
Attackers can get most of RAACToken rewards by withdrawing dust amount from StabilityPool multiple times
high
Any attempt to liquidate a user will fail, because StabilityPool does not hold crvUSD during operational lifecycle
high
Double Usage Index Scaling in StabilityPool Liquidation Inflates Required CRVUSD Balance
high
Attackers can double voting power and veToken amount by locking and increasing
high
The total voting power of all veRAAC tokens is wrongly assigned
high
Ineffective Time-Weighted Average Implementation in Fee Distribution
high
Voting Power Snapshot Missing
medium
Missing StabilityPool Integration in `mintRewards` Function
medium
Gauge reward period can be extended indefinitely
medium
Incorrect utilization rate forces protocol to issue maximum rewards indefinitely
medium
Incorrect DebtToken totalSupply Scaling Breaks Interest Rate Calculations
medium
RToken.transferFrom() Does Not Scale User Balances Due to Stale Liquidity Index
medium
Liquidation Cannot Be Closed Even With Healthy Position Due To Strict Debt Check
medium
There is no logic checking for RAACNFT price staleness before minting it
medium
`RToken::calculateDustAmount` are incorrectly calculated, leading to not be able to transfer the accrued dust amount
medium
LendingPool.getUserDebt returns outdated value and can lead to liquidation failure
medium
Workingsupply would always be overwritten in boostcontroller.sol impacting reward calculations
medium
Permanent boost inflation through delegation removal in Boostcontroller.sol
medium
Incorrect Period Transition Logic in Reward Distribution
medium
Time-skew Attack in RWAGauge Weight Calculations Through Precision Gaming
medium
Multiple Token Management Lets Withdraw a Token Different than Deposited Token
medium
`RAACReleaseOrchestrator::emergencyRevoke()` fails to update `categoryUsed`, leading to token lockup and incorrect accounting
medium
Incorrect reward calculations in tick function
medium
Proposal Front-Running via Predictable Salt in `TimelockController::scheduleBatch`
medium
Cordinated group of attacker can artificially lower quorum threshold during active proposals forcing malicious proposals to pass without true majority support.
medium
RAACToken burns less tokens than expected when feeCollector is unset
medium
Flawed Boost Multiplier Calculation Always Yields Maximum Boost
medium
Pending fee not cleared and overwritten by updates via updateFeeType()
medium
Paused Protocol Prevents Critical Functions Including Debt Repayment and Liquidations
medium
RAACNFT wrongly suppose crvUSD to be equal to 1 dollar
medium
Emission Rate can be Manipulated (Locked, Higher or Lower)
medium
When bad debt is accumulated the loss is not distributed amongst all suppliers leading to a huge loss for the last supplier to withdraw
medium
Incorrect rewardRate management in BaseGauge
low
Emergency Timelock Bypass: No Enforced 1-Day Delay for Emergency Actions
low
Missing Controller Functions in GaugeController
low
Unauthorized Vote Casting Vulnerability
low
Impossible to rescue funds from `RToken` contract
low
Emergency withdraw functionality in veRAACToken takes longer than expected
low
Missing Checkpoint Reset in `veRAACToken::emergencyWithdraw` Function
low
Missing `BaseGauge::distributionCap` validation leads to over-emission of rewards
low
Hardcoded Emission Values Lead to Incorrect Reward Calculations
low
Deposits/Withdrawals can be DOS'ed if crvVault::withdraw produces any losses
Jan '25
high
Attacker can exploit getCreateAmount() to mint more than expected tokens
high
Protocol loses fee because claimFees() does not claim the accumulated fees as promised
medium
PoolSaleLimit can be breached in auctions as fee is not accounted for in calculations
medium
Flash loan can be used to breach PoolSaleLimit in auctions
medium
Auction can fail if USDC blacklists user after bid placement
Dec '24
high
OrderID generated by generatedOrderId() may not be unique and can overwrite existing order, causing funds to be lost
high
Funds can be stolen via modifying cancelled orders
high
Attacker can delete other user's orders due to lack of reentrancy protection in cancelOrder()
medium
performUpkeep() may fail when tokenIn is USDT due to allowance change from non-zero to non-zero value inside `execute()`
medium
PythOracle::currentValue() will always revert for prices which are not stale
Nov '24
Apr '24
high
Incorrect withdraw queue balance in TVL calculation
high
Withdrawals logic allows MEV exploits of TVL changes and zero-slippage zero-fee swaps
medium
Pending withdrawals prevent safe removal of collateral assets
medium
Not handling the failure of cross chain messaging
medium
Lack of slippage and deadline during withdraw and deposit
medium
Withdrawals and Claims are meant to be pausable, but it is not possible in practice
high
totalSupply is incorrectly calculated during revokeVestingSchedule()
high
depositReward() function reduces rewardRate incorrectly causing delayed reward distribution and can be used by a griefer
medium
OCL_ZVE::forwardYield() is susceptible to price manipulation attack due to the logic inside fetchBasis()
medium
distributeYield() calls earningsTrancheuse() with outdated emaSTT & emaJTT while calculating senior & junior tranche yield distributions
Mar '24
high
Validity and contests bond ca be incorrectly burned for the correct and ultimately verified transition
medium
Invocation delays are not honoured when protocol unpauses
medium
Proposers would choose to avoid higher tier by exploiting non-randomness of parameter used in getMinTier()
medium
The decision to return the liveness bond depends solely on the last guardian
medium
Incorrect __Essential_init() function is used in TaikoToken making snapshooter devoid of calling snapshot()
medium
Bridge watcher can forge arbitrary message and drain bridge
medium
retryMessage unable to handle edge cases.
medium
Malicious caller of `processMessage()` can pocket the fee while forcing `excessivelySafeCall()` to fail
Feb '24
high
Malicious user can stake an amount which causes zero curStakeAtRisk on a loss but equal rewardPoints to a fair user on a win
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
Fighters cannot be minted after the initial generation due to uninitialized `numElements` mapping
medium
NFTs can be transferred even if StakeAtRisk remains, so the user's win cannot be recorded on the chain due to underflow, and can recover past losses that can't be recovered(steal protocol's token)
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
DoS in `MergingPool::claimRewards` function and potential DoS in `RankedBattle::claimNRN` function if called after a significant amount of rounds passed.
Jan '24
medium
Incorrect calculation to check remaining ratio after reward in StableConfig.sol
medium
Incorrect assumption in PoolMath.sol can cause underflow when zapping is used
medium
StakingRewards pools are not given their promised share of rewards due to incorrect calculation
medium
Minimium Collateral Check Can Be Bypassed
medium
Suboptimal arbitrage implementation
medium
changeWallets() can be confirmed immediately after proposalWallets() by manipulating activeTimelock beforehand
medium
Ballots not yet past their deadline are incorrectly looped too by tokenWhitelistingBallotWithTheMostVotes()
medium
Adversary can prevent updating price feed addresses by creating poisonous proposals ending in `_confirm`
medium
SALT staker can get extra voting power by simply unstaking their xSALT
medium
Remove Liquidity has missing reserve1 DUST check, which can make reserve1 to be less than DUST
Dec '23
high
Rewards can be drained because of lack of access control
high
Looping over unbounded `pendingStakes` array can lead to permanent DoS and frozen funds
medium
No incentive to liquidate small positions could result in protocol going underwater
low
Removal of approved token from token manager can lead to unintended liquidation of vaults
low
`costInEuros` calculation will incur precision loss due to division before multiplication
low
Anyone with TST tokens can monitor the mempool and frontrun mint/burn functions to get EUROs rewards without even staking.
low
Lack of Minimum Amount Check in `SmartVaultV3::mint`, `SmartVaultV3::burn`, and `SmartVaultV3::swap` Can Result in Loss of Fees
low
Griefer can deny holders of their fair share of fees
low
Users with Negligible TST Holdings Might Not Receive Their Share of EUROs Fees
low
Incorrect value returned by position() function
low
User can get liquidated due to incorrect calculateMinimumAmountOut()
Nov '23
1.37 USDC • 1 total finding • Code4rena • t0x1c
#31
Oct '23
high
Attacker can drain all ETH from AuctionDemo when block.timestamp == auctionEndTime
high
Attacker can reenter to mint all the collection supply
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()`
medium
getPrice `salesOption` 2 can round down to the lower barrier, skipping the last time period
Sep '23
high
Users can avoid liquidation while being under the primary liquidation ratio if on the last short record
high
Flag can be overriden by another user
medium
Possible DOS on deposit(), withdraw() and unstake() for BridgeReth, leading to user loss of funds
medium
Rounding-up of user's `cRatio` causes loss for the protocol
medium
Primary short liquidation can not be completed in the last hour of the liquidation timeline
low
Loss of precision in `twapPriceInEther` due to division before multiplication
low
Lack of Duplicate ID Check in combineShorts Function
low
ETH cannot always be unstaked using Rocket Pool
low
Partial filled short does not reset liquidation flag after user gets fully liquidated, meaning healthy position will still be flagged if the rest of the order gets filled.
low
`Errors.InvalidTwapPrice()` is never invoked when `if (twapPriceInEther == 0)` is true
Aug '23
Jul '23
189.39 USDC • 7 total findings • CodeHawks • t0x1c
#10
high
Theft of collateral tokens with fewer than 18 decimals
medium
DSC protocol can consume stale price data or cannot operate on some EVM chains
medium
Chainlink oracle will return the wrong price if the aggregator hits `minAnswer`
medium
Lack of fallbacks for price feed oracle
medium
Too many DSC tokens can get minted for fee-on-transfer tokens.
medium
Protocol can break for a token with a proxy and implementation contract (like `TUSD`)
low
Precision loss when calculating the health factor