Summary: The contract MultiSig.sol
stores transactions in an array (Transaction[] public transactions
), meaning each transaction is indexed by its position in the array (txId
). This works fine as long as users can correctly track their transaction IDs, don’t accidentally approve or execute the wrong transaction, and have an efficient way to retrieve pending transactions. It introduces serious usability, tracking, and potential operational risks that could indirectly lead to financial losses.
Impact: There is a risk of human error, due to owners must manually track transaction IDs. e.g.: An owner wants to approve a specific transaction but mistakenly provides the wrong txId. Attacker could exploit this by spamming the contract with fake or small transactions, causing the transaction list to grow rapidly and making it hard for owners to track legitimate requests, and also gas could become expensive.
Recommended Mitigation: Consider adding transaction tracking mappings like ownerTransactions
and pendingTransactions
, and push
the txId
with respect to the owner, like:
Now owners can retrieve their transactions correctly:
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.