The function InheritanceManager::inherit() has problem if there is a single beneficiary scenario explained below.
Take a look function code below and descriptions will follow.
The contract requires that block.timestamp >= deadline
(90 days of inactivity) before inheritance can happen.
Single Beneficiary Case:
If there is exactly one beneficiary in the beneficiaries array, that single beneficiary becomes the new owner:
After this line, owner is updated from the original owner to the single beneficiary.
When there is only one beneficiary and they become the new owner, the entire contract depends on that single address. If the new owner/beneficiary loses their private key, there’s no additional fallback mechanism.
Initial Setup
Owner: John doe1
Beneficiary: Jane (only one)
No other beneficiaries
After 90 Days
John doe1 doesn’t access the contract, so Jane calls inherit()
.
Since beneficiaries.length == 1
, Jane becomes the new owner.
Jane Loses Her Key
Now, Jane (the new owner) cannot access the contract.
No one else is listed as a beneficiary.
No new transactions can happen because Jane alone can call the owner-only functions, and Jane’s lost her keys
Funds stuck and nobody can interact with the contract.
Manual review.
Let single beneficiary add backup (require backups as part of the logic)
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.