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

WATCHPUG

Security Researcher

Contact Me

High

2

Solo

183

Total

Medium

11

Solo

235

Total

$1.06M

Total Earnings

#4 All Time

106x

Payouts

gold

32x

1st Places

silver

15x

2nd Places

bronze

18x

3rd Places

All

Sherlock

Code4rena

Sep '23

Allo V2

Allo V2

32,731.04 USDC • 10 total findings • Sherlock • WATCHPUG

#8

high

`RFPSimpleStrategy` Winning bidder can front-run the `_allocate()` transaction and change the `proposalBid` with `registerRecipient()`.

high

`QVSimpleStrategy._allocate()` does not update `allocator.voiceCredits` as expected, causing the upper limit of `maxVoiceCreditsPerAllocator` to be ineffective.

medium

Wrong implementation of `RFPSimpleStrategy#setMilestones()`

medium

`QVBaseStrategy._qv_allocate()` mistakenly included `_allocator.voiceCreditsCastToRecipient[_recipientId]`, causing `_recipient.totalVotesReceived` to increase.

medium

`distribute()` may be distributed in unexpected proportions due to the lack of guarantee that `distribute()` is executed after all `allocate()`.

medium

`RFPSimpleStrategy` does not work when configured with `useRegistryAnchor == true`

medium

Fee on transfer token is not supported properly.

medium

Wrong implementation of `NOT_ENOUGH_FUNDS` check in `_distribute()`.

medium

`QVSimpleStrategy` cannot fund pools with NATIVE token due to lack of `receive() external payable {}` method.

medium

`QVBaseStrategy.reviewRecipients()`'s voting mechanism lacks a record of the voting target content (the recipient state it targets), resulting in different starting states for votes after the recipient state changes.

Jul '23

Perennial V2

Perennial V2

77,578.57 USDC • 6 total findings • Sherlock • WATCHPUG

bronze

high

`settle(address(0))` can result in incorrect `assets` and `shares` due to a miscalculation that mistakenly treats the global account as a local account.

high

New orders should request for a new oracle version at `currentTimestamp` (the next whole hour) instead of the current time (`block.timestamp`)

high

Protocol's fee is claimed by the factory, but there is no way to move tokens out.

medium

`_accumulateFunding()` maker will get the wrong amount of funding fee.

medium

`Liquidation` should not put the market into a worse state (more bad debt).

medium

`OracleVersion latestVersion` of `Oracle.status()` may go backwards when updating to a new oracle provider and result in wrong settlement in `_processPositionLocal()`.

May '23

USSD - Autonomous Secure Dollar

USSD - Autonomous Secure Dollar

7,992.30 USDC • 14 total findings • Sherlock • WATCHPUG

gold

high

Lack of access control for `mintRebalancer()` and `burnRebalancer()`

high

Uniswap v3 pool token balance proportion does not necessarily correspond to the price, and it is easy to manipulate.

high

`getOwnValuation()` can easily be manipulated to trigger `rebalance()`.

high

Wrong Oracle feed addresses

high

`StableOracleDAI` is improperly implemented.

high

UniV3 Router's `ExactInputParams` must have a deadline set. Leaving it at the default value of 0 will result in a revert.

high

`USSDRebalancer.SellUSSDBuyCollateral()` dose not works as it always reverts at L201

high

Incorrect arithmetic expression will cause `BuyUSSDSellCollateral()` to revert as it attempts to facilitate a swap with a zero amount.

high

Oracle price should be denominated in DAI instead of USD

medium

Using the collateral assets' oracle price at 100% of its value to mint USSD without a fee can be used for arbitrage.

medium

`BuyUSSDSellCollateral()` relies on the settings and assumption about the value of certain collateral

medium

Chainlink's `latestRoundData` might return stale or incorrect results

medium

`BuyUSSDSellCollateral()` may revert due to underflow when DAI depeg

medium

Lack of Redeem Feature

Dec '22

NounsDAO

NounsDAO

7,009.96 USDC • 4 total findings • Sherlock • WATCHPUG

gold

medium

The rather harsh requirement of `tokenAmount` makes it inapplicable for certain tokens

medium

Lack of sanity check for `stoptime`

medium

`rescueERC20` should allow the payer to claw back overpaid amount

medium

Unnecessary precision loss in `_recipientBalance()`

Nov '22

Sentiment Update #2

Sentiment Update #2

5,818.18 USDC • 1 total finding • Sherlock • WATCHPUG

silver

medium

[WP-M1] getRewards() can be triggered by external parties which will result in the rewards not be tracking properly by the system

Telcoin

Telcoin

8,004.50 USDC • 3 total findings • Sherlock • WATCHPUG

gold

medium

`FeeBuyback` native token can not be rescued

medium

Unsafe ERC20 methods

medium

Flashloan `TEL` tokens to stake and exit in the same block can fake a huge amount of stake with minimal material cost

Bull v Bear

Bull v Bear

4,638.03 USDC • 3 total findings • Sherlock • WATCHPUG

bronze

high

Bull can prevent `settleContract()`

high

Bull can `transferPosition()` to `address(0)` and the original order can be matched again

medium

`withdrawToken()` should be able to specify the `recipient` in calldata

FrankenDAO

FrankenDAO

6,711.54 USDC • 3 total findings • Sherlock • WATCHPUG

#10

high

Unbounded `_unlockTime` allows the attacker to get a huge `stakedTimeBonus` and dominate the voting

medium

`queue()` should increase `proposalsPassed` instead of `proposalsCreated`

medium

Using `ERC721.transferFrom()` instead of `safeTransferFrom()` may cause the user's NFT to be frozen in a contract that does not support ERC721

Float Capital

Float Capital

23,123.35 USDC • 2 total findings • Sherlock • WATCHPUG

gold

medium

An update gap in Chainlink's feed can malfunction the whole market

medium

`price` can be 0 due to precision loss and further cause `_rebalancePoolsAndExecuteBatchedActions()` to revert

Oct '22

Mover

Mover

19,430.70 USDC • 2 total findings • Sherlock • WATCHPUG

gold

high

Attacker can steal the accumulated topup fees in the `topupproxy` contract's balance

medium

`exchangeFee` can be escaped

Merit Circle

Merit Circle

8,924.92 USDC • 7 total findings • Sherlock • WATCHPUG

gold

high

`increaseLock()` should read `userDeposit[_receiver]` instead of `depositsOf[_msgSender()]`

high

Extend lock period should never result in a decrease of overall rewards (`total length of locked period * shares`)

