In the fulfillMintRequest
function, NFTs are minted to msg.sender
without verifying if they are the original requester.
Severity: High
Likelihood: High
The minting function allows anyone to claim an NFT by front-running the original requester's transaction.
Root Cause:
Initial State:
User A requests NFT minting and pays
Weather data request is successful
Response is pending fulfillment
Attack Scenario:
User A requests mint with payment
Oracle returns weather data
Attacker monitors mempool
Attacker front-runs fulfillment call
NFT minted to attacker instead of User A
Stolen NFTs
Lost user funds
Compromised trust
Protocol reputation damage
Manual Review
Implement proper authorization checks:
Alternative Implementation with Time Lock:
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.