Expected behavior:
Time-based logic (cooldowns and daily resets) should be robust to small, realistic variations in block timestamps and should not allow meaningful early bypass of rate limits or resets due to miner/validator timestamp adjustments.
Actual behavior:
The contract uses block.timestamp for the per-user cooldown (CLAIM_COOLDOWN) and for daily reset logic. Miners/validators can shift block timestamps slightly (on the order of seconds to a minute) which could be leveraged to marginally accelerate claims or cause earlier daily resets. While minor, this can be used repeatedly or combined with other conditions to gain advantage, especially on testnets where blocks and timestamps are less strictly enforced.
Root cause summary: relying directly on block.timestamp for critical timing without accounting for small timestamp manipulation or using coarse-grained comparisons (e.g., integer-day arithmetic) leaves the contract susceptible to small-but-real timing anomalies.
Likelihood
Moderate: Manipulation by miners/validators is not trivial on mainnet but is realistic on testnets. Because faucet operations are time-based and frequent, the condition is plausible in practice.
Impact
1.Small timing manipulations could allow a claimant to make a claim slightly earlier than intended (seconds/minutes), or cause the faucet daily counters to reset earlier than real-world 24-hour boundaries.
2.On a testnet (where miner/validator control is lower and block behavior can be noisier), this can be used to claim marginal extra advantage repeatedly.
3.Impact is functional fairness (not immediate fund loss), but repeated small advantages can cumulate.
Explanation: the test first performs a legitimate claim, then simulates a small timestamp advance. For large cooldowns (3 days) a single small warp won't bypass, but the test demonstrates the contract's dependency on block.timestamp and that a miner could, in principle, shift timestamps. On shorter cooldowns or when combined with other conditions, these shifts can enable earlier claims.
Use coarse-grained time units for resets and/or rely on block number for short windows. For daily resets, use integer-day arithmetic; for cooldowns consider using block numbers or document the acceptable trust model.
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.