Asset prices can be made very small (0 to dust amounts) to avoid paying any buyerFees. At the same time if it will be high enough it will cause an overflow and fail while trying to calculate the buyerFee.
Swan list()/relist() functions do not validate price in anyway, therefor it's possible to pass both 0 or dust amounts and uint256 max values.
The former (0 to dust amounts) allows to create assets without paying any fees and still requiring the buyerAgent to pay dust amounts on purchase. At the same time, because there is no fee it allows to pretty much DoS single, few or all buyerAgents with unwanted assets. The gas cost will depend on max allowed assetsPerBuyerRound in our measurements when this is set to 3 it would cost:
~320k gas to fill all single BuyerAgent round assets using list()
~250k gas to fill all single BuyerAgent round assets using relist()
At the time of writing the cost would be:
~320k gas -> ~0.016USD
~250k gas -> ~0.0124USD
Which isn't that much to block for a single buyerAgent per round.
This lack of validation can cause multiple problems, but none of them really benefit the attacker that much and at most causes disruption to the protocol and allows receiving dust amounts from buyer agents - so low.
Manual review + hardhat tests
Validate prices - don't allow very low or very high values.
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.