medium

First user can inflate `pointsPerShare` and cause `_correctPoints()` to revert due to overflow

medium

Front run `distributeRewards()` can steal the newly added rewards

medium

`escrowedReward` will be frozen in the contract if `escrowPool == address(0)` but `escrowPortion > 0`

medium

Expired locks should not continue to earn rewards at the original high multiplier rate

medium

Curve points should be guaranteed to be monotonic increasing

Mycelium

Mycelium

5,798.20 USDC • 5 total findings • Sherlock • WATCHPUG

gold

high

Attacker can manipulate the pricePerShare to profit from future users' deposits

medium

Frontrun `deposit()` can cause the depositor to lose all the funds

medium

Lack of sanity checks for new plugin address in `addPlugin()`

medium

When one of the plugins is broken or paused, `deposit()` or `withdraw()` of the whole Vault contract can malfunction

medium

`_withdrawFromPlugin()` will revert when `_withdrawalValues[i] == 0`

Aug '22

Sentiment

Sentiment

48,878.19 USDC • 10 total findings • Sherlock • WATCHPUG

gold

high

`UniV2LPOracle` will malfunction if token0 or token1's `decimals != 18`

high

`ChainlinkOracle.sol#getPrice()` The price will be wrong when the token's USD price feed's `decimals != 8`

high

Tokens received from Curve's `remove_liquidity()` should be added to the assets list even if `_min_amounts` are set to `0`

high

A malicious early user/attacker can manipulate the LToken's pricePerShare to take an unfair share of future users' deposits

high

`ERC4626Oracle` Price will be wrong when the ERC4626's `decimals` is different from the underlying token’s decimals

high

`updateState()` should be called in `depositEth()` and `redeemEth()`

medium

Accounts with ETH loans can not be liquidated if LEther's underlying is set to `address(0)`

medium

`Reserves` should not be considered part of the available liquidity while calculating the interest rate

medium

Turning `isCollateralAllowed[token]` from `true` to `false` with `toggleCollateralStatus()` won't disallow the token to be continued used as collateral

medium

Lack of price freshness check in `ChainlinkOracle.sol#getPrice()` allows a stale price to be used

Jun '22

Nibbl contest

Nibbl contest

1,914.55 USDC • 3 total findings • Code4rena • WatchPug

#6

medium

NibblVault: In the buy function, users can avoid paying fees

medium

`Twav.sol#_getTwav()` will revert when timestamp > 4294967296

medium

`_updateTwav()` and `_getTwav()` will revert when cumulativePrice overflows

Yieldy contest

Yieldy contest

859.19 USDC • 3 total findings • Code4rena • WatchPug

#16

high

`Staking.sol#stake()` DoS by staking 1 wei for the recipient when `warmUpPeriod > 0`

medium

Arbitrage on `stake()`

medium

`_storeRebase()` is called with the wrong parameters

Illuminate contest

Illuminate contest

2,001.06 USDC • 6 total findings • Code4rena • WatchPug

#8

high

Tempus lend method wrongly calculates amount of iPT tokens to mint

high

Unable to redeem from Notional

high

`Redeemer.sol#redeem()` can be called by anyone before maturity, which may lead to loss of user funds

high

[H-05] Not minting iPTs for lenders in several lend functions

high

Pendle Uses Wrong Return Value For `swapExactTokensForTokens()`

medium

Swivel lend method doesn't pull protocol fee from user

Infinity NFT Marketplace contest

Infinity NFT Marketplace contest

1,437.33 USDC • 5 total findings • Code4rena • WatchPug

#7

high

Maker buy order with no specified NFT tokenIds may get fulfilled in `matchOneToManyOrders` without receiving any NFT

high

Accumulated ETH fees of InfinityExchange cannot be retrieved

medium

Maker order buyer is forced to reimburse the gas cost at any `tx.gasprice`

medium

Protocol fee rate can be arbitrarily modified by the owner and the new rate will apply to all existing orders

medium

InfinityExchange computes gas refunds in a way where the first order's buyer pays less than the later ones

Canto contest

Canto contest

16,676.35 USDC • 11 total findings • Code4rena • WatchPug

gold

high

`zeroswap/UniswapV2Library.sol` Wrong init code hash in `UniswapV2Library.pairFor()` will break `UniswapV2Oracle`, `UniswapV2Router02`, `SushiRoll`

high

`lending-market/NoteInterest.sol` Wrong implementation of `getBorrowRate()`

high

`lending-market/Note.sol` Wrong implementation of access control

high

Stealing Wrapped Manifest in WETH.sol

high

WETH.sol computes the wrong totalSupply()

high

Anyone can set the `baseRatePerYear` after the `updateFrequency` has passed

high

Transferring any amount of the underlying token to the CNote contract will make the contract functions unusable

high

Anyone can create Proposal Unigov Proposal-Store.sol

high

Comptroller uses the wrong address for the WETH contract

high

AccountantDelegate: sweepInterest function will destroy the cnote in the contract.

medium

`zeroswap/UniswapV2Pair.sol` Token reserves per lp token can be manipulated due to lack of `MINIMUM_LIQUIDITY` when minting the first liquidity with `migrator`

Connext Amarok contest

Connext Amarok contest

12,411.35 USDC • 3 total findings • Code4rena • WatchPug

bronze

high

Wrong implementation of `withdrawAdminFees()` can cause the `adminFees` to be charged multiple times and therefore cause users' fund loss

high

`PortcalFacet.repayAavePortal()` can trigger an underflow of `routerBalances`

medium

Tokens with `decimals` larger than `18` are not supported

May '22

Backd Tokenomics contest

Backd Tokenomics contest

9,683.68 USDC • 3 total findings • Code4rena • WatchPug

gold

high

`Minter.sol#startInflation()` can be bypassed

medium

`BkdLocker#depositFees()` can be front run to steal the newly added rewardToken

medium

`Minter.sol#_executeInflationRateUpdate()` `inflationManager().checkpointAllGauges()` is called after InflationRate is updated, causing users to lose rewards

veToken Finance contest

veToken Finance contest

739.6 USDT • 1 total finding • Code4rena • WatchPug

#24

medium

`VE3DLocker.sol` Wrong implementation of inversely traverse for loops always reverts

Velodrome Finance contest

Velodrome Finance contest

5,441.88 USDC • 5 total findings • Code4rena • WatchPug

#4

high

VotingEscrow's merge and withdraw aren't available for approved users

medium

Owner's delegates should be decreased in `_burn()`

