The nonReentrant modifier in InheritanceManager implementation of Transient Storage Reentrancy Guard contains an implementation error leading to ineffective reentrancy protection.
In nonReentrant modifier there is a mismatch between the storage slots being checked and modified, the code checks slot 1 but sets slot 0, making the reentrancy protection ineffective.
The severity of the security vulnerability described above is mitigated by the presence of the onlyOwner modifier on the affected functions because:
Limited attack vector - The functions protected by this modifier (sendERC20, sendETH, and contractInteractions) are also protected by the onlyOwner modifier, meaning only the contract owner can call these functions.
Trust Assumption - Since the owner is presumably trusted, the risk of a malicious reentrancy attack from the owner is less likely to happen.
However, there are still potential concerns:
Unintentional Reentrancy - Even a trusted owner could trigger reentrancy by making external calls to malicious contracts.
False Security - The contract claims to implement reentrancy protection, but it's ineffective, which could lead to false security assumptions.
Manual code review
Follow the proper implementation: https://soliditylang.org/blog/2024/01/26/transient-storage
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.