Omniscia Ultra Yield Audit

BaseControlledAsyncRedeem Static Analysis Findings

BaseControlledAsyncRedeem Static Analysis Findings

BCA-01S: Inexistent Sanitization of Input Address

Description:

The linked function accepts an address argument yet does not properly sanitize it.

Impact:

The presence of zero-value addresses, especially in constructor implementations, can cause the contract to be permanently inoperable. These checks are advised as zero-value inputs are a common side-effect of off-chain software related bugs.

Example:

src/vaults/BaseControlledAsyncRedeem.sol
83function initialize(
84 BaseControlledAsyncRedeemInitParams memory params
85) public virtual onlyInitializing {
86 require(params.asset != address(0), ZeroAssetAddress());
87
88 // Init OZ contracts
89 __AccessControl_init();
90 __AccessControlDefaultAdminRules_init(0, params.owner);
91 __Pausable_init();
92 __ERC20_init(params.name, params.symbol);
93 __ERC4626_init(IERC20(params.asset));
94
95 // Init self
96 _getBaseAsyncRedeemStorage().rateProvider = IUltraVaultRateProvider(params.rateProvider);
97
98 // Grant roles to owner
99 _grantRole(OPERATOR_ROLE, params.owner);
100 _grantRole(PAUSER_ROLE, params.owner);
101}

Recommendation:

We advise some basic sanitization to be put in place by ensuring that the address specified is non-zero.

Alleviation (28f27853965de07fb79f4f2b5fed696d35120032):

The input params.rateProvider address argument of the BaseControlledAsyncRedeem::initialize function is adequately sanitized as non-zero in the latest in-scope revision of the codebase, addressing this exhibit.