In a standard workflow, a seller should only be entitled to claim sale proceeds after a buyer has successfully executed the buy() function, ensuring that the buyer's funds have been transferred into the contract's balance
A critical logic flaw exists because the collectUsdcFromSelling function only validates whether a listing is no longer active (!isActive). It fails to distinguish whether the inactive status was triggered by a legitimate sale or by a unilateral cancellation by the seller via cancelListing.
Likelihood:
This vulnerability is exploited whenever a whitelisted seller cancels their own listing and immediately calls the withdrawal function.
The flaw is inherent in the contract logic and can be triggered at any time by a malicious actor to manipulate the contract's internal state without an actual inflow of funds from a buyer.
Impact:
Theft of the entire USDC liquidity stored in the contract, including collected protocol fees and funds belonging to other users.
Total protocol insolvency, as the contract will continue to distribute fictitious "sale proceeds" until the USDC balance is exhausted.
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.