Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yield
Description
Brief / Intro
The collectionExpire field in AccessTokenInfo is never checked in any mint entry (mintStaticPrice / mintDynamicPrice), and signature verification does not include an expiration time constraint. Consequently, after the collection expires, requests with a valid signature (or a persistent checkout) can continue to be minted indefinitely.
Vulnerability Details
The structure definition includes collectionExpire (contracts/v2/Structures.sol:32), but the mintStaticPrice and mintDynamicPrice methods in the AccessToken contract do not check the current time against collectionExpire.
The SignatureVerifier signature for the mint parameter only covers receiver/tokenId/tokenUri/price/whitelisted parameters, and does not include a time or window, making it impossible to constrain expiration at the signature level.
Therefore, as long as a signature is present, the contract will not refuse to mint tokens due to "collection expiration," which deviates from the standard business objective of "collection lifecycle."
Impact Details
The promised "sale/minting window" is invalid: minting can continue even after the expiration date, violating scarcity and redemption rules;
If peripheral systems/frontend dependencies have expired, attackers can manually interact with the contract to mint NFTs directly;
Recommended Severity: Medium ("Unauthorized minting of NFTs" strictly requires unsigned minting to be considered critical, but this is considered a business violation due to "failure to stop minting on schedule" and still poses a risk).
References
contracts/v2/tokens/AccessToken.sol:162, 199, 212 (mint entry does not check for expire)
contracts/v2/utils/SignatureVerifier.sol (mint verification hash does not include expire)
test/v2/tokens/accessToken.test.ts (only asserts storage, not validation)
Proof of Concept
PoC: test demonstrating mint succeeds after collectionExpire has passed