The inherit function, when called with a single beneficiary after 90 days of inactivity, is documented to allow the owner to "reclaim this contract" (implying funds). However, it only reassigns the owner variable to msg.sender without transferring any funds. This leaves the contract’s assets (ETH and tokens) inaccessible to the caller, contradicting the expected behavior of reclaiming funds.
The vulnerable code is within the inherit function:
solidity
No Fund Transfer:
The comment suggests the owner can "reclaim this contract from beneficiaries slot0," which implies regaining control over its funds.
However, the function only updates owner = msg.sender and resets the deadline, leaving ETH and ERC20 tokens in the contract’s balance.
Misleading Intent:
Users expect "reclaiming" to include asset transfer, but the owner must separately call functions like sendETH or sendERC20 to access funds, which isn’t automatic or implied by inherit().
Funds Inaccessibility: The owner regains control but cannot immediately access funds, requiring additional transactions that may be overlooked or impossible if keys are truly lost.
User Confusion: The mismatch between documentation and behavior misleads users expecting automatic fund recovery.
Limited Severity: While not a direct security exploit, it reduces the contract’s usability and could lock funds if the owner doesn’t manually withdraw them post-reclaim.
Manual Review
Modify inherit to transfer funds to the owner in the single-beneficiary case:
solidity
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.