MultiSig Timelock

First Flight #55
Beginner FriendlyWallet
100 EXP
View results
Submission Details
Severity: medium
Valid

Bug Signer Revocation Does Not Invalidate Existing Confirmations in MultiSigTimelock.sol

Root + Impact

Description

  • Confirmations are counted numerically, not by active signer validity.

  • When a signer is revoked, their prior confirmations remain counted.

  • This creates inconsistent state where a transaction appears valid but cannot reach real consensus.

s_transactions[txnId].confirmations++; // @> No signer validity check

Risk

Likelihood:

  • Owner revokes a signer after confirmations exist

  • Happens naturally during governance changes

Impact:

  • Execution legitimacy becomes ambiguous

  • Governance disputes or frozen funds


PoC

// Alice, Bob, Charlie confirm tx
// Owner revokes Bob
// confirmations == 3, but only 2 valid signers remain
executeTransaction(txId); // Governance inconsistency

Mitigation

✅ Add signer-snapshot validation

struct Transaction {
...
address[] signersSnapshot;
}

Populate snapshot during proposal:

txn.signersSnapshot = s_signers;

Require confirmations only from snapshot signers.

Updates

Lead Judging Commences

kelechikizito Lead Judge 4 days ago
Submission Judgement Published
Validated
Assigned finding tags:

Stale Confirmation Vulnerability/Ghost Voting Issue

Support

FAQs

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

Give us feedback!