medium

Malicious user can populate `rewards` array with tokens of their interest reaching limits of `MAX_REWARD_TOKENS`

medium

Wrong calculation for the new `rewardRate[token]` can cause some of the late users can not get their rewards

medium

Bribe.sol is not meant to handle fee-on-transfer tokens

Rubicon contest

Rubicon contest

6,358.48 USDC • 7 total findings • Code4rena • WatchPug

gold

high

`BathPair.sol#rebalancePair()` can be front run to steal the pending rebalancing amount

high

`BathToken.sol#_deposit()` attacker can mint more shares with re-entrancy from hookable tokens

high

First depositor can break minting of shares

medium

Inconsistent Order Book Accounting When Working With Transfer-On-Fee or Deflationary Tokens

medium

Outstanding Amount Of A Pool Reduced Although Tokens Are Not Repaid

medium

Use `safeTransfer()`/`safeTransferFrom()` instead of `transfer()`/`transferFrom()`

medium

`RubiconMarket.sol#isClosed()` always returns false, making the market can not be stopped as designed

Sturdy contest

Sturdy contest

3,059.61 USDC • 3 total findings • Code4rena • WatchPug

bronze

high

hard-coded slippage may freeze user funds during market turbulence

high

The check for value transfer success is made after the return statement in _withdrawFromYieldPool of LidoVault

medium

Withdrawing ETH collateral with max uint256 amount value reverts transaction

Aura Finance contest

Aura Finance contest

5,423.5 USDC • 1 total finding • Code4rena • WatchPug

#9

medium

`CrvDepositor.sol` Wrong implementation of the 2-week buffer for lock

Cally contest

Cally contest

2,239.52 USDC • 4 total findings • Code4rena • WatchPug

#11

high

[WP-H0] Fake balances can be created for not-yet-existing ERC20 tokens, which allows attackers to set traps to steal funds from future users

medium

Use safeTransferFrom instead of transferFrom for ERC721 transfers

medium

Owner can set the feeRate to be greater than 100% and cause all future calls to `exercise` to revert

medium

Vault is Not Compatible with Fee Tokens and Vaults with Such Tokens Could Be Exploited

Enso Finance contest

Enso Finance contest

8,775.02 USDT • Code4rena • WatchPug

#5

Alchemix contest

Alchemix contest

6,797.2 DAI • 1 total finding • Code4rena • WatchPug

#4

medium

[WP-H1] Debt can be repaid with a depegged underlyingToken, which can be exploited by arbitrageurs and drives the market price of alToken to match the worst depegged underlyingToken

FactoryDAO contest

FactoryDAO contest

1,823.44 DAI • 2 total findings • Code4rena • WatchPug

#8

high

SpeedBumpPriceGate: Excess ether did not return to the user

medium

`SpeedBumpPriceGate.sol#addGate()` Lack of input validation may casue div by 0 error

Cudos contest

Cudos contest

1,806.99 USDC • 3 total findings • Code4rena • WatchPug

#9

medium

Missing check in the updateValset function

medium

Admin drains all ERC based user funds using withdrawERC20()

medium

Protocol doesn't handle fee on transfer tokens

Forgotten Runes Warrior Guild contest

Forgotten Runes Warrior Guild contest

944.12 USDC • 3 total findings • Code4rena • WatchPug

#12

medium

Use of `.send()` May Revert if The Recipient's Fallback Function Consumes More Than 2300 Gas

medium

Many unbounded and under-constrained variables in the system can lead to unfair price or DoS

medium

Critical variables shouldn't be changed after they are set

bunker.finance contest

bunker.finance contest

98.13 USDC • Code4rena • WatchPug

#23

Apr '22

PoolTogether Aave v3 contest

PoolTogether Aave v3 contest

555.64 USDC • 1 total finding • Code4rena • WatchPug

#11

high

[WP-H1] A malicious early user/attacker can manipulate the vault's pricePerShare to take an unfair share of future users' deposits

AbraNFT contest

AbraNFT contest

4,704.84 MIM • 4 total findings • Code4rena • WatchPug

#4

high

The return value `success` of the get function of the INFTOracle interface is not checked

high

Lender is able to seize the collateral by changing the loan parameters

high

Mistake while checking LTV to lender accepted LTV

medium

Reentrancy at _requestLoan allows requesting a loan without supplying collateral

Backd contest

Backd contest

12,502.17 USDC • 6 total findings • Code4rena • WatchPug

bronze

medium

[WP-M8] `CompoundHandler#topUp()` Using the wrong function selector makes native token `topUp()` always revert

medium

[WP-M9] `CEthInterface#repayBorrowBehalf()` reading non-existing returns makes `_repayAnyDebt()` with CEther always revert

medium

[WP-M11] `CEthInterface#mint()` reading non-existing returns makes `topUp()` with native token alway revert

medium

Chainlink's latestRoundData might return stale or incorrect results

medium

`_decimalMultiplier` doesn't account for tokens with decimals higher than 18

medium

`call()` should be used instead of `transfer()` on an `address payable`

xTRIBE contest

xTRIBE contest

9,375 USDC • 1 total finding • Code4rena • WatchPug

#4

medium

[WP-H0] `xERC4626.sol` Some users may not be able to withdraw until `rewardsCycleEnd` the due to underflow in `beforeWithdraw()`

Phuture Finance contest

Phuture Finance contest

6,765.07 USDC • 2 total findings • Code4rena • WatchPug

gold

high

`UniswapV2PriceOracle.sol` `currentCumulativePrices()` will revert when `priceCumulative` addition overflow

medium

Chainlink's latestRoundData might return stale or incorrect results

JPEG'd contest

JPEG'd contest

11,826.24 USDC • 5 total findings • Code4rena • WatchPug

#4

high

Existing user’s locked JPEG could be overwritten by new user, causing permanent loss of JPEG funds

high

yVault: First depositor can break minting of shares

high

[WP-H22] Bad debts should not continue to accrue interest

medium

[WP-H9] `_swapUniswapV2` may use an improper `path` which can cause a loss of the majority of the rewardTokens

medium

Chainlink pricer is using a deprecated API

Backed Protocol contest

Backed Protocol contest

2,574.34 USDC • 3 total findings • Code4rena • WatchPug

#4

medium

`requiredImprovementRate` can not work as expected when `previousInterestRate` less than 10 due to precision loss

medium

`mintBorrowTicketTo` can be a contract with no `onERC721Received` method, which may cause the BorrowTicket NFT to be frozen and put users' funds at risk

