ghsa-9c22-pwxw-p6hx
Vulnerability from github
Impact
Initializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call.
Once an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution.
Note that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor.
Patches
A fix is included in the version v4.4.1 of @openzeppelin/contracts
and @openzeppelin/contracts-upgradeable
.
Workarounds
Avoid untrusted external calls during initialization.
References
https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3006
Credits
This issue was identified and reported by @chaitinblockchain through our bug bounty on Immunefi.
For more information
If you have any questions or comments about this advisory, or need assistance executing the mitigation, email us at security@openzeppelin.com.
{ "affected": [ { "package": { "ecosystem": "npm", "name": "@openzeppelin/contracts" }, "ranges": [ { "events": [ { "introduced": "3.2.0" }, { "fixed": "4.4.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "npm", "name": "@openzeppelin/contracts-upgradeable" }, "ranges": [ { "events": [ { "introduced": "3.2.0" }, { "fixed": "4.4.1" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2022-39384" ], "database_specific": { "cwe_ids": [ "CWE-665" ], "github_reviewed": true, "github_reviewed_at": "2021-12-14T19:22:45Z", "nvd_published_at": "2022-11-04T22:15:00Z", "severity": "MODERATE" }, "details": "### Impact\n\nInitializer functions that are invoked separate from contract creation (the most prominent example being minimal proxies) may be reentered if they make an untrusted non-view external call.\n\nOnce an initializer has finished running it can never be re-executed. However, an exception put in place to support multiple inheritance made reentrancy possible in the scenario described above, breaking the expectation that there is a single execution.\n\nNote that upgradeable proxies are commonly initialized together with contract creation, where reentrancy is not feasible, so the impact of this issue is believed to be minor.\n\n### Patches\n\nA fix is included in the version v4.4.1 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`.\n\n### Workarounds\n\nAvoid untrusted external calls during initialization.\n\n### References\nhttps://github.com/OpenZeppelin/openzeppelin-contracts/pull/3006\n\n### Credits\n\nThis issue was identified and reported by @chaitinblockchain through [our bug bounty on Immunefi](https://immunefi.com/bounty/openzeppelin/).\n\n### For more information\n\nIf you have any questions or comments about this advisory, or need assistance executing the mitigation, email us at security@openzeppelin.com.\n", "id": "GHSA-9c22-pwxw-p6hx", "modified": "2022-11-07T21:13:24Z", "published": "2021-12-14T21:47:33Z", "references": [ { "type": "WEB", "url": "https://github.com/OpenZeppelin/openzeppelin-contracts/security/advisories/GHSA-9c22-pwxw-p6hx" }, { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-39384" }, { "type": "WEB", "url": "https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3006" }, { "type": "PACKAGE", "url": "https://github.com/OpenZeppelin/openzeppelin-contracts" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L", "type": "CVSS_V3" } ], "summary": "OpenZeppelin Contracts initializer reentrancy may lead to double initialization" }
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.