msg.sender, nonce, and expiry, letting any observer relay or front-run a claim_isValidSignature only checks that the recovered signer equals receiver; msg.sender is not part of the signed SnowmanClaim struct and is never validated, and the struct carries no nonce or expiry.
Any observer of a valid (v, r, s) can submit the claim on the receiver's behalf.
Likelihood:
A valid signature is visible in the mempool or wherever it is shared. Replaying it requires no privilege.
Impact:
The NFT still mints to receiver, so direct theft is limited. But combined with the live-balance leaf bug, a front-runner can grief the receiver's balance to invalidate the receiver's own transaction, and the absence of a nonce/expiry leaves no replay or time bound. Low severity in isolation.
A third party submits the receiver's signature and the claim executes.
Bind the caller (if relaying is unwanted) or add a per-address nonce and expiry to the signed struct.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.