The withdraw_auto_from_l1
function and the withdrawTokens
function in the bridge implementation use the mint
function instead of the safe_mint/safeMint
function to mint NFTs. This practice bypasses important safety checks that ensure the recipient contract is capable of handling ERC721 tokens, potentially resulting in NFTs being transferred to contracts that cannot process them, leading to permanent loss of those NFTs.
The ERC721
standard provided by OpenZeppelin includes two functions for minting tokens: mint
and safe_mint/safeMint
. The safe_mint
function includes a critical check that ensures the recipient contract can handle ERC721 tokens by verifying the implementation of the onERC721Received
function. This is essential to prevent NFTs from being sent to contracts that are not designed to handle them.
mint``frombridge
_uses the _mint
instead of __safemint
Same issue exists in the ERC721Bridgeable::mintFromBridge
called from within the Bridge::withdrawTokens
uses mint
instead of safeMint
. This approach skips the necessary contract checks, which could result in NFTs being sent to non-compliant contracts, leading to potential permanent loss of the tokens.
By using mint
instead of safe_mint
, NFTs may be permanently lost if they are transferred to a contract that does not support the ERC721Receiver
interface, as the tokens may become inaccessible. The absence of contract checks when minting tokens increases the risk of tokens being transferred to unintended or non-compliant recipients
Manual Review.
Update the withdraw_auto_from_l1
function to use safe_mint
instead of mint
to ensure that NFTs are only transferred to addresses capable of handling them
Modify the mintFromBridge
function in the IERC721Bridgeable
implementation to use _safemint
instead of _mint
:
Please, do not suppose impacts, think about the real impact of the bug and check the CodeHawks documentation to confirm: https://docs.codehawks.com/hawks-auditors/how-to-determine-a-finding-validity A PoC always helps to understand the real impact possible.
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.