The ProxyFactory::deployProxyAndDistributeBySignature() function helps to deploy proxy contract and distribute prize on behalf of organizer. The problem is that there is no implementation that helps to cancel the given signature.
The ProxyFactory::deployProxyAndDistributeBySignature() function helps to deploy proxy contract and distribute prize on behalf of organizer.
The hash contains the next parameters keccak256(abi.encode(contestId, data)) (code line 159) and the data parameter is the distribute selector and the function parameters data = abi.encodeWithSelector(Distributor.distribute.selector, jpycv2Address, winners, percentages_, "");.
The problem is that the sighature can not be cancelled by the organizer therfore the caller can distribute the prizes wrongly. Please see the next scenario:
Organizer creates the signature using the winner1 percentage 90% and winner2 percentage 5%.
The caller waits until the close time is reached. Meanwhile for some reason, the organizer wants to change the winners percentages but since there is no any feature that helps to cancel the signatures, the caller who owns the signature, can still call with the wrong winners.
Caller distributes to undesired winners.
The signature can not be cancelled by the organizer. There could be situations where the organizer may want to change the winners/percentages before the caller who owns the signature calls distribute function.
Manual review
Implements a feature that helps to cancel a given signature by the organizer.
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.