The nonReentrant modifier in InheritanceManager contract does not work as it is expected, allowing to reenter to the functions that intended to be non-reentrant.
The nonReentrant modifier checks slot 1 in transient storage, but sets slot 0 after that:
That means that slot 1 will always be set to 0 and condition if tload(1) { revert(0, 0) } will never be true.
The functions intended to be non-reentrant are actually reentrant and allows to attack the InheritanceManager contract.
Manual review
Check slot 0 instead of slot 1:
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.