Smart Contract Security Researcher
Let the code do the talking, you just listen and catch bugs ;) | Found +100 H/M | 40+ audits
High
Total
Medium
Solo
Total
Total Earnings
#73 All Time
Payouts
1st Places
2nd Places
3rd Places
All
Sherlock
Code4rena
Cantina
CodeHawks
Jan '25
high
medium
medium
Dec '24
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.
medium
Incorrect referral fee calculations
medium
Missing option to remove tokens from the `isTokenSupport` mapping can result in huge financial loss for users and the protocol
Oct '24
Sep '24
medium
Stakers who are part of the sequencerSet and exit on the L1 may not be able to claim the comissions of the last epoch(s) when they were active
medium
Delegators can lose their rewards when a delegator has removed a delegatee and claims all of his rewards before delegating again to a previous removed delegatee.
Aug '24
Jul '24
high
Positive PnL is lost for all parties when liquidating an account, potentially causing that the MarginCollateralRecipient ends up receiving way less USD value than what it could have received.
high
Market Disruption and Financial Loss Post-Liquidation
high
Wrong parameter passed in `TradingAccount::deductAccountMargin` function that results in excess margin withdrawal
medium
Insufficient checks to confirm the correct status of the sequencerUptimeFeed
medium
A malicious User can DOS all offchain orders making them unexecutable and leaving the protocol in an insolvent state. Also all offchain Trades can also be DOSed for honest parties that do not meet the fillorder requirements (no try and catch)
medium
Liquidating positions of different accounts for the same market on the same block.timestamp uses the same fundingFeePerUnit regardless of the computed MarkPrice based on the size of the position been liqudiated.
low
QA Report - 0xStalin - Low Severities
low
Functions calling `verifyReport` to verify offchain prices from chainlink will fail
low
Deleting CollateralTypes from the CollateralLiquidationPriority allows traders to be liquidated for free and getting back their full collateral as if they were not liquidated.
low
UpgradeBranch.sol does not use _disableInitializers()
low
Missing expiration check in `Data Streams` report validation allows the use of expired report data
low
When transfering the NFT associated to a TradingAccount, the old owner can grief the new owner by leaving an opened MarketOrder that will be executed even though the old owner is not the owner of the TradingAccount.
Jun '24
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.
medium
Fragmentation fee is not taken if user compensates with newly created position
medium
Credit can be sold forcibly as `forSale` setting can be ignored via Compensate
medium
Users can not to buy/sell minimum credit allowed due to exactAmountIn condition
medium
LiquidateWithReplacement does not charge swap fees on the borrower
Apr '24
Mar '24
Findings not publicly available for private contests.
Feb '24
high
Wrong use of nftID to check if a Power farm position is an Aave position
high
Incorrect bad debt accounting can lead to a state where the `claimFeesBeneficial` function is permanently bricked and no new incentives can be distributed, potentially locking pending and future protocol fees in the `FeeManager` contract
medium
Borrowers can DoS liquidations by repaying as little as 1 share.
medium
Withdrawing uncollateralized deposits is possible even though the position is in liquidation mode
medium
Exiting a farm on mainnet assumes a peg of 1:1 when swapping stETH for ETH
Jan '24
Dec '23
high
The userGaugeProfitIndex is not set correctly, allowing an attacker to receive rewards without waiting
high
The creation of bad debt (`mark-down` of Credit) can force other loans in auction to also create bad debt
medium
Repayers using EOA accounts can be affected if baddebt is generated when they are repaying loans
medium
Replay attack to suddenly offboard the re-onboarded lending term
medium
LendingTerm::debtCeiling() can return wrong debt as the min() is evaluated incorrectly
Nov '23
medium
Oct '23
high
Lenders can escape the blacklisting of their accounts because they can move their MarketTokens to different accounts and gain the WithdrawOnly Role on any account they want
high
Borrower has no way to update `maxTotalSupply` of `market` or close market.
medium
Protocol markets are incompatible with rebasing tokens
medium
Blocked accounts keep earning interest contrary to the WhitePaper
Sep '23
high
if the Virtual Account's owner is a Contract Account (multisig wallet), attackers can gain control of the Virtual Accounts by gaining control of the same owner's address in a different chain
medium
Incorrect source address decoding in RootBridgeAgent and BranchBridgeAgent's _requiresEndpoint breaks LayerZero communication
medium
Depositors could lost all their depositted tokens (including the hTokens) if their address is blacklisted in one of all the depositted underlyingTokens
medium
If RootBridgeAgent.lzReceiveNonBlocking reverts internally, the native token sent by relayer to RootBridgeAgent is left in RootBridgeAgent
Aug '23
Jul '23
37.93 USDC • 1 total finding • CodeHawks • 0xstalin
#55
high
Increasing reserves breaks PrizePool accounting
high
Delegated amounts can be forcefully removed from anyone in the TwabController
high
`Vault.mintYieldFee` FUNCTION CAN BE CALLED BY ANYONE TO MINT `Vault Shares` TO ANY RECIPIENT ADDRESS
medium
Silent overflow could alter computation when calculating the vaultPortion in the PrizePool contract
medium
`VaultFactory` allows deployment of vaults with non-authentic `TwabController` and `PrizePool`
high
[HD05] Magnetar contract has no approval checking
high
Ability to steal user funds and increase collateral share infinitely in BigBang and Singularity
high
Tokens can be stolen from other users who have approved Magnetar
high
Anybody can buy collateral on behalf of other users without having any allowance using the multiHopBuyCollateral()
high
User's assets can be stolen when removing them from the Singularity market through the Magnetar contract
medium
`MagnetarV2#burst` double counts `msg.value` for `TOFT_WRAP` operation, making the transaction revert unless the user overpays
Jun '23
May '23
high
Incorrectly reading the offset from the received data parameter to get the depositNonce in the BranchBridgeAgent::anyFallback() function
high
Accessing the incorrect offset to get the nonce when flag is 0x06 in RootBridgeAgent::anyExecute() will lead to mark as executed incorrect nonces and could potentially cause a DoS
high
Multiple issues with decimal scaling will cause incorrect accounting of hTokens and underlying tokens
high
Use of slot0 to get sqrtPriceLimitX96 can lead to price manipulation.
medium
Inconsistently reading the encoded parameters received in the _sParams argument in the BranchBridgeAgent::clearTokens()
high
An Attacker can steal all the collateral by abusing the rebalance function and causing imbalances on the Uniswap Pool
high
Incorrectly calculation of the price in the StableOracleDAI Contract returns the price scaled up by an incorrect magnitude
high
Using incorrect addresses to initialize the Oracles
high
No deadline and no slippage protection when doing swaps to rebalance the pool
medium
Chainlink's latestRoundData return stale or incorrect result is not validated
high
Not using eMode's risk parameters configurations to calculate the maxBorrow/repayAmount when eMode is activated
medium
Using a deprecated Chainlink function to pull the asset's price from the Chainlink Oracle
medium
Functions implementing the `invokeApprove()` of the Invoke Library could revert for non-standard token like USDT
Apr '23