medium

`sendCollateralTo` is unchecked in `closeLoan()`, which can cause user's collateral NFT to be frozen

Mar '22

Joyn contest

Joyn contest

1,096.81 USDC • 4 total findings • Code4rena • WatchPug

#9

high

Splitter: Anyone can call incrementWindow to steal the tokens in the contract

high

CoreCollection can be reinitialized

high

Funds cannot be withdrawn in `CoreCollection.withdraw`

high

Centralisation RIsk: Owner Of `RoyaltyVault` Can Take All Funds

Paladin contest

Paladin contest

3,113.81 USDC • 1 total finding • Code4rena • WatchPug

#4

high

`DropPerSecond` is not updated homogeneously, the rewards emission can be much higher than expected in some cases

Sublime contest

Sublime contest

5,134.83 USDC • 6 total findings • Code4rena • WatchPug

silver

high

Wrong implementation of `NoYield.sol#emergencyWithdraw()`

high

Wrong returns of `SavingsAccountUtil.depositFromSavingsAccount()` can cause fund loss

high

Aave's share tokens are rebasing breaking current strategy code

high

https://github.com/sublime-finance/sublime-v1/blob/46536a6d25df4264c1b217bd3232af30355dcb95/contracts/PooledCreditLine/LenderPool.sol#L404-L406

medium

`NoYield.sol` Tokens with fee on transfer are not supported

medium

[WP-M10] Lack of access control allow anyone to `withdrawInterest()` for any lender

LI.FI contest

LI.FI contest

2,306.5 USDC • 6 total findings • Code4rena • WatchPug

#11

medium

[WP-H7] Infinite approval to an arbitrary address can be used to steal all the funds from the contract

medium

DexManagerFacet: batchRemoveDex() removes first dex only

medium

cBridge integration fails to send native tokens

medium

Reputation Risks with `contractOwner`

medium

Anyone can get swaps for free given certain conditions in `swap`.

medium

`msg.value` is Sent Multipletimes When Performing a Swap

prePO contest

prePO contest

2,677.08 USDC • 2 total findings • Code4rena • WatchPug

bronze

high

First depositor can break minting of shares

medium

[WP-M10] Wrong formula of `getSharesForAmount()` can potentially cause fund loss when being used to calculate the `shares` to be used in `withdraw()`

Rolla contest

Rolla contest

24,383.67 USDC • 6 total findings • Code4rena • WatchPug

gold

high

[WP-H0] Wrong implementation of `EIP712MetaTransaction`

high

[WP-H2] `EIP712MetaTransaction.executeMetaTransaction()` failed txs are open to replay attacks

medium

COLLATERAL_MINTER_ROLE can be granted by the deployer of QuantConfig and mint arbitrary amount of tokens

medium

Usage of deprecated Chainlink functions

medium

[WP-M3] `OperateProxy.callFunction()` should check if the `callee` is a contract

medium

[WP-H6] Admin of the upgradeable proxy contract of `Controller.sol` can rug users

Maple Finance contest

Maple Finance contest

1,641.84 USDC • 3 total findings • Code4rena • WatchPug

#4

high

`makePayment()` Lack of access control allows malicious `lender` to retrieve a large portion of the funds earlier, making the borrower suffer fund loss

medium

Anyone can call `closeLoan()` to close the loan

medium

Unsafe implementation of `fundLoan()` allows attacker to steal collateral from an unfunded loan

Biconomy Hyphen 2.0 contest

Biconomy Hyphen 2.0 contest

18,811.46 USDT • 10 total findings • Code4rena • WatchPug

gold

high

[WP-H4] Deleting `nft Info` can cause users' `nft.unpaidRewards` to be permanently erased

high

[WP-H14] `LiquidityProviders.sol` The share price of the LP can be manipulated and making future liquidityProviders unable to `removeLiquidity()`

high

[WP-H17] Users will lose a majority or even all of the rewards when the amount of total shares is too large, due to precision loss

high

Wrong formula when add fee `incentivePool` can lead to loss of funds.

medium

[WP-H5] `LiquidityFarming.sol` Unbounded for loops can potentially freeze users' funds in edge cases

medium

A `pauser` can brick the contracts

medium

[WP-H23] Improper `tokenGasPrice` design can overcharge user for the gas cost by a huge margin

medium

Possible frontrun on deposits on LiquidityPool

medium

Sending tokens close to the maximum will fail and user will lose tokens

medium

Incentive Pool can be drained without rebalancing the pool

Timeswap contest

Timeswap contest

6,673.97 USDC • 5 total findings • Code4rena • WatchPug

silver

high

`TimeswapPair.sol#borrow()` Improper implementation allows attacker to increase `pool.state.z` to a large value

high

`TimeswapConvenience.sol#borrowGivenDebt()` Attacker can increase `state.y` to an extremely large value with a dust amount of `assetOut`

high

Manipulation of the Y State Results in Interest Rate Manipulation

high

[WP-H1] Wrong timing of check allows users to withdraw collateral without paying for the debt

medium

`TimeswapPair.sol#mint()` Malicious user/attacker can mint new liquidity with an extremely small amount of `yIncrease` and malfunction the pair with the maturity

Feb '22

Anchor contest

Anchor contest

28,522.98 UST • 4 total findings • Code4rena • WatchPug

silver

high

[WP-H3] `money-market-contracts/oracle#feed_prices()` delayed transaction may disrupt price feeds

medium

[WP-H0] When transferring tokens not in `whitelist` on Ethereum to Terra with `CrossAnchorBridge.depositStable()`, the funds may get frozen

medium

[WP-H2] `money-market-contracts/contracts/market` `claim_rewards` may revert due to `spend_limit` set on `distributor`

medium

[WP-H4] `anchor_basset_reward` pending yields can be stolen

Foundation contest

Foundation contest

7,181.55 USDC • 4 total findings • Code4rena • WatchPug

#4

high

An offer made after auction end can be stolen by an auction winner

medium

Primary seller can avoid paying the primary fee

medium

[WP-M5] Royalties can be distribution unfairly among `creatorRecipients` for NFT contracts with non-standard `getRoyalties()` returns

medium

[WP-M6] Inappropriate support of EIP-2981

PoolTogether TWAB Delegator contest

PoolTogether TWAB Delegator contest

913.72 USDC • Code4rena • WatchPug

bronze
SKALE contest

SKALE contest

14,892.99 USDC • 3 total findings • Code4rena • WatchPug

bronze

medium

