The README and actor model state that non-whitelisted users can interact with the secondary market, including listing NFTs for sale. In particular, the documented behavior says non-whitelisted wallets can buy, update price, cancel listing, list NFT.
The implementation of list() contradicts that specification by gating the function with onlyWhitelisted. As a result, any NFT holder who is not currently whitelisted is prevented from listing their NFT on the marketplace, even though this is described as supported behavior. This creates a protocol-breaking denial of service for secondary-market participants and can strand purchased NFTs.
Likelihood:
The issue occurs whenever an NFT is owned by a user who is not whitelisted, including secondary buyers that were never added to the whitelist.
The owner can remove wallets from the whitelist at any time, so an existing holder can lose the ability to list after acquiring the NFT.
Impact:
Secondary-market users documented as supported by the protocol can be blocked from listing and exiting their position.
NFTs can become effectively illiquid for non-whitelisted holders, which breaks core marketplace functionality.
The following PoC can be put in test/NFTDealersTest.t.sol:
If the intended design is to allow all NFT holders to participate in the secondary market, remove the whitelist restriction from list() and rely on ownership checks instead.
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.
The contest is complete and the rewards are being distributed.