A critical vulnerability has been identified in the InheritanceManager contract's reentrancy protection mechanism. The nonReentrant modifier contains an implementation error where it checks one transient storage slot but sets the lock flag in a different slot. This broken protection allows for reentrancy attacks against multiple functions that handle asset transfers, potentially leading to unauthorized fund extraction.
The issue is that the modifier checks for reentrancy using tload(1) but sets the reentrancy lock using tstore(0, 1). Due to this slot mismatch, the lock is ineffective since the code checks a different slot than it modifies. This vulnerability affects several critical functions including sendETH, sendERC20, and contractInteractions.
Manipulation of contract state during external calls made via the contractInteractions function
Manual code review
Ensure the same transient storage slot is used for both checking and setting the lock
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.