MultiSig Timelock

First Flight #55
Beginner FriendlyWallet
100 EXP
Submission Details
Impact: low
Likelihood: low

NatSpec Comment Mismatch: revokeSigningRole Prevents Removing Last Signer, Not First Signer

Author Revealed upon completion

Root + Impact

Description

  • The NatSpec comment for revokeSigningRole states that the function prevents revoking the first signer.

  • However, the actual logic prevents revoking the last remaining signer, as enforced by:

if (s_signerCount <= 1) {
revert MultiSigTimelock__CannotRevokeLastSigner();
}

Risk

Likelihood:

  • Reason 1 // The code behavior is correct, but misunderstanding could occur during maintenance or audits.

  • Reason 2

Impact:

  • Impact 1. No functional or security impact, but documentation inconsistency can mislead reviewers, contributors, or integrators.

  • Impact 2

Proof of Concept

// This informational issue can be verified via Remix or direct code inspection; therefore, no PoC is provided. A test can be supplied upon request.
// Deploy the contract with multiple signers.
// Revoke any signer except the last one — succeeds.
// Attempt to revoke the final remaining signer — transaction reverts.
// The revert reason and logic clearly enforce “MultiSigTimelock__CannotRevokeLastSigner”, not “first signer”.
// No exploitable behavior is observed.

Recommended Mitigation

- remove this code // Prevent revoking the first signer (would break the multisig), moreover, the first signer is the owner of the contract(wallet).
+ add this code /// @notice Prevents revoking the last remaining signer to avoid bricking the contract

Support

FAQs

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

Give us feedback!