Sending messages from an L2 when it is settled to the GW can be proven in the GW and L1 which can lead to message double spending
When a user on L2 sends a message or a base token withdrawal, the sendToL1
function is executed on the L1Messenger
:
In this function it chains the total messages during the batch and then it will be sent by the bootloader at the end so it can be proved in other chains.
The problem is that it does not constrain which chain should consume this message. In this case, if the L2 is settled in the GW, a user could prove the inclusion of his message in both GW and L1 chains. This can be really problematic because for base token withdrawals, the user will be able ot receive tokens in both chains.
High, users can prove the inclusion of the same message in both chains that can lead to double spending withdrawals
Manual review
It does not have a trivial solution, but messages should include a chainId representing which chain should be able to consume the message.
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.