The contract lacks sufficient restrictions on the Owner's privileges, leading to a critical centralization risk. The Owner maintains absolute authority to unilaterally change the contract's ownership and modify the signingRole by adding or revoking signers at will. This excessive power allows a malicious Owner to replace legitimate signers with controlled addresses, satisfying the multi-signature requirement to bypass security protocols.
Impact:
Transfer Ownership: Change the contract's Owner at any time without consensus.
Manipulate Signing Roles: Arbitrarily call grantSigningRole and revokeSigningRole. This allows a malicious owner to remove legitimate signers and replace them with controlled "sybil" accounts.
The Owner can unilaterally revoke two honest signers and grant signing roles to two controlled sub-wallets. After transferring contract ownership to one of these sub-wallets, the Owner would maintain signing authority across three separate accounts. They could then propose a transfer of all funds to their own address and provide all three required confirmations using these controlled wallets, bypassing the multisig consensus to drain the vault.
place the following code in MultiSigTimelockTest.t.sol:
Remove the onlyOwner modifier from sensitive administrative functions and replace it with a onlySelf modifier that restricts access to the contract itself. Functions such as grantSigningRole, revokeSigningRole, and transferOwnership should only be executable via the executeTransaction.
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.