After selling an NFT, the seller calls collectUsdcFromSelling to get their money back (sale price minus fees plus the collateral they locked).
The function sends the USDC but never zeros out the listing price, so the seller can just call it again and drain the entire contract balance.
solidity
Likelihood:
Every time someone sells an NFT and calls this function, the price stays in storage
The require check only needs listing.isActive to be false, which it already is after the sale
Attacker calls the function multiple times in a loop until the contract is empty
Impact:
Attacker drains all USDC from the contract, stealing funds from other sellers
Legitimate sellers who sold NFTs can't collect their money anymore
Protocol becomes insolvent and unusable
solidity
diff
collateral is not reset to zero after collecting USDC from sold NFT. No accounting for collected USDC
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.