When user receives new Silo deposit (by depositing, or receives via transfer), this depositId
is added to array depositIdList
.
When user withdraws his deposit, depositId
is removed from that depositIdList
. Array is looped through to find id to remove.
Problem is that griefer can transfer a bunch of 1 wei Silo deposits to make user's array depositId
too big to loop on removal. As a result user can't execute full withdrawal of his deposit. Issue becomes severe when user is integrator's contract with limited functinality, i.e. it can't perform partial withdrawal.
On transfers and deposits function addDepositToAccount()
is called where new depositId is pushed to array:
On full withdrawal it tries to remove depositId
from depositIdList
by looping through array:
User can be unable to perform full withdrawal of Silo deposit. That's because depositIdList
is looped through on full withdrawal which reverts with OOG error.
Manual Review
There is no way to mitigate this issue, possible solution is to not remove depositId
from depositIdList
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.