When a buyer is creating an escrow, he can insert the buyer or seller's address to the Arbiter, which will lead to the improper workflow of the contract.
No mechanism of verification of arbiter address results in the buyer can insert his (buyer) or seller's address as an arbiter. We can summarise the details in a few points.
The workflow of the Escrow contract says that all these three roles, Arbiter/Seller/Buyer, should be independent and assigned to three different addresses/people. If they are not, it can lead to improper behaviour.
If the Buyer or Seller is the Arbiter, it can cause confusion when one of them initiates a dispute within initiateDispute() function where the buyerOrSeller modifier takes place. When the dispute is initiated, the Arbiter can resolve the dispute. But as we know, when Seller or Buyer is Arbiter, it destroys the workflow.
Even though the Arbiter is a trusted role, and we also know this info from README, If the
buyeraccidentally or maliciously deploys an
Escrowwith incorrect
arbiterdetails, then the
sellercould refuse to provide their services. Given that the
buyeris the actor deploying the new
Escrow and locking the funds, it's in their best interest to deploy this correctly.
This kind of verification can be done directly in the code, which prevents off-chain activities which are not necessary and can lead to proper workflow and correct distribution of funds.
The control of Funds and most of the functionality will be in the hands of the Seller or Buyer, which disturbs the workflow.
Manual Review
A simple POC as a foundry test which showed improper workflow if seller is Arbiter.
Implement verification in Escrow.sol that SELLER OR BUYER != ARBITER.
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.