The NFTFactory
contract contains a critical vulnerability where the inheritanceManager
can burn NFTs even after they have been transferred to another user. This violates ownership principles, allowing unauthorized destruction of user-owned assets.
The burnEstate(uint256 _id)
function allows the inheritanceManager
to burn any NFT, regardless of ownership.
There is no ownership or approval check before executing _burn(_id)
.
As a result, even if a user (user1
) owns the NFT, inheritanceManager
can still burn it.
A regular user (someone who is neither the inheritanceManager
nor an approved operator) CANNOT exploit this.
However, the inheritanceManager
can burn any estate (NFT) it previously minted, even after transferring ownership.
Ownership Violation: The contract does not enforce ownership or approval checks before burning an NFT.
Centralized Control: Even after the NFT is transferred, the inheritanceManager
still has full power to burn it.
User Impact: If the inheritanceManager
is malicious or compromised, it can arbitrarily destroy other users’ NFTs, violating user trust and asset integrity.
🚨 Critical - High Severity 🚨
Unauthorized asset destruction: Users can lose their NFTs without their approval.
Loss of trust: The contract does not protect user-owned assets.
Potential malicious behavior: A compromised or malicious inheritanceManager
can arbitrarily burn NFTs.
inheritanceManager
creates an estate (NFT).
The NFT is transferred to a user (user1
).
Later, inheritanceManager
calls burnEstate(tokenId)
, even though they no longer own it.
The NFT gets burned, and user1 loses their asset.
Manual Review
Modify the burnEstate
function to check if the caller is the current owner or an approved operator:
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.