ProxyFactory#_distribute performs a low level call to the proxy address specified as a parameter, and is missing a contract existence check. If an erroneous address is passed, as could be the case when the owner calls distributeByOwner, the call will succeed even though the tokens were not distributed.
_distribute is called by each entry point in the ProxyFactory contract, and the internal function lacks a contract existence check on the proxy address argument:
Call will succeed and events will be logged incorrectly, potentially deceiving users/devs into thinking tokens were distributed.
Manual review
Implement a contract existence check in _distribute:
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.