Normal Behavior: After a Chainlink Functions request has been fulfilled, only the user who initiated requestMintWeatherNFT
should be able to call fulfillMintRequest
and receive the minted NFT.
Issue: The fulfillMintRequest
function is publicly callable without any check on msg.sender
, allowing an attacker to front‑run the rightful user and mint the NFT to themselves.
Likelihood:
Monitoring of WeatherNFTMintRequestSent
events and mempool transactions is trivial for automated bots.
No on‑chain guard exists, so every fulfilled request is exploitable until the rightful user mints.
Impact:
Attackers can permanently steal newly minted NFTs, causing direct financial loss to the user.
Protocol reputation suffers due to loss of user trust and potential legal liabilities.
User calls requestMintWeatherNFT(...)
→ emits WeatherNFTMintRequestSent(requestId)
.
Attacker observes requestId
off‑chain.
Attacker calls attack(requestId)
in front of the user’s transaction.
NFT is minted to the attacker's EOA instead of the legitimate user.
The mitigation ensures that only the original requester can mint their NFT by:
Access Control: Verifies that the caller (msg.sender
) is the original requester before fulfilling the request.
Proper Ownership Assignment: Explicitly mints the NFT to the original requester’s address, not the caller.
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.