In the normal behavior, the withdrawAllFailedCredits function should allow a user to withdraw their own failed transfer credits by transferring the funds to the correct recipient and resetting the credits balance.
The specific issue is that the function incorrectly transfers _receiver's credits to msg.sender instead of _receiver, and it resets msg.sender's credits instead of _receiver's credits, allowing anyone to steal other users failed transfer credits.
Likelihood: High
This will occur whenever any user calls withdrawAllFailedCredits with another user's address as the _receiver parameter
This will occur in any scenario where users have accumulated failed transfer credits and malicious actors discover this vulnerability
Impact: High
The victim's credits are permanently lost as they are transferred to the attacker
This is a critical vulnerability that allows direct theft of user funds
The function now properly transfers the credits to the intended recipient and user's credit balance is reset after withdrawal
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.