set_deadline() writes the caller-provided deadline directly to fund.deadline without verifying it is in the future. A creator who passes deadline = 1 (Unix epoch) immediately places the campaign in an expired state: contribute() rejects all new deposits and refund() unlocks for all contributors. This can be used as a malicious emergency exit combined with S-03 — withdraw first, then set a past deadline to prevent any further analysis of the campaign's state.
Likelihood:
Client-side timestamp bugs (passing milliseconds instead of seconds, off-by-one errors, timezone mishandling) commonly produce past timestamps — accidental expiry is a realistic outcome for non-malicious creators
A malicious creator can deliberately set deadline = 1 to immediately trigger campaign expiry, blocking further contributions
Impact:
Setting a past deadline immediately halts all new contributions to an active campaign, potentially cutting short a successful fundraise at any point
All existing contributors can immediately claim refunds, collapsing the campaign even when it was progressing toward its goal
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.