MultiSig Timelock

First Flight #55
Beginner FriendlyWallet
100 EXP
View results
Submission Details
Impact: high
Likelihood: high
Invalid

Signer Other Than Owner Unable to Propose Transaction

Signer Other Than Owner Unable to Propose Transaction

Description

Based on README protocol, all Signer should be able to propose transaction. However inside the protocol, only owner hold power to propose transaction.

function proposeTransaction(address to, uint256 value, bytes calldata data)
external
nonReentrant
noneZeroAddress(to)
onlyOwner // <@ onlyOwner has access to propose transaction
returns (uint256)
{
return _proposeTransaction(to, value, data);
}

Impact

High – As the protocol are designed that all signer (not only owner) should able to proposed, confirm, revoke and execute transaction. But the real implementation is only owner able to propose transaction.

Proof of Concepts

Add this function into the existing unit test

Run the function with forge test --match-test testProposedTransactionForNonOwner -vvvv

function testProposeTransactionForNonOwner() public grantSigningRoles {
vm.prank(SIGNER_TWO);
vm.expectRevert();
multiSigTimelock.proposeTransaction(SPENDER_ONE, OWNER_BALANCE_ONE, hex"");
}

Recommended mitigation

Change the logic function to grant the access for all signer

function proposeTransaction(address to, uint256 value, bytes calldata data)
external
nonReentrant
noneZeroAddress(to)
- onlyOwner
+ onlyRole(SIGNING_ROLE)
returns (uint256)
{
return _proposeTransaction(to, value, data);
}
Updates

Lead Judging Commences

kelechikizito Lead Judge
11 days ago
kelechikizito Lead Judge 4 days ago
Submission Judgement Published
Invalidated
Reason: Other

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!