[WP-H1] Transactions can be replayed when a connectedChain is removed and then reconnected

medium

[WP-H2] When transferring tokens native on SKALE to Ethereum with `TokenManagerERC20.exitToMainERC20()`, the tokens on the schain will be frozen on `TokenManagerERC20`, but they will not receive tokens on Ethereum

medium

[WP-H3] S2S Transfer from the origin schain to another schain with automatic deploy disabled can cause funds to be frozen

Hubble contest

Hubble contest

3,770.9 USDC • 3 total findings • Code4rena • WatchPug

#7

medium

[WP-H7] `InsuranceFund#syncDeps()` may cause users' fund loss

medium

Assets sent from MarginAccount to InsuranceFund will be locked forever

medium

Liquidations can be run on the bogus Oracle prices

Tribe Turbo contest

Tribe Turbo contest

8,600.99 USDC • 2 total findings • Code4rena • WatchPug

#4

high

TurboRouter: deposit(), mint(), createSafeAndDeposit() and createSafeAndDepositAndBoost() functions do not work

medium

[WP-M2] Wrong implementation of `TurboSafe.sol#less()` may cause boosted record value in TurboMaster bigger than actual lead to `BoostCapForVault` and `BoostCapForCollateral` to be permanently occupied

Redacted Cartel contest

Redacted Cartel contest

3,585.72 USDC • 5 total findings • Code4rena • WatchPug

silver

medium

transferBribes could transfer before proposal deadline + Input validation

medium

Wrong slippage check

medium

Changing `bribeVault` in `RewardDistributor.sol` will Lock Current ETH Rewards

medium

[WP-H0] `DEFAULT_ADMIN_ROLE` of `BribeVault` can steal tokens from users' wallets

medium

[WP-H2] Improper control over the versions of distributions' metadata may lead to repeated claims of rewards

Aave Lens contest

Aave Lens contest

12,374.72 USDC • 2 total findings • Code4rena • WatchPug

#4

medium

[WP-M1] Inappropriate handling of `referralFee` makes collecting Mirror fails without error when `referrerProfileId` is burned

medium

[WP-H3] Imprecise management of users' allowance allows the admin of the upgradeable proxy contract to rug users

Nested Finance contest

Nested Finance contest

90.97 USDC • 3 total findings • Code4rena • WatchPug

#17

medium

isResolverCached() will always return false after removing operator

medium

`NestedFactory.sol#_submitInOrders()` Wrong implementation cause users to be overcharged

medium

Ensure on-chain that cache is synced

Badger Citadel contest

Badger Citadel contest

1,287.74 USDC • 2 total findings • Code4rena • WatchPug

#8

medium

Seven ways in which the Owner and Proxy Admin can make users lose funds ("rug vectors")

medium

[WP-H3] `saleRecipient` can rug buyers

Concur Finance contest

Concur Finance contest

10,446.86 USDC • 12 total findings • Code4rena • WatchPug

silver

high

[WP-H8] `ConvexStakingWrapper.sol#_calcRewardIntegral` Wrong implementation can disrupt rewards calculation and distribution

high

[WP-H13] `MasterChef.sol` Users won't be able to receive the `concur` rewards

high

[WP-H14] `ConvexStakingWrapper`, `StakingRewards` Wrong implementation will send `concur` rewards to the wrong receiver

high

deposit in ConvexStakingWrapper will most certainly revert

medium

`MasterChef.updatePool()` Fails To Update Reward Variables If `block.number >= endBlock`

medium

[WP-M0] `USDMPegRecovery.sol#provide()` Improper design/implementation make it often unable to add liquidity to the `usdm3crv` pool

medium

[WP-H1] Rewards distribution can be disrupted by a early user

medium

[WP-H2] `ConvexStakingWrapper#deposit()` depositors may lose their funds when the `_amount` is huge

medium

[WP-H16] `MasterChef.sol` A `depositor` can deposit an arbitrary amount without no cost

medium

[WP-H28] `StakingRewards.sol#notifyRewardAmount()` Improper reward balance checks can make some users unable to withdraw their rewards

medium

[WP-H29] `StakingRewards.sol` `recoverERC20()` can be used as a backdoor by the `owner` to retrieve `rewardsToken`

medium

[WP-M17] `USDMPegRecovery.sol#withdraw()` withdraw may often fail

Jan '22

Yield-Convex contest

Yield-Convex contest

3,010.91 USDC • 2 total findings • Code4rena • WatchPug

bronze

medium

Rewards distribution can be disrupted by a early user

medium

Oracle data feed is insufficiently validated.

Notional contest

Notional contest

535.55 USDC • 2 total findings • Code4rena • WatchPug

#14

medium

`sNOTE.sol#_mintFromAssets()` Lack of slippage control

medium

Usage of deprecated ChainLink API in `EIP1271Wallet`

OpenLeverage contest

OpenLeverage contest

5,395.56 USDT • 1 total finding • Code4rena • WatchPug

#4

medium

`UniV2ClassDex.sol#uniClassSell()` Tokens with fee on transfer are not fully supported

Trader Joe contest

Trader Joe contest

1,506.17 USDT • 4 total findings • Code4rena • WatchPug

#13

medium

Use safeTransfer/safeTransferFrom consistently instead of transfer/transferFrom

medium

Pair creation can be denied

medium

ERC20 return values not checked

medium

`createRJLaunchEvent()` can be called by anyone with 1 Wei of `_token` and stop others from creating RJLaunchEvent with the same token anymore

ElasticSwap contest

ElasticSwap contest

33,760.19 USDC • 3 total findings • Code4rena • WatchPug

gold

high

[WP-H0] In the case of Single Asset Entry, new liquidity providers will suffer fund loss due to wrong formula of ΔRo

high

[WP-H2] Transferring `quoteToken` to the exchange pool contract will cause future liquidity providers to lose funds

medium

[WP-H1] The value of LP token can be manipulated by the first minister, which allows the attacker to dilute future liquidity providers' shares

Livepeer contest

Livepeer contest

23,665.13 tokens) • 6 total findings • Code4rena • WatchPug

gold

high

[WP-H5] `L1Migrator.sol#migrateETH()` dose not send `bridgeMinter`'s ETH to L2 causing ETH get frozen in the contract

medium

[WP-M0] `MINTER_ROLE` can be granted by the deployer of L2LivepeerToken and mint arbitrary amount of tokens

medium

[WP-M1] `BURNER_ROLE` can burn any amount of L2LivepeerToken from an arbitrary address

