If oracle return list of assets, which should be purchased, and among them there is attacker's asset, attacker could prevent purchasing of all assets, which were selected by oracle, thereby harming other users.
Function BuyerAgent.sol.purchase() decode oracle result and output is array of asset address's. Next, there is for loop, in which calling swan.purchase(asset). In swan.purchase() occurs transfer asset(nft) from sellet to buyer. The problem is that if one purchase will fail, all purchases will fail to - tx completly fail. One unsuccessful purchase entails the impossibility of making all other purchases.
Bad sellet(attacker) could transfer nft(id 1 in asset contract) to any other address in his Asset contract, so transfer nft from seller to Swan contract will fail.
Swan.sol
Attacker could prevent other purchases in loop
Manual review
Add try/catch block in for loop
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.