For the complete documentation index, see llms.txt. This page is also available as Markdown.

57701 sc insight accesstoken collectionexpire is never checked allowing tokens to be minted even after the collection expires

Submitted on Oct 28th 2025 at 09:53:21 UTC by @s8olidity for Audit Comp | Belong

  • Report ID: #57701

  • Report Type: Smart Contract

  • Report severity: Insight

  • Target: https://github.com/immunefi-team/audit-comp-belong/blob/main/contracts/v2/tokens/AccessToken.sol

Impacts:

  • 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

Was this helpful?