Lack of Proxy address validation in the distributeByOwner() function enables the owner to move the funds of a contest before expiry
The Owner is supposed to move the funds of a contest only after its expiry.
The distributeByOwner function tries to enforce the expiration check of a contest by checking the expiration of the salt computed from the organizer, contestId and implementation parameters. But the proxy address from which the funds will be distributed is not validated to be linked with the same contest.
This allows the owner to move funds from a closed contest for which the proxy has been deployed by calling the distributeByOwner() function with the organizer, contestId and implementation parameters of an expired contest and the proxy address of the closed contest.
Breaking project assumptions.
Manual review
Compute proxy address from the salt instead of using an input.
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.