Policy check is bypassed if the policy was added to a console account that was initially created without one because the fallback is not changed from the standard gnosis one to `ConsoleFallbackHandler`
Audit: 2023-10-brahma-findings
Severity: HIGH

# Lines of code

https://github.com/code-423n4/2023-10-brahma/blob/main/contracts/src/core/registries/PolicyRegistry.sol#L35-L59


# Vulnerability details

## Summary

Whenever a Gnosis safe is interacted with in a way that it does not know or have a specific implementation for it then passes execution to a specific fallback handler. For Console Accounts that have a valid policy hash and sub-accounts that handler is set as `ConsoleFallbackHandler` and is specifically [used to](https://github.com/code-423n4/2023-10-brahma/blob/main/contracts/src/core/ConsoleFallbackHandler.sol#L15):

> to provide compatibility between pre 1.3.0 and 1.3.0+ Safe contracts, and ensure actions performed are policy abiding

Console Accounts can also be created without a valid policy hash. In that case, the fallback handler that is used is the default [Gnosis safe one](https://github.com/code-423n4/2023-10-brahma/blob/main/contracts/src/core/SafeDeployer.sol#L131-L134).

The console system allows for a policy to be updated (or added) after creation via [`PolicyRegistry::updatePolicy`](https://github.com/code-423n4/2023-10-brahma/blob/main/contracts/src/core/registries/PolicyRegistry.sol#L35-L59). However, when a console account that was initially created without a policy is added a policy, the default fallback handler is not changed, skipping validation completely. This can happen maliciously or unintentional but the effect is the same, that policy validation is skipped.

## Vulnerability Details

When an account is deployed via `SafeDeployer::deployConsoleAccount`, execution flows to `SafeDeployer::_setupConsoleAccount` where a fallback is set as argument for the `IGnosisSafe.setup` call that will setup the Gnosis safe account:

https://github.com/code-423n4/2023-10-brahma/blob/main/contracts/src/core/SafeDeployer.sol#L110-L160
```Solidity
    function _setupConsoleAccount(address[] memory _owners, uint256 _threshold, bool _policyHashValid)
        private
        view
        returns (bytes memory)
    {
        address fallbackHandler;
        Types.Executable[] memory txns;


        if (_policyHashValid) {
            txns = new Types.Executable[](2);
            fallbackHandler = AddressProviderService._getAuthorizedAddress(_CONSOLE_FALLBACK_HANDLER_HASH);

            // ... code ...

        } else {
            txns = new Types.Executable[](1);
            fallbackHandler = AddressProviderService._getAuthorizedAddress(_GNOSIS_FALLBACK_HANDLER_HASH);
        }

        // ... code ...

        return abi.encodeCall(
            IGnosisSafe.setup,
            (
                // ...
                fallbackHandler,
                // ...
            )
        );
    }
```
where `AddressProviderService._getAuthorizedAddress(_GNOSIS_FALLBACK_HANDLER_HASH)` points to a deployment of `ConsoleFallbackHandler` and `AddressProviderService._getAuthorizedAddress(_GNOSIS_FALLBACK_HANDLER_HASH)`, the else branch without a valid policy, points to a [standard compatibility f