According to the README documentation, a core invariant of the contract is:
However, several functions that are restricted to the owner using the onlyOwner modifier do not reset the 90-day inactivity timer by calling _setDeadline(). This creates an inconsistency in the contract's behavior and violates a fundamental design principle.
The following owner-only functions correctly reset the timer:
sendERC20()
sendETH()
addBeneficiery()
But these owner-only functions do not:
contractInteractions()
createEstateNFT()
removeBeneficiary()
This vulnerability has several significant impacts:
Premature Inheritance: The owner could be actively using the contract through these functions, but if they don't call any of the functions that reset the timer, beneficiaries might be able to trigger inheritance after 90 days despite the owner still being active.
Contract Invariant Violation: A core invariant of the contract is violated, which means the contract doesn't behave as documented or intended.
This vulnerability is classified as HIGH severity because:
It directly violates a documented core invariant of the contract
It could lead to premature triggering of inheritance against the owner's intent
It affects critical functions including contractInteractions, which is a gateway to arbitrary external interactions
The consequences of unintended inheritance could be significant, potentially involving substantial financial assets
Add _setDeadline() to all functions that are accessible only to the owner. Specifically, update the following functions:
Additionally, consider implementing a modifier that automatically calls _setDeadline() for all owner-only functions to ensure this invariant is maintained even if new functions are added:
Then replace the onlyOwner modifier with onlyOwnerAndResetDeadline in all relevant functions to ensure consistent behavior.
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.