createPromotion()
Lack of input validation for _epochDuration
can potentially freeze promotion creator's funds
#106
Labels
Handle
WatchPug
Vulnerability details
https://github.com/pooltogether/v4-periphery/blob/0e94c54774a6fce29daf9cb23353208f80de63eb/contracts/TwabRewards.sol#L88-L116
In the current implementation of
createPromotion()
,_epochDuration
is allowed to be0
.However, when
_epochDuration = 0
, it will be impossible for users to claim the rewards, and the promotion creator won't be able to cancel it.PoC
createPromotion()
to create a promotion with the following parameters:USDC
10,000
0
10
100,000 USDC
was transferred from Alice to theTwabRewards
contract;claimRewards()
but the transaction always revert at_ticket.getAverageTotalSuppliesBetween()
->TwabLib.getAverageBalanceBetween()
due to div by 0.cancelPromotion()
to retrieve the funds, but it always reverts at_requirePromotionActive()
since the promotion already ended.As a result, Alice's
100,000 USDC
is frozen in the contract.Recommendation
Consider adding
require(_epochDuration > 0)
increatePromotion()
.The text was updated successfully, but these errors were encountered: