Description:
The contractInteractions() function allows arbitrary external contract calls, which can be used to create NFTs without properly assigning a value or asset to pay. If an NFT is created this way, it lacks a defined value and asset, leading to a permanent lock where beneficiaries try to use InheritanceManager::buyOutEstateNFT to adquired the NFT and they cannot, effectively causing a DoS issue.
Impact:
High Severity
Likelihood: High – The issue arises when an NFT is created via contractInteractions(), bypassing the expected value and asset assignment.
DoS Attack Vector: Since buyOutEstateNFT() requires a defined value and asset, the NFT remains locked forever, making it impossible for beneficiaries to purchase it.
The function buyOutEstateNFT() will always revert when attempting to process a payment for an NFT with no assigned asset.
Proof of Concept:
Logs:
InheritanceManager::buyOutEstateNFT(1)
0x0000000000000000000000000000000000000000::transferFrom(user2: [0x537C8f3d3E18dF5517a58B3fB9D9143697996802], InheritanceManager: [0x88F59F8826af5e695B13cA934d6c7999875A9EeA], 0)
[Stop]
[Revert] SafeERC20FailedOperation(0x0000000000000000000000000000000000000000)
Recommended Mitigation:
Ensure that is not possible to create a NFT without value and asset properties through the contractInteractions() calling directly the NFT Factory. Or modifed the createEstate() function to give those properties from here.
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.