The data signed by the organizer to distribute the funds doesn't include the implementation address of the contest. In case of two contests of an organizer with the same contest id this signature can be reused to distribute the prizes.
The deployProxyAndDistributeBySignature() function uses the signature from the organizer to verify the distribution of prizes. The data fields covered by this signature are the contestid
and data
.
The contract uniquely identifies a contest with the tuple (organizer, contestid , implementation ). Hence it is possible for two contests with the same (organizer,contestid) pair and different implementation addresses (although this wouldn't be occurring under normal conditions). If two such contests are present and the organizer uses their signature to distribute the prizes for one of the contest, this same signature can be used by an attacker (a person who has received a prize in the first contest will be incentivized to do so) to distribute the prizes of the other contest also.
Unintended distribution of prizes can occur in very rare conditions.
Manual Review
Include the implementation address in the signature
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.