The appointTrustee function is protected by the onlyBeneficiaryWithIsInherited modifier, which is intended to restrict this function to beneficiaries only after inheritance has been triggered. However, the owner can manipulate this by adding themselves as a beneficiary.
The appointTrustee function uses the onlyBeneficiaryWithIsInherited modifier, intended to restrict access to beneficiaries
The owner can add themselves as a beneficiary using addBeneficiery(owner)
The owner can trigger inheritance when the deadline passes
The owner can then appoint any trustee they want, despite not being an intended beneficiary in the inheritance process
Violation of Access Control: The appointTrustee function is clearly intended to be used by beneficiaries after inheritance, but the owner can bypass this restriction.
Trust Violation: The entire purpose of the contract is to ensure that assets are properly handled according to the owner's instructions after certain conditions are met. This vulnerability undermines that trust model.
Manipulation Risk: A malicious trustee could potentially manipulate asset valuations or other important contract parameters.
Logical Inconsistency: The contract design implies a separation between the owner (who sets up inheritance) and beneficiaries (who execute inheritance), but this vulnerability blurs that line.
Add Role Separation: Implement a check that prevents an address from being both the owner and a beneficiary:
Note this logic might need other places changes but it is much needed to clear this out.
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.