52990 sc low uint8 truncation and missing cap on week index can return wrong zero jackpot amounts low contract fails to deliver promised returns
Submitted on: Aug 14th 2025 at 15:18:09 UTC by @daxun for Attackathon | Plume Network
Report ID: #52990
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/immunefi-team/attackathon-plume-network/blob/main/plume/src/spin/Spin.sol
Description
Brief / Intro
determineReward() computes:
uint8 weekNumber = uint8(getCurrentWeek());Past the designed 12-week campaign,
jackpotPrizes[weekNumber]often defaults to 0 (uninitialized), so winners can receive 0 unexpectedly.After 256 weeks, casting to
uint8wraps (mod 256) and can index an unintended bucket, again returning wrong prizes (commonly 0).
Vulnerability Details
initialize()only configures indices0..11. No guard exists indetermineReward()to zero out jackpots post-campaign or cap the index.getWeeklyJackpot()caps the display (if (weekNumber > 11) return (weekNumber, 0, 0);), but this guard is not used indetermineReward().
Impact Details
References
determineReward()(uint8 weekNumber = uint8(getCurrentWeek());)initialize()(only sets 0..11)getWeeklyJackpot()(has a cap that isn’t applied indetermineReward())
determineReward() (https://github.com/immunefi-team/attackathon-plume-network/blob/580cc6d61b08a728bd98f11b9a2140b84f41c802/plume/src/spin/Spin.sol#L286)
Proof of Concept
Was this helpful?