The EggVault
contract uses transferFrom
for NFT withdrawals instead of the ERC721-standard safeTransferFrom
, creating a risk of permanent NFT loss when users withdraw tokens to smart contracts that do not support ERC721. This violates best practices and can lead to irreversible asset locking.
Location:
EggVault::withdrawEgg(uint256 tokenId)
Issue:
The contract uses transferFrom
for NFT transfers, which does not verify if the recipient can handle ERC721 tokens.
If an NFT is sent to a contract that does not implement IERC721Receiver
, the transfer succeeds, but the NFT becomes permanently stuck—unable to be recovered.
Attack Scenarios:
Accidental Transfer to Incompatible Contracts
A user withdraws an NFT to a DEX, lending protocol, or other contract not designed to hold NFTs.
The transaction completes, but the NFT is locked forever because the recipient cannot process it.
Root Cause:
The contract fails to comply with EIP-721, which mandates the use of safeTransferFrom
for secure NFT transfers.
Missing IERC721Receiver
implementation in the vault contract.
This leads to permanent, irreversible loss of user NFTs.
Manual Review
safeTransferFrom
for All WithdrawalsIERC721Receiver
in EggVault
and receiver contractNFTs are transferred to contracts without onERC721Received implementation.
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.