MultiSig Timelock

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

Bug Premature executed Flag Causes Permanent Transaction Lock in MultiSigTimelock.sol

Author Revealed upon completion

Root + Impact

Description

  • executed = true is set before the external call.

  • If the call fails, the transaction is permanently marked executed.

  • Funds become stuck without recovery.

txn.executed = true; // @>
(bool success,) = payable(txn.to).call{value: txn.value}(txn.data);
if (!success) revert MultiSigTimelock__ExecutionFailed();

Risk

Likelihood:

  • Recipient reverts

  • Gas griefing

  • Malformed calldata

Impact:

  • Transaction becomes unexecutable forever

  • Locked ETH


PoC

contract Reverter {
fallback() external payable {
revert();
}
}

Mitigation

❌ Remove

txn.executed = true;

✅ Add (after successful call)

(bool success,) = ...
require(success);
txn.executed = true;

Support

FAQs

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

Give us feedback!