MultiSig Timelock

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

Hard-coded Confirmation Threshold Can Brick the Wallet

Author Revealed upon completion

Root + Impact

Description

  • Normal behavior:
    The multisig wallet requires at least 3 confirmations before a transaction can be executed, ensuring decentralized approval.

  • Issue:
    The contract allows the signer count to drop below 3, while still requiring 3 confirmations. In this state, no transaction can ever be executed, permanently locking funds in the contract.

uint256 private constant REQUIRED_CONFIRMATIONS = 3;
function executeTransaction(uint256 txnId) external {
if (txn.confirmations < REQUIRED_CONFIRMATIONS) {
revert MultiSigTimelock__InsufficientConfirmations(...);
}
}

Risk

Likelihood:

  • Occurs when the owner deploys the contract and forgets to add enough signers

Occurs when signers are revoked over time during normal governance actions

Impact:

  • All funds become permanently inaccessible

Contract becomes non-functional despite holding ETH

Proof of Concept

// Initial state
signerCount = 1;
// Propose transaction
proposeTransaction(...);
// Confirm transaction
confirmTransaction(txId); // confirmations = 1
// Execution always fails
executeTransaction(txId); // reverts: insufficient confirmations

Recommended Mitigation

+ require(
+ s_signerCount >= REQUIRED_CONFIRMATIONS,
+ "Insufficient signers configured"
+ );

Support

FAQs

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

Give us feedback!