Security Researcher
We Secure Web3 π Request an audit on our website: https://t.co/34qoEZlpgd
High
Total
Medium
Solo
Total
Total Earnings
#30 All Time
Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
Mar '25
Collaborative Audit β’ Sherlock β’ KupiaSec
Jan '25
high
high
high
medium
medium
high
high
high
high
medium
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
high
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
medium
high
Users can redeem more than permitted by manipulating the `collateralLevel` from `< 120%` to `> 120%` through donations.
high
`LeverageToken` holders can drain the pool.
high
`COLLATERAL_THRESHOLD` should be set to `125%` instead of `120%`.
high
When Creating and Redeeming, the Protocol Fee is Not Updated
high
`BalancerRouter.joinBalancerPool()` Doesn't Refund Remaining Tokens
high
When Redeeming `LeverageToken`, the Redemption Price is Unfairly Compared with `BondToken`'s Market Price
medium
Once the total supply of `LeverageToken` reaches 0, it will never be minted again.
medium
`Pool.getRedeemAmount()` Could Revert Due to Integer Underflow
high
medium
medium
medium
medium
Findings not publicly available for private contests.
Dec '24
Collaborative Audit β’ Sherlock β’ KupiaSec
Findings not publicly available for private contests.
high
In `transferVesting`, the `grantorVesting.releaseRate` is calculated incorrectly, which leads to the sender being able to unlock more tokens than were initially locked.
high
Users can claim more that their actual allotment
high
`SecondSwap_Marketplace` vesting listing order affects how much the vesting buyers can claim at a given step
medium
Incorrect referral fee calculations
medium
Incorrect listing type validation bypasses enforcement of minimum purchase amount
medium
Price Granularity Limited by Payment Token Decimals: Cannot List Tokens Cheaper than 0.000001 USDT
medium
`buyFee` And `sellFee` Should Be Known Before Purchase
medium
Underflow in `claimable` DOSing `claim` Function
high
Title: Incorrect implementation of `LenderCommitmentGroupShares._afterTokenTransfer()` may lead to DoS of `LenderCommitmentGroup_Smart`
medium
Users can lower the interest rate by dividing a loan into multiple smaller loans
medium
The `totalPrincipalTokensRepaid` and `totalInterestCollected` may not be updated even when funds are already transferred
medium
Nov '24
Findings not publicly available for private contests.
Findings not publicly available for private contests.
Findings not publicly available for private contests.
Oct '24
Findings not publicly available for private contests.
Sep '24
medium
high
high
medium
medium
medium
Aug '24
high
The `api.burn` function should have cool down period
medium
The protocol should consider the variance of quote tokens' price
medium
Invalid Redstone oracle payload size prevents the protocol from working properly
medium
Protocol incompatibility with smart contract wallets
medium
Not decreasing oracle timestamp validation leads to DoS for protocol users
high
Incorrect `psmRa` in the `VaultLib._liquidatedLp()` function
high
The `DsFlashSwap.emptyReserve()` function incorrectly always returns 0
high
The `PsmLib.repurchase()` function doesn't increase the locked amount of `RA`
high
The `PsmLib.lvRedeemRaWithCtDs()` function doesn't decrease the locked amount of `RA`
high
The `FlashSwapRouter` mistakenly transfers certain `RA` tokens to `DS` buyers, resulting in financial losses for `lv` holders
medium
Incorrect implementation of the modifier `LVDepositNotPaused()`
high
Reentrancy Vulnerability Allows Bypass of Cooldown, Leading to Unfair Reward Extraction Through Flash Loan
high
Exposed `_removeCredIdPerAddress` & `_addCredIdPerAddress` allows anyone to cause issues to current holders as well as upcoming ones
medium
Refunds sent to incorrect addresses in certain cases
high
`executeLiquidationCall` utilizes wrong debt and collateral balance, disrupting whole liquidation process
high
`_repayDebtTokens` wrongly sets `vars.debtReserveCache.nextDebtShares` to incorrect value, leading to false `liquidityRate`, `borrowRate`
high
Wrong calculation of supply/debt balance of a position, disrupting core system functionalities
high
Incorrect deduction of `accruedToTreasuryShares` from totalSupply, causing loss of shares
medium
The `CuratedVault.reallocate` function will fail when `allocation.assets == uint256.max`, even though this scenario is possible
medium
medium
Jul '24
high
`mintToken()`, `mintWithBudget()`, and `forge()` in the `TraitForgeNft` Contract Will Fail Due to a Wrong Modifier Used in `EntropyGenerator.initializeAlphaIndices()`
high
The maximum number of generations is infinite
high
Number of entities in generation can surpass the 10k number
high
Wrong minting logic based on total token count across generations
medium
Lack of Slippage Protection in Dynamic Pricing Mint Function
medium
Funds can be locked indefinitely in NukeFund.sol
medium
Incorrect `isApprovedForAll` check in the `NukeFund.nuke()` function.
medium
There is no slippage check in the `nuke()` function.
medium
Forger Entities can forge more times than intended
medium
Pause and unpause functions are inaccessible
medium
NFTs mature too slowly under default settings.
medium
Discrepancy between nfts minted, price of nft when a generation changes & position of `_incrementGeneration()` inside `_mintInternal()` & `_mintNewEntity()`
medium
Incorrect check against golden entropy value in the first two batches
673.66 USDC β’ 3 total findings β’ Sherlock β’ KupiaSec
high
Slashing NativeVault will lead to locked ETH for the users
high
A `DoS` on snapshots due to a rounding error in calculations.
high
Violation of Invariant Allowing DSSs to Slash Unregistered Operators
medium
Delayed Slashing Window and Lack of Transparency for Pending Slashes Could Lead to Loss of Funds
medium
A snapshot may face a permanent DoS if both a slashing event occurs in the NativeVault and the staker's validator is penalized.
Findings not publicly available for private contests.
1,733.46 USDC β’ 10 total findings β’ Sherlock β’ KupiaSec
high
Improper `msg.sender` check in the `BribeRewarder._modify()` function
high
In the `Voter.vote()` function, `lockDuration` is used incorrectly instead of the remaining time
high
Pending rewards need to be processed when `BribeRewarder.Deposit()` is called
high
`BribeRewarder` has no sweeping mechanism
high
Incorrect looping in the `BribeRewarder.claim()` function
medium
The bribe reward mechanism is susceptible to exploitation by attackers
medium
The `MlumStaking._requireOnlyOperatorOrOwnerOf()` function always returns `true`
medium
The `MlumStaking.addToPosition()` function can be called even during the `emergencyUnlock` situation
medium
Unclaimed rewards from the `emergencyWithdraw()` function remain permanently locked in the `MlumStaking` contract
medium
The `BribeRewarder.fundAndBribe()` function will be reverted when using `fee-on-transfer` tokens
Findings not publicly available for private contests.
Jun '24
Findings not publicly available for private contests.
high
Risk of Overpayment Due to Race Condition Between repay and liquidateWithReplacement Transactions
high
Users won't liquidate positions because the logic used to calculate the liquidator's profit is incorrect
high
When `sellCreditMarket()` is called to sell credit for a specific cash amount, the protocol might receive a lower swapping fee than expected.
high
The collateral remainder cap is incorrectly calculated during liquidation
medium
Fragmentation fee is not taken if user compensates with newly created position
medium
`executeBuyCreditMarket` returns the wrong amount of cash and overestimates the amount that needs to be checked in the variable pool
medium
Sandwich attack on loan fulfillment will temporarily prevent users from accessing their borrowed funds
medium
Users can not to buy/sell minimum credit allowed due to exactAmountIn condition
medium
Multicall does not work as intended
medium
LiquidateWithReplacement does not charge swap fees on the borrower
Findings not publicly available for private contests.
Findings not publicly available for private contests.
May '24
high
The `AccountFacet.batchUpdateAccountToken()` function is missing a caller authorization check
high
The `PositionMarginProcess.updateAllPositionFromBalanceMargin()` function is passing an incorrect parameter to the `updatePositionFromBalanceMargin()` function call
high
When withdrawing funds, the `PositionMarginProcess.updatePositionFromBalanceMargin()` function may not operate correctly
high
The `PositionMarginProcess.updatePositionFromBalanceMargin()` function calculates the `changeAmount` after modifying the storage variable
medium
In the `AssetsProcess.deposit()` function, the user collateral cap check is performed using the outdated token amount, instead of the newly updated value
medium
The `AssetsProcess.withdraw()` function doesn't update the `CommonData`
medium
The `lossFee` is always 0 in the `GasProcess.processExecutionFee()` function
medium
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
high
ETH withdrawals from EigenLayer always fail due to `OperatorDelegator`'s nonReentrant `receive()`
high
Incorrect calculation of queued withdrawals can deflate TVL and increase ezETH mint rate
medium
Pending withdrawals prevent safe removal of collateral assets
medium
Deposits will always revert if the amount being deposited is less than the bufferToFill value
high
Incomplete TVL Calculation in `AerodromeConnector::_getPositionTVL` Function.
high
`executeWithdraw` may be blocked if any of the users are blacklisted from the `baseToken`
high
`NoyaValueOracle.getValue` returns an incorrect price when a multi-token route is used
high
Base tokens like USDT, USDC having different decimals on different chains can have their TVL updated incorrectly
high
Numerous errors when calculating the TVL for the MorphoBlue connector
high
In Dolomite, when opening a borrow position, the holding position in the Registry will never be updated due to the removePosition flag being set to true
high
It is possible to open insolvent position is Silo connector, due to missing check in borrow function
medium
The modifier `onlyExistingRoute` works incorrectly
medium
Incorrect Return Value in `CompoundConnector.getBorrowBalanceInBase()` Affecting TVL Calculation
medium
`borrowAndSupply()` and `withdraw()` of `FraxConnector` should not be blocked when `maxLTV` of the Frax pair is 0
medium
Missing calls to `_updateTokenInRegistry` leads to incorrect state of tokens in registry
medium
Incorrect modifier condition
medium
Balancer flashloan contract can be DOSed completely by sending 1 wei to it
medium
Dust donation might DOS all connectors to create new holding positions, by preventing removing existing holding positions
high
A sandwich attack can potentially take most of the interest earned within the `LenderCommitmentGroup_Smart` contract
high
`_collateralAmount` is multiplied by `STANDARD_EXPANSION_FACTOR` unreasonably in the collateral check of the `LenderCommitmentGroup_Smart.acceptFundsForAcceptBid()` function.
high
The collateral tokens withdrawn `by liquidateDefaultedLoanWithIncentive()` will be frozen in the `LenderCommitmentGroup_Smart` contract.
high
The `LenderCommitmentGroup_Smart` contract cannot use USDT as its principal token, because `USDT.transfer()` does not return a boolean value.
medium
The interest rate model should be improved in the `LenderCommitmentGroup_Smart`.
medium
The newly added contracts will not work well on fee-on-transfer tokens, because there is no consideration for fee on transfer.
medium
`FlashRolloverLoan_G5` cannot work well with some LenderCommitForwarders including the `SmartCommitmentForwarder` contract.
medium
A user can borrow liquidity, even though `getPrincipalAmountAvailableToBorrow() < 0`.
high
Improper Reference in `FeeManager::_splitProtocolFee` Function
high
Incorrect Handling of Mint Fees in `Edition::mintBatch` Function
medium
Attackers can revert `TitlesGraph.acknowledgeEdge()` by front-running
medium
The function `TitlesGraph._setAcknowledged()` doesn't function properly due to its reliance on a memory variable
medium
Design Flaw in `Edition::_refundExcess` Function Implementation
medium
Improper handling of `msg.value` in the `Edition::mintBatch` function
medium
Lack of Functionality for Granting or Revoking Important Roles in the `Edition` Contract
medium
`Edition::transferWork` function doesn't change the receiver of the `_feeReceivers`
medium
The function `updateFloatingDebt` must be called before every update of the `floatingAssets`, `floatingDebt` and `floatingBackupBorrowed` variables.
medium
Anyone can allow others' assets to be used as collateral without approval of the asset owner because the `Market.borrow` function doesn't check if `assets > 0`
high
Attacker can make 0 value deposit() calls to deny user from redeeming or withdrawing collateral
high
Design flaw and mismanagement in vault licensing leads to double counting in collateral ratios and positions collateralized entirely with kerosine
high
Kerosene collateral is not being moved on liquidation, exposing liquidators to loss
high
Users can get their Kerosene stuck until TVL becomes greater than Dyad's supply
high
Missing enough exogeneous collateral check in `VaultManagerV2::liquidate` makes the liquidation revert even if (DYAD Minted > Non Kerosene Value)
high
User can get their Kerosene stuck because of an invalid check on withdraw
medium
Value of kerosene can be manipulated to force liquidate users
high
The depositors participating in the ITO may claim an airdrop amount different from the actual value
high
The `revokeVestingSchedule` function does not correctly track `_totalSupply`, `_totalSupplyCheckpoints` and `_checkpoints[account]`
high
A malicious attacker can make significant amount of reward token to be locked in `ZivoeRewards` by calling `depositReward()` frequently.
medium
The function `OCL_ZVE.pushToLockerMulti()` often results in a revert.
medium
Borrowers can circumvent fees by calling `OCC_Modular::callLoan` when the grace period exceeds the payment interval
Mar '24
Findings not publicly available for private contests.
medium
`AutoExit` could receive a reward calculated from the entire position's fund even if `onlyFee` is true in `AutoExit.execute()`.
medium
Wrong global lending limit check in `_deposit` function
medium
Large decimal of referenceToken causes overflow at oracle price calculation
medium
Users can lend and borrow above allowed limitations
Feb '24
high
high
high
high
high
high
high
high
high
medium
medium
medium
medium
medium
medium
high
`currentEpochsByAsset` is not increased in `RioLRTWithdrawalQueue.queueCurrentEpochSettlement()`
high
The `allocation` of shares has to be deleted, if `old cap > 0 && new cap == 0` in `OperatorRegistryV1Admin.setOperatorStrategyCap()`.
medium
Depositing tokens to EigenLayer strategy reverts because of dust differences.
high
A locked fighter can be transferred; leads to game server unable to commit transactions, and unstoppable fighters
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)
Findings not publicly available for private contests.
Jan '24
high
Whitelised accounts can be forcefully DoSed from buying curveTokens during the presale
high
Unauthorized Access to setCurves Function
medium
Protocol and referral fee would be permanently stuck in the Curves contract when selling a token
medium
onBalanceChange causes previously unclaimed rewards to be cleared
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
Dec '23
high
Incorrect amounts of ETH are transferred to the DAO treasury in `ERC20TokenEmitter::buyToken()`, causing a value leak in every transaction
medium
Once EntropyRateBps is set too high, can lead to denial-of-service (DoS) due to an invalid ETH amount
medium
`ERC20TokenEmitter::buyToken` function mints more tokens to users than it should do
medium
Since buyToken function has no slippage checking, users can get less tokens than expected when they buy tokens directly
medium
The quorumVotes can be bypassed
medium
Bidder can use donations to get VerbsToken from auction that already ended.
Nov '23
high
1.37 USDC β’ 1 total finding β’ Code4rena β’ KupiaSec
#31
Oct '23
Jul '23
high
Resetting delegation will result in user funds being lost forever
high
`Vault.mintYieldFee` FUNCTION CAN BE CALLED BY ANYONE TO MINT `Vault Shares` TO ANY RECIPIENT ADDRESS
high
`_amountOut` is representing assets and shares at the same time in the `liquidate` function
high
The `_currentExchangeRate` of the Vault contract can't increase, and always be lower than or equal to `_assetUnit`
medium
`Vault.mintWithPermit()` can be DOSed
Jun '23
May '23