The
withdrawAllFailedCredits function is intended to let users claim funds from payouts that failed to be sent to them directly. However, the function contains a critical flaw where it uses a
_receiver address to determine the amount to withdraw but uses msg.sender for the actual payment and balance update. This mismatch allows any user to drain the failedTransferCredits of any other user. An attacker (Attacker) can call withdrawAllFailedCredits with the address of a victim (Victim) who has an available credit balance. The function will correctly read the Victim's balance but will then send that amount of ETH to the Attacker (msg.sender).
Likelihood:
This vulnerability occurs whenever a user's payout fails and a credit is logged to their address.
An attacker calls the withdrawAllFailedCredits function, passing the victim's address as the _receiver argument.
Impact:
Attackers can directly steal the full amount of pending withdrawal credits from any other user in the system.
This compromises the integrity of the contract's accounting and leads to a direct, irreversible loss of user funds.
withdrawAllFailedCredits allows any user to withdraw another account’s failed transfer credits due to improper use of msg.sender instead of _receiver for balance reset and transfer.
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.