Anyone can call fulfillMintRequest once the off-chain adapter has populated s_funcReqIdToMintFunctionReqResponse[requestId] with a non-empty response
fulfillMintRequest has no access control and uses msg.sender instead of the original user stored in s_funcReqIdToUserMintReq
Likelihood:
A mint fulfillment callback from Chainlink Functions arrives on‐chain with a valid requestIdany caller can invoke fulfillMintRequest at that moment
Once one fulfillment has succeeded the same requestId data remains in storage so repeated calls continue to succeed indefinitely
Impact:
An attacker can mint the NFT intended for someone else and because no flag is cleared, the same requestId can be replayed to mint unlimited tokens.
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.