The fulfillRequest() function has no access control, allowing any user to spoof an oracle response and mint NFTs arbitrarily.
Normally, only the Chainlink Oracle should call fulfillRequest().
The function is external and has no require(msg.sender == oracle).
Likelihood:
fulfillRequest() callable by anyone.
tx.origin used instead of msg.sender.
Impact:
NFT minting logic can be triggered with fake weather data.
Complete bypass of the oracle system.
An attacker simulates a successful mint and calls the function directly to mint an NFT.
Add an onlyOracle modifier or validation inside fulfillRequest():
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.