Beatland Festival

First Flight #44
Beginner FriendlyFoundrySolidityNFT
100 EXP
View results
Submission Details
Severity: low
Valid

Memorabilia Collection Activation State Can't Be Changed After Creation

Root + Impact

Description

  • Normal Behavior:
    The contract allows the organizer to create memorabilia collections, each with an active state that determines whether the collection can be interacted with (e.g., redeemed, minted, or displayed). In robust systems, it should be possible to change the activation state after creation to respond to mistakes, abuse, or changing requirements.

    Issue:
    Currently, the activation state of a memorabilia collection is set only at creation and cannot be changed later. If a collection is mistakenly created as inactive, it can never be activated. Conversely, if a collection is created as active, it cannot be paused or disabled in response to abuse, bugs, or policy changes. This limits the organizer’s ability to manage collections and respond to operational needs.

struct MemorabiliaCollection {
bool active;
// ...
}
function createMemorabiliaCollection(/*...*/, bool active) external onlyOrganizer {
// ... sets active state at creation ...
// @> No function exists to change 'active' after creation
}

Risk

Likelihood:

  • Mistakes or changing requirements are common in production environments.

Impact:

  • Inactive collections are permanently unusable; active collections cannot be paused or disabled if needed, reducing operational flexibility.

Proof of Concept

  1. Organizer creates a memorabilia collection with active = false.

  2. Organizer later wants to activate the collection, but there is no function to do so.

  3. The collection remains permanently inactive and unusable.

// No function like this exists:
festival.setMemorabiliaCollectionActive(collectionId, true); // <-- Not possible

Recommended Mitigation

Add a function to allow the organizer (or owner) to change the activation state of a memorabilia collection after creation.

+ function setMemorabiliaCollectionActive(uint256 collectionId, bool active) external onlyOrganizer {
+ memorabiliaCollections[collectionId].active = active;
+ }
Updates

Lead Judging Commences

inallhonesty Lead Judge 25 days ago
Submission Judgement Published
Validated
Assigned finding tags:

createMemorabiliaCollection with isActive false for later usage - flow not properly implemented.

Low because an organizer can use it with active = true and organizer is trusted.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.