Summary
In the "withdrawInheritedFunds" function in the src/InheritanceManager.sol` contract uses "beneficiary.call()" to distribute funds to the beneficiaries which could expose the contract to a reentrancy attack
Vulnerability Details
```
    function withdrawInheritedFunds(address _asset) external {
        if (!isInherited) {
            revert NotYetInherited();
        }
        uint256 divisor = beneficiaries.length;
        if (_asset == address(0)) {
            uint256 ethAmountAvailable = address(this).balance;
            uint256 amountPerBeneficiary = ethAmountAvailable / divisor;
            for (uint256 i = 0; i < divisor; i++) {
                address payable beneficiary = payable(beneficiaries[i]);
  --            (bool success,) = beneficiary.call{value: amountPerBeneficiary}("");
              
                require(success, "something went wrong");
            }
        } else {
            uint256 assetAmountAvailable = IERC20(_asset).balanceOf(address(this));
            uint256 amountPerBeneficiary = assetAmountAvailable / divisor;
            for (uint256 i = 0; i < divisor; i++) {
                IERC20(_asset).safeTransfer(beneficiaries[i], amountPerBeneficiary);
            }
        }
    }
Impact
The attacker can potentially attack the contract by re-entering the contract and taking more than the amount allocated to a beneficiary
Tools Used
Slither
Recommendations
the "beneficiary.call{...}" should be replaced with "beneficiary.Transfer{...}", since "beneficiary.Transfer{...}" gives only the exact amount and doesn't give room for any reentrancy attack
    function withdrawInheritedFunds(address _asset) external {
        if (!isInherited) {
            revert NotYetInherited();
        }
        uint256 divisor = beneficiaries.length;
        if (_asset == address(0)) {
            uint256 ethAmountAvailable = address(this).balance;
            uint256 amountPerBeneficiary = ethAmountAvailable / divisor;
            for (uint256 i = 0; i < divisor; i++) {
                address payable beneficiary = payable(beneficiaries[i]);
              
   --           (bool success,) = beneficiary.call{value: amountPerBeneficiary}("");
   ++           (bool success,) = beneficiary.Transfer{value: amountPerBeneficiary}("");
              
                require(success, "something went wrong");
            }
        } else {
            uint256 assetAmountAvailable = IERC20(_asset).balanceOf(address(this));
            uint256 amountPerBeneficiary = assetAmountAvailable / divisor;
            for (uint256 i = 0; i < divisor; i++) {
                IERC20(_asset).safeTransfer(beneficiaries[i], amountPerBeneficiary);
            }
        }
    }