SablierV2Lockup::withdrawMaxAndTransfer()
can cause ERC721
token loss if newRecepient
cant handle it. This issue can occur because the function use _transfer
instead of safeTransferFrom
function for ERC721
token.
As can be seen above, the _transfer()
function does not trigger the _checkOnERC721Received()
which functions to check whether the recipient can handle the ERC721
or not.
As OpenZeppelin’s documentation stated :
Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of
safeTransferFrom
prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability.
ERC721
token loss if newRecepient
can’t handle it
Manual Review
Use safeTransferFrom()
when sending out the ERC721
token
https://docs.codehawks.com/hawks-auditors/how-to-determine-a-finding-validity
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.