The Bridge::_cancelRequest()
function is used to cancel request on L1, however the the function does not check if the _withdrawFromEscrow(...)
call is successful and the asset is returned to the owner form the escrow
The problem is that if the return of the asset in the _withdrawFromEscrow(...)
call fails, the asset will not be returned to the owner and the _escrow[collection][id] = address(0x0)
is set to zero and the user has forfeiteed their NFT.
Possible loss of user funds
Manual review
Modify the _cancelRequest(...)
function as shown below
To cancel a message, it has to be sent to the Starknet Core, otherwise it reverts. Therefore, to cancel a request, a token will always be escrowed. There is no impact here because the described case will never happen, that’s why check that boolean is not useful.
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.