The Weather NFT contract calls _mint directly during minting.
This approach bypasses the critical ERC721Receiver check, meaning if msg.sender
is a smart contract that does not implement onERC721Received, the NFT is minted but stuck, it cannot be interacted with, nor transferred, and is effectively burned without intention.
This directly violates the application’s core functional expectation:
Users who mint and own Weather NFTs should be able to transfer ownership
Likelihood: low
It requires a smart contract that can not handle ERC721 token
Impact: High
Irrecoverable user assets: Minted NFTs sent to smart contracts are permanently inaccessible.
Violation of ERC721 compliance: safeMint is the standard approach to prevent such breakages.
Prefer using _safeMint
over _mint
for ERC721 tokens, but do this very carefully, because this opens up a reentrancy attack vector. It's best to add a nonReentrant
modifier in the method that is calling _safeMint
because of this.
The `fulfillMintRequest` function is external and anyone can call it. If the protocol uses `_safeMint` instead of `_mint`, this introduces a reentrancy risk. It is better to use `_mint` and the caller is responsible for being able to obtain the token.
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.