30650 - [SC - Critical] Infinite minting of FLUX through voterpoke
Submitted on May 3rd 2024 at 01:32:01 UTC by @Django for Boost | Alchemix
Report ID: #30650
Report type: Smart Contract
Report severity: Critical
Target: https://github.com/alchemix-finance/alchemix-v2-dao/blob/main/src/Voter.sol
Impacts:
Manipulation of governance voting result deviating from voted outcome and resulting in a direct change from intended effect of original results
Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yield
Description
Brief/Intro
A user can mint infinite FLUX token by simply calling voter.poke() as many times as they want. Each time poke() is called, it subsequently calls _vote() which calls FLUX.accrueFlux(), allowing a user to mint at will.
Vulnerability Details
A user accrues FLUX through voting and resetting their token after each voting epoch. Quite simply, a user can use the voter.poke() function as many times as possible to accrue infinite unclaimed FLUX, and then claim the FLUX in the FluxToken.sol contract.
function poke(uint256 _tokenId) public {
/...
_vote(_tokenId, _poolVote, _weights, _boost);
}Impact Details
Infinite minting of FLUX will steal value from token holders
Infinite FLUX allows for infinite boosting of voting power and governance manipulation
Output from POC
The POC simply calls poke 10 times without changing the block number or timestamp.
Proof of Concept
Last updated
Was this helpful?