Users with account abstraction wallets have different addresses across different chains for the same account, so if all rewards are claimed for someone using an account abstraction wallet, the rewards will be minted to the wrong address and lost permanently. Also, a malicious attacker/attackers who notices this could perform griefing attacks on all account abstraction wallet users by voluntarily executing claim()
for all these users.
With 5.7 million users and 79 billion assets, there is a very high risk that the claim rewards will be called on safe wallet users and lose all the rewards.
Now, look at the codebase and understand how all the rewards will be lost for the users.
In the Distribution.sol::claim()
we call the l1sender to send the mint rewards message as follows:
Here, we can see the function passes the exact address of the user: user_
as the receiving address on the other chain, assuming that the user has the same address across all the EVM chains; which is not the case if the user is using the account abstraction wallet.
Then, on the l1Sender contract it calls the function sendMintMessage()
receiving the user_
as the payload, which then calls the LayerZeroEndpoint send
function passing the payload to LayerZeroEndpoint.
Then, on the l2, lzReceive
function will be triggered, which will in turn call _nonblockingLzReceive()
passing in the payload. The rewards will be minted to the l1 chain's account abstraction wallet address, but on l2 chain, the same person will not be the owner of that address; hence, all rewards are permanently lost. Also, a malicious attacker/attackers who notices this could perform griefing attacks on all account abstraction wallet users by voluntarily executing claim()
for all these users.
If all rewards are claimed for someone using an account abstraction wallet, the rewards will be minted to the wrong address and lost permanently.
Give the user the option to pass in the address the rewards should be minted to on the l2 by adding an extra address variable to the userdata struct which should be set only by the user.
Pass in the warning for account abstraction wallet holders to not to pass the same wallet.
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.