medium

[WP-M2] `DEFAULT_ADMIN_ROLE` can approve arbitrary address to spend any amount from the `L1Escrow` contract

medium

[WP-H3] `L1Migrator.sol#migrateETH()` Improper implementation of `L1Migrator` causing `migrateETH()` always reverts, can lead to ETH in `BridgeMinter` getting stuck in the contract

medium

[WP-M4] Unable to use `L2GatewayRouter` to withdraw LPT from L2 to L1, as `L2LPTGateway` does not implement `L2GatewayRouter` expected method

InsureDAO contest

InsureDAO contest

25,579.68 tokens) • 11 total findings • Code4rena • WatchPug

gold

high

Initial pool deposit can be stolen

high

backdoor in `withdrawRedundant`

high

[WP-H24] Wrong design/implementation of permission control allows malicious/compromised Registry or Factory admin to steal funds from users' wallet balances

high

[WP-H27] `IndexTemplate.sol#compensate()` will most certainly fail

high

[WP-H29] `Vault#setController()` owner of the Vault contracts can drain funds from the Vault

high

[WP-H30] A malicious/compromised Registry or Factory admin can drain all the funds from the Vault contracts

high

[WP-H33] `IndexTemplate.sol` Wrong implementation allows lp of the index pool to resume a locked `PayingOut` pool and escape the responsibility for the compensation

high

[WP-H36] Admin of the index pool can `withdrawCredit()` after `applyCover()` to avoid taking loss for the compensation paid for a certain pool

high

[WP-H39] `PoolTemplate.sol#resume()` Wrong implementation of `resume()` will compensate overmuch redeem amount from index pools

medium

[WP-M17] `Vault.sol` Tokens with fee on transfer are not supported

medium

Unbounded iteration over all indexes (2)

Sandclock contest

Sandclock contest

14,190.31 USDC • 9 total findings • Code4rena • WatchPug

gold

high

[WP-H12] `forceUnsponsor()` may open a window for attackers to manipulate the `_totalShares` and freeze users' funds at a certain deposit amount

high

deposit() function is open to reentrancy attacks

high

Vaults with non-UST underlying asset vulnerable to flash loan attack on curve pool

medium

[WP-H0] Late users will take more losses than expected when the underlying contract (`EthAnchor`) suffers investment losses

medium

[WP-H2] `NonUSTStrategy.sol` Improper handling of swap fees allows attacker to steal funds from other users

medium

[WP-M8] `totalUnderlyingMinusSponsored()` may revert on underflow and malfunction the contract

medium

[WP-H9] Centralization Risk: Funds can be frozen when critical key holders lose access to their keys

medium

Vault can't receive deposits if underlying token charges fees on transfer

medium

unsponsor, claimYield and withdraw might fail unexpectadly

XDEFI contest

XDEFI contest

10,032.52 USDC • 2 total findings • Code4rena • WatchPug

gold

high

Malicious early user/attacker can malfunction the contract and even freeze users' funds in edge cases

medium

`_safeMint` Will Fail Due To An Edge Case In Calculating `tokenId` Using The `_generateNewTokenId` Function

Timeswap contest

Timeswap contest

15,672.59 USDC • 5 total findings • Code4rena • WatchPug

silver

high

`TimeswapPair.sol#borrow()` Improper implementation allows attacker to increase `pool.state.z` to a large value

high

`TimeswapConvenience.sol#borrowGivenDebt()` Attacker can increase `state.y` to an extremely large value with a dust amount of `assetOut`

high

Manipulation of the Y State Results in Interest Rate Manipulation

high

[WP-H1] Wrong timing of check allows users to withdraw collateral without paying for the debt

medium

`TimeswapPair.sol#mint()` Malicious user/attacker can mint new liquidity with an extremely small amount of `yIncrease` and malfunction the pair with the maturity

Dec '21

Yeti Finance contest

Yeti Finance contest

9,204.87 USDC • 1 total finding • Code4rena • WatchPug

#5

medium

SHOULD CHECK RETURN DATA FROM CHAINLINK AGGREGATORS

NFTX contest

NFTX contest

6,794.49 USDC • 4 total findings • Code4rena • WatchPug

bronze

high

A vault can be locked from MarketplaceZap and StakingZap

high

The return value of the _sendForReceiver function is not set, causing the receiver to receive more fees

medium

`NFTXMarketplaceZap.sol#buyAnd***()` should return unused weth/eth back to `msg.sender` instead of `to`

medium

transfer return value is ignored

Amun contest

Amun contest

12,278.38 USDC • 4 total findings • Code4rena • WatchPug

gold

high

Unused ERC20 tokens are not refunded, and can be stolen by attacker

medium

ERC20 return values not checked

medium

`totalSupply` may exceed `LibBasketStorage.basketStorage().maxCap`

medium

Function `joinTokenSingle` in `SingleTokenJoin.sol` and `SingleTokenJoinV2.sol` can be made to fail

Sublime contest

Sublime contest

6,999.92 USDC • 6 total findings • Code4rena • WatchPug

gold

high

Wrong implementation of `NoYield.sol#emergencyWithdraw()`

high

Wrong returns of `SavingsAccountUtil.depositFromSavingsAccount()` can cause fund loss

high

Aave's share tokens are rebasing breaking current strategy code

high

https://github.com/sublime-finance/sublime-v1/blob/46536a6d25df4264c1b217bd3232af30355dcb95/contracts/PooledCreditLine/LenderPool.sol#L404-L406

medium

`NoYield.sol` Tokens with fee on transfer are not supported

medium

[WP-M10] Lack of access control allow anyone to `withdrawInterest()` for any lender

PoolTogether TwabRewards contest

PoolTogether TwabRewards contest

4,242.68 USDC • 4 total findings • Code4rena • WatchPug

gold

high

Malicious tickets can lead to the loss of all tokens

high

`createPromotion()` Lack of input validation for `_epochDuration` can potentially freeze promotion creator's funds

high

Contract does not work with fee-on transfer tokens

medium

`cancelPromotion()` Unable to cancel unstarted promotions

Perennial contest

Perennial contest

5,281.52 USDC • 1 total finding • Code4rena • WatchPug

silver

medium

Chainlink's `latestRoundData` might return stale or incorrect results

Kuiper contest

Kuiper contest

4,170.46 ETH • 7 total findings • Code4rena • WatchPug

bronze

high

`Basket.sol#auctionBurn()` A failed auction will freeze part of the funds

medium

