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.