Critical vulnerability in InheritanceManager where the nonReentrant modifier uses incorrect transient storage slots, making the reentrancy protection completely ineffective and putting all contract assets at risk.
The nonReentrant modifier in InheritanceManager.sol contains a critical implementation flaw:
Key Issues:
Reentrancy check reads from slot 1 (tload(1))
State is stored in slot 0 (tstore(0, ...))
Since slot 1 is never modified, the check always passes
This makes the reentrancy protection completely ineffective
Asset Theft
Complete draining of ETH through sendETH() or contractInteractions()
Theft of any ERC20 tokens through sendERC20()
Multiple recursive calls possible during a single transaction
Arbitrary Contract Interaction
contractInteractions() allows calls to any external contract
Can send ETH with the calls
Results are stored in the interactions mapping
No effective protection against recursive calls
Manual code review
Use same slot for checking and storing:
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.