The _lzReceive function is designed to handle incoming messages, crediting the recipient with the appropriate amount of tokens. However, the function lacks a mechanism to correctly set the _message.isComposed flag to true, potentially allowing a malicious user to resend the same message to claim multiple tokens on different chains.
The _lzReceive function attempts to prevent message replay by checking if the _message.isComposed flag is set. If the flag is set to true, the function reverts the transaction with CannotCompose(). However, the function lacks a mechanism to set the _message.isComposed flag to true upon initial message processing. This oversight allows a malicious user to replay the same message and claim multiple tokens across different chains.
This vulnerability allows a malicious user to replay the same message across multiple chains, claiming tokens multiple times.
Manual
To mitigate this vulnerability, the _lzReceive function must correctly set the _message.isComposed flag to true after processing the message. This ensures that the same message cannot be replayed.
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.