`Auction.sol#settleAuction()` Mishandling bounty state could potentially disrupt `settleAuction()`

medium

`Basket.sol#handleFees()` could potentially cause disruption of minting and burning

medium

`Auction.sol#settleAuction()` late auction bond could potentially not being able to be settled, cause funds loss to bonder

medium

`Basket.sol#mint()` Malfunction due to extra `nonReentrant` modifier

medium

`Auction.sol#settleAuction()` Bonder may not be able to settle a bonded auction, leading to loss of funds

medium

Publisher can lock all user funds in the Basket in order to force a user to have their bond burned

Mellow Protocol contest

Mellow Protocol contest

22,148.26 USDC • 5 total findings • Code4rena • WatchPug

gold

high

`YearnVault.sol#pull()` will most certainly fail

high

AaveVault does not update TVL on deposit/withdraw

high

Wrong implementation of `performanceFee` can cause users to lose 50% to 100% of their funds

high

`UniV3Vault.sol#collectEarnings()` can be front run

medium

`ChiefTrader.sol` Wrong implementation of `swapExactInput()` and `swapExactOutput()`

Maple Finance contest

Maple Finance contest

57,118.76 USDC • 3 total findings • Code4rena • WatchPug

gold

high

`makePayment()` Lack of access control allows malicious `lender` to retrieve a large portion of the funds earlier, making the borrower suffer fund loss

medium

Anyone can call `closeLoan()` to close the loan

medium

Unsafe implementation of `fundLoan()` allows attacker to steal collateral from an unfunded loan

Nov '21

Streaming Protocol contest

Streaming Protocol contest

7,936.26 USDC • 5 total findings • Code4rena • WatchPug

bronze

high

ts.tokens sometimes calculated incorrectly

high

Wrong calculation of excess depositToken allows stream creator to retrieve `depositTokenFlashloanFeeAmount`, which may cause fund loss to users

high

Improper implementation of `arbitraryCall()` allows protocol gov to steal funds from users' wallets

medium

Storage variable unstreamed can be artificially inflated

medium

LockeERC20 is vulnerable to frontrun attack

Fei Protocol contest

Fei Protocol contest

6,967.18 USDC • Code4rena • WatchPug

gold
Malt Finance contest

Malt Finance contest

8,396.38 USDC • 5 total findings • Code4rena • WatchPug

gold

high

Timelock can be bypassed

high

`AuctionBurnReserveSkew.getPegDeltaFrequency()` Wrong implementation can result in an improper amount of excess Liquidity Extension balance to be used at the end of an auction

medium

Frontrunning in UniswapHandler calls to UniswapV2Router

medium

`MovingAverage.setSampleMemory()` may broke MovingAverage, making the value of `exchangeRate` in `StabilizerNode.stabilize()` being extremely wrong

medium

theft of system profit

Unlock Protocol contest

Unlock Protocol contest

12,005.46 USDC • 6 total findings • Code4rena • WatchPug

gold

high

`MixinTransfer.sol#transferFrom` Wrong implementation can potentially allows attackers to reverse transfer and cause fund loss to the users

high

Wrong design/implementation of freeTrial allows attacker to steal funds from the protocol

medium

Potential economic attack on UDT grants to the referrer

medium

Malicious user can get infinite free trial by repeatedly refund and repurchase right before the freeTrial ends

medium

Support of different ERC20 tokens

medium

Refund mechanism doesn't take into account that key price can change

Overlay Protocol contest

Overlay Protocol contest

2,458.72 ETH • 2 total findings • Code4rena • WatchPug

#8

medium

_totalSupply not updated in _transferMint() and _transferBurn()

medium

Improper Upper Bound Definition on the Fee

yAxis contest

yAxis contest

8,012.44 USDC • 3 total findings • Code4rena • WatchPug

gold

high

Controller does not raise an error when there's insufficient liquidity

high

An attacker can steal funds from multi-token vaults

high

`YaxisVaultAdapter.sol#withdraw()` will most certainly fail

BadgerDAO Zaps contest

BadgerDAO Zaps contest

12,462.74 USDC • 5 total findings • Code4rena • WatchPug

gold

high

`setGuardian()` Wrong implementation

medium

Improper implementation of slippage check

medium

Excessive `require` makes the transaction fail unexpectedly

medium

Missing `_token.approve()` to `curvePool` in `setZapConfig`

medium

No slippage control on `deposit` of IbbtcVaultZap.sol

Nested Finance contest

Nested Finance contest

6,092.37 USDC • 3 total findings • Code4rena • WatchPug

bronze

medium

isResolverCached() will always return false after removing operator

medium

`NestedFactory.sol#_submitInOrders()` Wrong implementation cause users to be overcharged

medium

Ensure on-chain that cache is synced

Vader Protocol contest

Vader Protocol contest

11,903.37 USDC • 8 total findings • Code4rena • WatchPug

silver

high

Early user can break `addLiquidity`

high

Lack of access control allow attacker to `mintFungible()` and `mintSynth()` with other user's wallet balance

high

`mintSynth()` and `burnSynth()` can be front run

high

`Synth` tokens can get over-minted

high

Wrong design/implementation of `addLiquidity()` allows attacker to steal funds from the liquidity pool

high

Wrong design of `swap()` results in unexpected and unfavorable outputs

high

LPs of VaderPoolV2 can manipulate pool reserves to extract funds from the reserve.

medium

Tokens with fee on transfer are not supported

FairSide contest

FairSide contest

5,600.54 ETH • 3 total findings • Code4rena • WatchPug

bronze

high

Anyone Can Arbitrarily Call `FSDVesting.updateVestedTokens()`

high

Beneficiary cant get `fairSideConviction` NFT unless they only claim once, and only after it's fully vested

medium

`user.creation` is updated incorrectly when the user tries to extend membership

Boot Finance contest

Boot Finance contest

7,101.6 USDC • 6 total findings • Code4rena • WatchPug

silver

high

Unable to claim vesting due to unbounded timelock loop

high

Contract BasicSale is missing an approve(address(vestLock), 2**256-1) call

high

Can not update target price

high

`SwapUtils.sol` Wrong implementation

medium

Overwrite benRevocable

medium

Unchecked transfers

Oct '21

Slingshot Finance contest

Slingshot Finance contest

971.12 ETH • 1 total finding • Code4rena • WatchPug

#8

medium

`initialBalance` for native token is wrong

BadgerDAO ibBTC Wrapper contest

BadgerDAO ibBTC Wrapper contest

