IMPACT : HIGH
Likelyhood : medium
The withdrawInheritedFunds()
function distributes ETH to all beneficiaries in a single transaction . If one beneficiary cannot receive ETH , the entire function reverts , preventing all other beneficiaries from receiving their share. A malicious beneficiary can exploit this by forcing their ETH transfer to fail , blocking inheritance payouts for everyone .
The InheritanceManager owner adds only beneficiaries that can receive ETH (contracts with a receive()
function).
A malicious beneficiary initially deploys a proxy contract that allows ETH deposits.
After the owner verifies and adds the beneficiary , they upgrade their proxy contract to remove the receive()
function , making ETH transfers to their address fail.
When withdrawInheritedFunds()
executes, it attempts to send ETH to all beneficiaries in a loop .
Because one transfer fails, the entire function reverts, locking all ETH inside the contract .
All beneficiaries are blocked from receiving their Eth and the malicious beneficiary could demand a bribe in order for the other beneficiaries to recieve their eth.
This is especially dangerous in inheritance disputes, where family members may have conflicts.
if transfer fails, user can claim their eth afterwards.
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.