sendMintMessage
does not check the msg.value
sent by the user that is used by layer zero endpoint to fullfill the gas fees, before calling the send function.
When a user try to claim its token by calling the following function:
The function perform an external call to L1Sender
contract to pass a mint message using the following function:
the msg.value sent by the caller is used by the layer zero endpoint to pay for the transaction fees. Therefore, if for any reason the user's msg.value
is less than the required fees, the transaction will revert, leading to sender tokens burn.
Here is a quote from documentation of layer zero endpoint:
call
send()
with{value: msg.value}
this is becausesend()
requires a bit of native gas token so the relayer can complete the message delivery on the destination chain. If you don't set this value you might get this error when callingendpoint.send()
For more details about this vulnerability, please check the following Link
Users may lose their funds (execution gas fees) when trying to call this function if they send a value less than the required one for fees. as they will still pay for the execution of the transaction even if it revert.
Manual Auditing
Use the estimateFees()
to check the msg.value
sent by the user before performing the external call to layerzero .send()
.
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.