MultiSig Timelock

First Flight #55
Beginner FriendlyWallet
100 EXP
View results
Submission Details
Impact: high
Likelihood: high
Invalid

Timelock Can Be Permanently Disabled via Self-Call Governance Takeover

Root + Impact

Description

  • A timelock must guarantee that once configured, no actor (including the multisig itself) can remove or weaken the delay without first respecting the existing delay.

  • The multisig is allowed to execute calls to itself through the timelock, enabling a queued transaction to modify or remove the timelock configuration itself. This creates a self-referential governance vulnerability where the timelock protects everything except itself.

// @> Multisig can call itself via timelock
executeTransaction(
address(this),
0,
abi.encodeWithSelector(updateDelay.selector, 0)
);

Risk

Likelihood:

  • Governance systems routinely allow self-calls for upgrades.

Attack requires only signer collusion or key compromise — a realistic threat model.

Impact:

  • Permanent removal of timelock guarantees.

Immediate execution of malicious upgrades, asset drains, or signer replacement.

Proof of Concept

  • The timelock enforces delay on transactions, but not on mutations of the timelock itself, allowing governance capture.

// Step 1: Queue transaction to remove delay
submitTransaction(
address(this),
0,
abi.encodeWithSelector(setDelay.selector, 0)
);
// Step 2: Wait for current delay
confirmTransaction(txId);
// Step 3: Execute
executeTransaction(txId);
// Timelock is now disabled forever

Recommended Mitigation

- remove this code
+ add this code
+ require(
+ block.timestamp >= timelockChangeActivation,
+ "Timelock changes require extended delay"
+ );
Updates

Lead Judging Commences

kelechikizito Lead Judge 4 days ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Appeal created

pushprakash23 Submitter
3 days ago
kelechikizito Lead Judge
2 days ago
kelechikizito Lead Judge 2 days ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Support

FAQs

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

Give us feedback!