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 requestId
any 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.