5,224.98 ETH • 3 total findings • Code4rena • WatchPug

silver

high

Approved spender can spend too many tokens

high

The design of `wibBTC` is not fully compatible with the current Curve StableSwap pool

high

WrappedIbbtcEth contract will use stalled price for mint/burn if updatePricePerShare wasn't run properly

Mochi contest

Mochi contest

13,651.8 ETH • 7 total findings • Code4rena • WatchPug

silver

high

`FeePoolV0.sol#distributeMochi()` will unexpectedly flush `treasuryShare`, causing the protocol fee cannot be properly accounted for and collected

high

Anyone can extend withdraw wait period by depositing zero collateral

high

Vault fails to track debt correctly that leads to bad debt

high

`ReferralFeePoolV0.sol#claimRewardAsMochi()` Array out of bound exception

medium

A malicious user can potentially escape liquidation by creating a dust amount position and trigger the liquidation by themself

medium

Unchecked ERC20 transfer calls

medium

Chainlink's `latestRoundData` might return stale or incorrect results

Tally contest

Tally contest

15,827.11 ETH • 4 total findings • Code4rena • WatchPug

gold

high

Wrong calculation of `erc20Delta` and `ethDelta`

high

Arbitrary contract call allows attackers to steal ERC20 from users' wallets

medium

Swap.sol implements potentially dangerous transfer

medium

Unused ERC20 tokens are not refunded

Covalent contest

Covalent contest

11,088.93 ETH • 1 total finding • Code4rena • WatchPug

silver

high

Usage of an incorrect version of `Ownbale` library can potentially malfunction all `onlyOwner` functions

Ambire contest

Ambire contest

7,219.96 USDC • 2 total findings • Code4rena • WatchPug

bronze

high

`QuickAccManager.sol#cancel()` Wrong `hashTx` makes it impossible to cancel a scheduled transaction

high

Signature replay attacks for different identities (nonce on wrong party)

Union Finance contest

Union Finance contest

11,348 ETH • 2 total findings • Code4rena • WatchPug

silver

high

Wrong implementation of `CreditLimitByMedian.sol#getLockedAmount()` makes it unable to unlock `lockedAmount` in `CreditLimitByMedian` model

medium

Wrong implementation of `CreditLimitByMedian.sol#getLockedAmount()` will lock a much bigger total amount of staked tokens than expected

Tempus Finance contest

Tempus Finance contest

143.32 USDC • Code4rena • WatchPug

#10

Kuiper contest

Kuiper contest

1,325.19 USDC • 7 total findings • Code4rena • WatchPug

#4

high

`Basket.sol#auctionBurn()` A failed auction will freeze part of the funds

medium

`Auction.sol#settleAuction()` Mishandling bounty state could potentially disrupt `settleAuction()`

medium

`Basket.sol#handleFees()` could potentially cause disruption of minting and burning

medium

`Auction.sol#settleAuction()` late auction bond could potentially not being able to be settled, cause funds loss to bonder

medium

`Basket.sol#mint()` Malfunction due to extra `nonReentrant` modifier

medium

`Auction.sol#settleAuction()` Bonder may not be able to settle a bonded auction, leading to loss of funds

medium

Publisher can lock all user funds in the Basket in order to force a user to have their bond burned

Tracer contest

Tracer contest

8,903.6 tokens) • 1 total finding • Code4rena • WatchPug

silver

medium

`uncommit` sends tokens to the wrong user

PoolTogether v4 contest

PoolTogether v4 contest

15,404.54 USDC • 1 total finding • Code4rena • WatchPug

bronze

high

The formula of number of prizes for a degree is wrong

Sep '21

Sushi Trident contest phase 2

Sushi Trident contest phase 2

18,531.43 USDC • 6 total findings • Code4rena • WatchPug

bronze

high

`ConcentratedLiquidityPool.burn()` Wrong implementation

high

`ConcentratedLiquidityPoolManager`'s incentives can be stolen

high

`ConcentratedLiquidityPosition.sol#burn()` Wrong implementation allows attackers to steal yield

high

`ConcentratedLiquidityPosition.sol#collect()` Users may get double the amount of yield when they call `collect()` before `burn()`

medium

ConcentratedLiquidityPoolManager.sol#claimReward() and reclaimIncentive() will fail when incentive.token is token0 or token1

medium

Cannot claim reward

Wild Credit contest

Wild Credit contest

19,617.17 USDC • 2 total findings • Code4rena • WatchPug

gold

high

Liquidation can be escaped by depositing a Uni v3 position with 0 liquidity

high

Use of tokenB’s price instead of tokenA in determining account health will lead to protocol mis-accounting and insolvency

Kuiper contest

Kuiper contest

7,266.85 USDC • 7 total findings • Code4rena • WatchPug

gold

high

`Basket.sol#auctionBurn()` A failed auction will freeze part of the funds

medium

`Auction.sol#settleAuction()` Mishandling bounty state could potentially disrupt `settleAuction()`

medium

`Basket.sol#handleFees()` could potentially cause disruption of minting and burning

medium

`Auction.sol#settleAuction()` late auction bond could potentially not being able to be settled, cause funds loss to bonder

medium

`Basket.sol#mint()` Malfunction due to extra `nonReentrant` modifier

medium

`Auction.sol#settleAuction()` Bonder may not be able to settle a bonded auction, leading to loss of funds

medium

Publisher can lock all user funds in the Basket in order to force a user to have their bond burned

Sushi Trident contest phase 1

Sushi Trident contest phase 1

16,710.96 USDC • 5 total findings • Code4rena • WatchPug

bronze

high

`HybridPool`'s reserve is converted to "amount" twice

high

Overflow in the `mint` function of `IndexPool` causes LPs' funds to be stolen

high

Index Pool always swap to Zero

high

IndexPool's INIT_POOL_SUPPLY is not fair.

high

`IndexPool.mint` The first liquidity provider is forced to supply assets in the same amount, which may cause a significant amount of fund loss

Sushi Miso contest

Sushi Miso contest

2,734.22 USDC • 1 total finding • Code4rena • WatchPug

#7

high

`PostAuctionLauncher.sol#finalize()` Adding liquidity to an existing pool may allows the attacker to steal most of the tokens

yAxis contest

yAxis contest

979.62 tokens) • 3 total findings • Code4rena • WatchPug

#6

high

Controller does not raise an error when there's insufficient liquidity

high

An attacker can steal funds from multi-token vaults

high

`YaxisVaultAdapter.sol#withdraw()` will most certainly fail