The TimeLock contract contains several functions that do not check whether the user has sent enough msg.value to cover the required execution costs. One example is the executeBatch function, which executes multiple transactions but does not validate whether the values in the values array are adequately covered by the msg.value sent with the transaction.
The contract does not verify if msg.value is sufficient to cover the total required transaction values. This means a user can initiate an operation without sending enough ETH, potentially leading to failed transactions and unexpected behaviors. Attackers or careless users might cause disruptions by submitting underfunded transactions.
Transactions may fail midway, leaving some operations executed while others are not.
Users may mistakenly believe their transactions will succeed without realizing insufficient funds.
Potential security risks if certain conditions depend on successful execution but are only partially completed.
Manual review
Introduce a validation check at the beginning of the executeBatch function to ensure that msg.value is at least the sum of all values[i] in the batch.
Use require(msg.value >= totalValue, "Insufficient ETH sent"); to prevent execution unless the full amount is covered.
Refund excess ETH, if any, back to the sender.
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.