https://github.com/Cyfrin/2024-10-swan-dria/blob/c8686b199daadcef3161980022e12b66a5304f8e/contracts/swan/Swan.sol#L276-L302
Assets from previous rounds can be purchased without requiring relists due to missing round validation in Swan's purchase function. As a result, the seller can avoid paying the royalty fee and the Dria protocol fee.
The purchase
function in Swan contract lacks round validation:
When BuyerAgent receives asset addresses from oracle:
HIGH
Sellers can bypass paying new listing fees for new rounds
Protocol loses fee revenue
Breaks round-based market mechanism
Disrupts protocol's economic model where relisting fees incentivize quality listings
HIGH
No round validation in place
Oracle can return any Listed asset address
Happens any time oracle returns old listing addresses
No mitigating factors present
Round 1: Seller lists Asset X and pays the listing fee.
Round 2 starts: Asset X should require relisting and a new fee.
The oracle returns Asset X's address.
BuyerAgent
can purchase Asset X in Round 2.
The seller bypasses the listing fee because the BuyerAgent
can still buy the asset in Round 2 due to the missing check.
The missing listing.round
check allows the purchase of a listing from a previous round without relisting if the oracle response includes its address.
Add round validation in Swan's purchase function:
This ensures listings can only be purchased in their created round, maintaining round isolation and economic model.
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.