The UpdateWeightRunner::setRuleForPool function is intended to be called only by pools during their creation. However, this function is defined as an external type without any restrictions, which means that anyone can call it.
The QuantAMMWeightedPool::initialize function only be called when a new pool is created. Within this function, there is a private method called QuantAMMWeightedPool::_setRule, which uses the UpdateWeightRunner::setRuleForPool function. This is the only approved way to use this method, and it should not be called separately. Calling UpdateWeightRunner::setRuleForPool directly will modify the state variables: poolOracles, poolBackupOracles, rules, and poolRuleSettings.
Since there are getter functions for all the poolOracles, poolBackupOracles, rules, and poolRuleSettings variables, a malicious user could create a fake pool, then call UpdateWeightRunner::setRuleForPool and use the getter functions to falsely validate this fake pool for certain target users, potentially exploiting them through other functions.
everybody could even call performUpdate function for the fake pool without any restriction.
Manual review
All weighted pools are originated from creation functions in the QuantAMMWeightedPoolFactory contract. So set the address of this contract in UpdateWeightRunner :
Then check the factory address with tx.origin in UpdateWeightRunner::setRuleForPool function:
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.