The initialize function sets an immutable minStake based on the deployer's input without enforcing any upper bound limits.
A malicious sponsor can set minStake to type(uint256).max, permanently blocking legitimate stakers while still accepting external donations via contributeBonus(). When the pool expires with zero stakers, the sponsor cleanly sweeps 100% of the trapped bonus.
Likelihood: Low
Sponsor deploys a pool with a functionally impossible minStake.
Contributors donate via contributeBonus() without verifying the pool's parameters.
Impact: High
Direct theft of funds from good-faith bonus contributors.
Sponsor permissionlessly sweeps 100% of the bonus pool via sweepUnclaimedBonus().
Sponsor initializes a pool with minStake_ = type(uint256).max.
Victim calls contributeBonus() to donate funds.
Legitimate stakers cannot enter; stake() reverts with BelowMinStake().
At expiration, totalEligibleStake == 0, allowing the sponsor to route the entire bonus balance to their recoveryAddress via sweepUnclaimedBonus().
Enforce a protocol-wide upper bound constraint for minStake during initialization to prevent the creation of un-stakeable honeypots.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.