The StabilityPool contract is designed to be upgradeable but incorrectly uses a constructor to initialize _initialOwner. Upgradeable contracts should use an initializer function instead, as constructors are not executed in proxy deployments. This issue can lead to _initialOwner never being set properly, potentially causing unintended access control vulnerabilities.
Vulnerability location: StabilityPool.sol#L59-L61
Owner Not Set: If _initialOwner is meant to define the contract owner, it will remain unset when deployed via a proxy. This could lead to loss of ownership control
Access Control Issues: Functions relying on onlyOwner may become permanently inaccessible or behave unexpectedly.
Deployment Failures: The constructor’s purpose is defeated in an upgradeable setup, leading to confusion and potential deployment issues.
Manual code review
Remove the constructor and move _initialOwner initialization inside the initialize function:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.