The specification states: Propose new transactions (permission is tied to the role, so any signer can propose).
However, the MultiSigTimelock::proposeTransaction function has an onlyOwner modifier, making it owner-exclusive.
The owner can unilaterally propose any transaction, and then simply wait for 2 other signers (totalling 3) to confirm it, effectively controlling all outgoing transactions
Likelihood:
High. Only onwer can propose transactions, since this is what the code states.
Impact:
Critical. This transforms the contract from a true multi-signature wallet to an owner-controlled wallet with advisory confirmations.
The owner becomes a single point of failure/control, defeating the core purpose of multi-signature security.
As demonstrated in the test case below, only the owner can propose transactions. If a non-owner attempts to propose a transaction, it results in a revert, showcasing the violation of the multi-signature principle.
Paste the following test case into test/MultiSigTimelock.t.sol to reproduce:
Replace onlyOwner with onlyRole(SIGNING_ROLE) in MultiSigTimelock::proposeTransaction
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.
The contest is complete and the rewards are being distributed.