The Escrow::_withdrawFromEscrow(...)
function does not implement the checks-effect-interaction pattern and as such it can be reentered by the recipient of the asset
As shown below, the state of the withdraw token id
is updated after the safeTransferFrom
is used to interact with the external contract.
possible loss of funds
Manual review
Modify the Escrow::_withdrawFromEscrow(...)
function as shown below
Impact: - NFT already bridged won’t be bridgeable anymore without being stuck. Likelyhood: Low. - Attackers will corrupt their own tokens, deploying a risky contract interacting with an upgradable proxy. They have to buy and sell them without real benefits, except being mean. Some really specific and rare scenario can also trigger that bug.
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.