The MultiSig::submitTransaction()
function lacks a crucial check to ensure that the specified _value
for a transaction is not greater than the contract's current balance. This oversight can lead to the executeTransaction()
function failing, even if all required owners approve the transaction.
The MultiSig
contract's submitTransaction()
function currently validates that the input _value
is not zero. However, it fails to verify whether _value
exceeds the contract's available balance. Consequently, a unintentional user could submit a transaction with a _value
larger than the contract's funds. Although all required owners might subsequently approve the transaction, the executeTransaction()
function will inevitably revert due to insufficient funds, rendering the transaction unsuccessful and potentially wasting gas.
Proof of code:
This leads to wasted gas fees and prevents the multi-sig wallet from functioning as intended, since funds can't be transferred if the user puts a value greater than the actual balance.
Implement a check within the submitTransaction() function to ensure the requested transfer value does not exceed the contract's current balance.
Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point.
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.