59236 sc low implementation contract lacks initializer protection
Submitted on Nov 10th 2025 at 08:36:23 UTC by @emilesean_es for Audit Comp | Firelight
Report ID: #59236
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/firelight-protocol/firelight-core/blob/main/contracts/FirelightVault.sol
Impacts:
Description
Title: Implementation Contract Lacks Initializer Protection
Description: The
FirelightVaultimplementation contract is upgradeable but lacks a constructor that calls_disableInitializers(). This allows any external actor to call the publicinitialize()function on the deployed implementation contract's address, granting themselves administrative control over the implementation contract's internal state. While this does not allow the attacker to control or affect the proxy contract's state, funds, or upgrade mechanism due to the separation of storage, it violates a fundamental security principle of the proxy pattern. This leaves the implementation contract in a state where it could be used for phishing or to mislead off-chain tooling, and it goes against established security best practices for upgradeable contracts.Severity: Insight: Security Best Practices
Location: FirelightVault.sol#L22
Count: 1
Remediation: Add a constructor to the
FirelightVaultcontract to disable the initializer. This ensures the implementation contract can never be initialized, securing it as intended. The/// @custom:oz-upgrades-unsafe-allow constructorpragma should be included for compatibility with standard upgrade tooling./// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); }
Link to Proof of Concept
https://gist.github.com/emilesean/45338f06e15757a5d2cf92acb16b8b36
Proof of Concept
Proof of Concept
Was this helpful?