MultiSig Timelock

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

No Graceful Handling of Permanently Failing Transactions

Author Revealed upon completion

Root + Impact

Description

  • Transactions should either execute or be cancelable.

  • If a transaction always reverts (bad calldata, incompatible target, logic change), it becomes stuck forever.

    // 4. Execute the transaction
    (bool success,) = payable(txn.to).call{value: txn.value}(txn.data);
    if (!success) {
    revert MultiSigTimelock__ExecutionFailed();
    }

Risk

Likelihood:

  • Happens when contract code at txn.to changes

  • Happens with malformed calldata

Impact:

  • ETH locked indefinitely

  • Operational deadlock

Proof of Concept

// txn.to is a contract that always reverts
// executeTransaction() can never succeed

Recommended Mitigation

Introduce transaction cancellation or failure state.

+ + enum TxStatus { Pending, Executed, Failed }
+ txn.status = TxStatus.Failed;

Support

FAQs

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

Give us feedback!