The access control on WeatherNft::fulfillMintRequest
is not properly implemented, allowing any user to call this function and potentially mint an NFT on behalf of another user. This can lead to a situation where a malicious actor can act as a middleman and steal the NFT of the real requester.
The intended workflow of the minting process is divided into two main steps:
The user calls requestMintWeatherNFT
providing the parameters for the minting process and the eventual payment.
The user then calls fulfillMintRequest
to finalize the minting process.
However, the access control on fulfillMintRequest
is not properly implemented, allowing any user to call this function and potentially mint an NFT on behalf of another user. This can lead to a situation where a malicious actor can act as a middleman and steal the NFT of the real requester.
Likelihood: MEDIUM
The attacker need to know the request id but it is easy to find from events.
Impact: HIGH
This can allow an attacker to steal an nft that has been request and not yet minted.
Consider adding a check to ensure that the caller of fulfillMintRequest
is the same as the original requester. This can be done by storing the requester's address in the request data and checking it in fulfillMintRequest
.
There is no check to ensure that the caller of the `fulfillMintRequest` function is actually the owner of the `requestId`. This allows a malicious user to receive a NFT that is payed from someone else.
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.