The timelock mechanism determines the delay based on the valid of a single transaction value.
< 1 ETH: 0 delay
1-10 ETH: 1 day
etc.
This logic is vulnerable to "structuring" (smurfing). An attacker (compromised signers) can bypass the 7-day delay for a large amount (e.g., 100 ETH) by splitting it into multiple smaller transactions (e.g., 101 transactions of 0.99 ETH). Since each individual transaction is below the 1 ETH threshold, they all get 0 delay and can be executed immediately.
This defeats the defense-in-depth purpose of the timelock, which is to provide a delay buffer for high-value outflows to allow detection and reaction (e.g., by the Owner revoking a compromised signer).
Likelihood: High (Trivial to execute).
Impact: High (Complete bypass of the security module allowing instant drainage of wallet).
Wallet holds 100 ETH.
Signers want to drain 100 ETH instantly (bypassing 7-day lock).
Signers propose 100 separate transactions, each transferring 1 ETH (or 0.99 ETH).
All transactions have 0 delay.
Signers confirm and execute all of them in the same block.
Wallet is drained 100 ETH instantly.
Implement a daily spending limit or a moving average / accumulated value check for the timelock. Alternatively, enforce a minimum delay for all transactions, or increase the delay for small transactions. A common pattern is to have a global delay for all non-admin actions, or track totalExitedAmount per epoch.
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.