HardhatFoundry
30,000 USDC
View results
Submission Details
Severity: low
Invalid

Nexus contract initilializes `ModuleManager` twice which leads to DoS

Summary

The _initModuleManager is called in constructor during deployment and in initializeAccount function of Nexus contract. This leads to revert as sentinel list tries to initialize itself twice.

Root Cause

https://github.com/Cyfrin/2024-07-biconomy/blob/9590f25cd63f7ad2c54feb618036984774f3879d/contracts/Nexus.sol#L77

_initModuleManager is called in constructor.

constructor(address anEntryPoint) {
_SELF = address(this);
require(address(anEntryPoint) != address(0), EntryPointCanNotBeZero());
_ENTRYPOINT = anEntryPoint;
_initModuleManager();
}

initializeAccount is called whenever new Nexus contract is created in factory.

if (!alreadyDeployed) {
INexus(account).initializeAccount(initData);
emit AccountCreated(account, initData, salt);
}

_initModuleManager initializes executors and validators linked list.

function _initModuleManager() internal virtual {
// account module storage
AccountStorage storage ams = _getAccountStorage();
ams.executors.init();
ams.validators.init();
}

When we try to initialize again it will revert with LinkedList_AlreadyInitialized.

function init(SentinelList storage self) internal {
if (alreadyInitialized(self)) revert LinkedList_AlreadyInitialized();
self.entries[SENTINEL] = SENTINEL;
}

Impact

Nexus contract deployment will fail.

Mitigation

Remove _initModuleManager from constructor.

Updates

Lead Judging Commences

0xnevi Lead Judge 12 months ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement
Assigned finding tags:

finding-initializeAccount-revert

Invalid, if a `Nexus.sol` contract is already deployed, it does not need to be initialized again within the factory as seen [here](https://github.com/Cyfrin/2024-07-biconomy/blob/9590f25cd63f7ad2c54feb618036984774f3879d/contracts/factory/NexusAccountFactory.sol#L58-L60), so no issue here

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.