Unrestricted calldata allow high-impact execution under low-value timelock
The MultiSigTimelock contract allows the owner to propose arbitrary transactions containing an unrestricted bytes data.
Signers are required to confirm transactions, however:
The contract does not enforce any semantic checks on the calldata
The risk of a transaction is implicitly inferred only from the ETH value, not from the actual logic executed
Transactions with low or zero ETH value can still execute high-impact contract calls
As a result, signers may approve transactions that appear small (for example 0.1 ETH) while the calldata performs dangerous or irreversible actions, such as:
Granting approvals
Upgrading contracts
Changing critical configuration
Transferring tokens
Executing arbitrary external callS
The protocol relies entirely on off-chain human verification of calldata, which is unsafe and error-prone
No data validation :
Likelihood :
Signers approve transactions based on ETH value and recipient, not raw calldata
Raw calldata inspection is manual, off-chain, and error‑prone, especially for non‑trivial bytecode
Impact:
Signers are able to approve transactions hidden by a low‑value operations.
Funds or critical contract state can be compromised without violating multisig rules
Put the following code into test/unit/MultiSigTimelockTest.t.sol
A low‑value transaction passes confirmation and timelock checks while executing high‑impact logic via calldata.
The contract executes the malicious action without any on‑chain detection or prevention.
Do not derive timelock duration solely from txn.value.
Instead, enforce a minimum timelock for any transaction that contains non-empty calldata.
Any calldata can encode arbitrary logic and should never be treated as “low-risk” regardless of ETH value.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.