A non-system call can be act as a system call on `_loadFarCallABIIntoActivePtr` whenever the value in call of non-system call is not 0 due to hardcoded value
Audit: 2023-10-zksync-findings
Severity: MEDIUM

# Lines of code

https://github.com/code-423n4/2023-10-zksync/blob/main/code/system-contracts/contracts/libraries/EfficientCall.sol#L139


# Vulnerability details

## Impact

A non-system call can be act as a system call on `_loadFarCallABIIntoActivePtr` whenever the value in call of non-system call is not 0 due to hardcoded value

## Proof of Concept

In `EfficientCall.sol`, compared to last system-contracts audit, now in a call (or rawCall) there is a parameter to determine whether the call is a system call, `_isSystem` flag.

```js
File: EfficientCall.sol
51:     /// @notice Perform a `call` without copying calldata to memory.
52:     /// @param _gas The gas to use for the call.
53:     /// @param _address The address to call.
54:     /// @param _value The `msg.value` to send.
55:     /// @param _data The calldata to use for the call.
56:     /// @param _isSystem Whether the call should contain the `isSystem` flag.
57:     /// @return returnData The copied to memory return data.
58:     function call(
59:         uint256 _gas,
60:         address _address,
61:         uint256 _value,
62:         bytes calldata _data,
63:         bool _isSystem
64:     ) internal returns (bytes memory returnData) {
65:         bool success = rawCall(_gas, _address, _value, _data, _isSystem);
66:         returnData = _verifyCallResult(success);
67:     }
...
117:     /// @notice Perform a `call` without copying calldata to memory.
118:     /// @param _gas The gas to use for the call.
119:     /// @param _address The address to call.
120:     /// @param _value The `msg.value` to send.
121:     /// @param _data The calldata to use for the call.
122:     /// @param _isSystem Whether the call should contain the `isSystem` flag.
123:     /// @return success whether the call was successful.
124:     function rawCall(
125:         uint256 _gas,
126:         address _address,
127:         uint256 _value,
128:         bytes calldata _data,
129:         bool _isSystem
130:     ) internal returns (bool success) {
131:         if (_value == 0) {
132:             _loadFarCallABIIntoActivePtr(_gas, _data, false, _isSystem);
...
138:         } else {
139:             _loadFarCallABIIntoActivePtr(_gas, _data, false, true);
...
151:         }
152:     }
...
240:     /// @dev Load the far call ABI into active ptr, that will be used for the next call by reference.
241:     /// @param _gas The gas to be passed to the call.
242:     /// @param _data The calldata to be passed to the call.
243:     /// @param _isConstructor Whether the call is a constructor call.
244:     /// @param _isSystem Whether the call is a system call.
245:     function _loadFarCallABIIntoActivePtr(
246:         uint256 _gas,
247:         bytes calldata _data,
248:         bool _isConstructor,
249:         bool _isSystem
250:     ) private view {
...
274:     }
```

In this `rawCall`, it will then load the far call ABI into active ptr, that will be used for the next call by reference, (calling `_loadFarCallABI