Not all owner interactions with the InheritanceManager contract reset the 90-day inactivity timer, creating a security vulnerability where the inheritance process could be triggered prematurely despite recent owner activity.
The InheritanceManager contract is designed to allow beneficiaries to inherit assets after 90 days of owner inactivity. However, the implementation fails to reset the deadline timer in several key owner-only functions:
removeBeneficiary(address) - Missing _setDeadline() call
createEstateNFT(string, uint256, address) - Missing _setDeadline() call
contractInteractions(address, bytes, uint256, bool) - Missing _setDeadline() call
The contract also contains several view functions that don't modify state (so they shouldn't reset the timer):
_getBeneficiaryIndex(address)
getDeadline()
getOwner()
getIsInherited()
getTrustee()
getNftValue(uint256)
getAssetToPay()
This inconsistency means that if an owner only interacts with the contract through the functions missing the timer reset, the deadline could expire despite active usage, allowing beneficiaries to prematurely inherit the assets
Premature Inheritance and Fund Loss: Beneficiaries could inherit assets while the owner is still actively using the contract, resulting in unauthorized access to funds. This can lead to complete loss of all ETH and ERC20 tokens stored in the contract, as beneficiaries can call withdrawInheritedFunds() to distribute these assets among
Loss of Owner Control: The owner could lose control of their assets unexpectedly, even while actively managing them through specific functions.
Broken Trust Assumptions: The contract's core functionality as a dead man's switch is compromised, as it may trigger while the owner is still active.
Inconsistent Security Model: Users expect all meaningful interactions with the contract to reset the timer, but the current implementation creates a confusing security model where some actions maintain security while others silently allow it to degrade.
PoC:
Manual code review, Foundry
Add _setDeadline() to all owner-only functions that modify state to ensure the timer is consistently reset with any owner activity
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.