CVE-2026-48054

Source
https://cve.org/CVERecord?id=CVE-2026-48054
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-48054.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-48054
Aliases
Published
2026-08-06T21:37:54.767Z
Modified
2026-08-09T03:30:42.005718276Z
Severity
  • 8.8 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H CVSS Calculator
Summary
OpenZeppelin Contracts Wizard has Code Injection in Generated Hardhat and Foundry Tests via Unsanitized opts.name / opts.uri
Details

OpenZeppelin Contracts Wizardis a web application to interactively build a contract out of components from OpenZeppelin Contracts. Versions prior to 0.10.9 generate a Hardhat test file (test/test.ts) by interpolating user-supplied opts.name (ERC20/ERC721) and opts.uri (ERC1155) directly into TypeScript string literals at zip-hardhat.ts:48 and :50 without any JavaScript string escaping. No authentication is required: an attacker crafts a URL such as https[:]//wizard[.]openzeppelin[.]com/#/erc20?name=");require("child_process").execSync("...");(" and shares it with a developer. When the victim downloads the resulting zip archive and runs npx hardhat test, the injected Node.js code executes with the developer's local OS privileges. Version 0.10.9 fixes the issue.

Database specific
{
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
        "CWE-94"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48054.json"
}
References

Affected packages

Git / github.com/openzeppelin/contracts-wizard

Affected ranges

Type
GIT
Repo
https://github.com/openzeppelin/contracts-wizard
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Fixed
Database specific
{
    "extracted_events": [
        {
            "introduced": "0"
        },
        {
            "fixed": "0.10.9"
        }
    ],
    "source": [
        "AFFECTED_FIELD",
        "REFERENCES"
    ]
}

Affected versions

@openzeppelin/contracts-cli@0.*
@openzeppelin/contracts-cli@0.1.0
@openzeppelin/contracts-cli@0.1.1
@openzeppelin/contracts-mcp@0.*
@openzeppelin/contracts-mcp@0.0.5
@openzeppelin/contracts-mcp@0.0.6
@openzeppelin/contracts-mcp@0.0.7
@openzeppelin/contracts-mcp@0.1.0
@openzeppelin/contracts-mcp@0.2.0
@openzeppelin/contracts-mcp@0.3.0
@openzeppelin/contracts-mcp@0.4.0
@openzeppelin/contracts-mcp@0.4.2
@openzeppelin/contracts-mcp@0.4.3
@openzeppelin/contracts-mcp@0.4.4
@openzeppelin/contracts-mcp@0.4.5
@openzeppelin/contracts-mcp@0.4.6
@openzeppelin/contracts-mcp@0.5.0
@openzeppelin/contracts-mcp@0.5.1
@openzeppelin/contracts-mcp@0.5.2
@openzeppelin/contracts-mcp@0.5.3
@openzeppelin/contracts-mcp@0.5.4
@openzeppelin/contracts-mcp@0.5.5
@openzeppelin/contracts-mcp@0.5.6
@openzeppelin/contracts-mcp@0.5.7
@openzeppelin/contracts-mcp@0.5.8
@openzeppelin/wizard-cairo@0.*
@openzeppelin/wizard-cairo@0.1.0
@openzeppelin/wizard-cairo@0.10.0
@openzeppelin/wizard-cairo@0.10.1
@openzeppelin/wizard-cairo@0.10.2
@openzeppelin/wizard-cairo@0.11.0
@openzeppelin/wizard-cairo@0.12.0
@openzeppelin/wizard-cairo@0.13.0
@openzeppelin/wizard-cairo@0.14.0
@openzeppelin/wizard-cairo@0.15.0
@openzeppelin/wizard-cairo@0.16.0
@openzeppelin/wizard-cairo@0.17.0
@openzeppelin/wizard-cairo@0.18.0
@openzeppelin/wizard-cairo@0.19.0
@openzeppelin/wizard-cairo@0.2.0
@openzeppelin/wizard-cairo@0.20.0
@openzeppelin/wizard-cairo@0.20.1
@openzeppelin/wizard-cairo@0.21.0
@openzeppelin/wizard-cairo@0.21.1
@openzeppelin/wizard-cairo@0.3.0
@openzeppelin/wizard-cairo@0.3.1
@openzeppelin/wizard-cairo@0.4.0
@openzeppelin/wizard-cairo@0.5.0
@openzeppelin/wizard-cairo@0.6.0
@openzeppelin/wizard-cairo@0.8.0
@openzeppelin/wizard-cairo@0.9.0
@openzeppelin/wizard-cairo@0.9.1
@openzeppelin/wizard-cairo@0.9.2
@openzeppelin/wizard-cairo@1.*
@openzeppelin/wizard-cairo@1.0.0
@openzeppelin/wizard-cairo@1.1.0
@openzeppelin/wizard-cairo@2.*
@openzeppelin/wizard-cairo@2.0.0
@openzeppelin/wizard-cairo@2.0.1
@openzeppelin/wizard-cairo@2.1.0
@openzeppelin/wizard-cairo@3.*
@openzeppelin/wizard-cairo@3.0.0
@openzeppelin/wizard-common@0.*
@openzeppelin/wizard-common@0.0.1
@openzeppelin/wizard-common@0.0.2
@openzeppelin/wizard-common@0.0.3
@openzeppelin/wizard-common@0.1.0
@openzeppelin/wizard-common@0.1.1
@openzeppelin/wizard-common@0.1.2
@openzeppelin/wizard-common@0.2.0
@openzeppelin/wizard-common@0.3.1
@openzeppelin/wizard-common@0.3.2
@openzeppelin/wizard-common@0.3.3
@openzeppelin/wizard-common@0.4.0
@openzeppelin/wizard-common@0.4.1
@openzeppelin/wizard-common@0.4.2
@openzeppelin/wizard-common@0.4.3
@openzeppelin/wizard-common@0.4.4
@openzeppelin/wizard-common@0.5.0
@openzeppelin/wizard-confidential@0.*
@openzeppelin/wizard-confidential@0.1.0
@openzeppelin/wizard-confidential@0.1.1
@openzeppelin/wizard-mcp@0.*
@openzeppelin/wizard-mcp@0.0.1
@openzeppelin/wizard-mcp@0.0.2
@openzeppelin/wizard-mcp@0.0.3
@openzeppelin/wizard-mcp@0.0.4
@openzeppelin/wizard-stellar@0.*
@openzeppelin/wizard-stellar@0.1.0
@openzeppelin/wizard-stellar@0.1.1
@openzeppelin/wizard-stellar@0.2.0
@openzeppelin/wizard-stellar@0.2.1
@openzeppelin/wizard-stellar@0.2.2
@openzeppelin/wizard-stellar@0.2.3
@openzeppelin/wizard-stellar@0.3.0
@openzeppelin/wizard-stellar@0.4.1
@openzeppelin/wizard-stellar@0.4.2
@openzeppelin/wizard-stellar@0.4.3
@openzeppelin/wizard-stellar@0.4.4
@openzeppelin/wizard-stellar@0.4.5
@openzeppelin/wizard-stellar@0.5.0
@openzeppelin/wizard-stellar@0.6.0
@openzeppelin/wizard-stylus@0.*
@openzeppelin/wizard-stylus@0.2.0
@openzeppelin/wizard-stylus@0.2.0-alpha.3
@openzeppelin/wizard-stylus@0.2.0-alpha.4
@openzeppelin/wizard-stylus@0.2.0-alpha.5
@openzeppelin/wizard-stylus@0.3.0
@openzeppelin/wizard-uniswap-hooks@0.*
@openzeppelin/wizard-uniswap-hooks@0.1.0
@openzeppelin/wizard-uniswap-hooks@0.1.1
@openzeppelin/wizard@0.*
@openzeppelin/wizard@0.1.0
@openzeppelin/wizard@0.1.1
@openzeppelin/wizard@0.10.0
@openzeppelin/wizard@0.10.2
@openzeppelin/wizard@0.10.3
@openzeppelin/wizard@0.10.4
@openzeppelin/wizard@0.10.5
@openzeppelin/wizard@0.10.6
@openzeppelin/wizard@0.10.7
@openzeppelin/wizard@0.10.8
@openzeppelin/wizard@0.2.0
@openzeppelin/wizard@0.2.1
@openzeppelin/wizard@0.2.2
@openzeppelin/wizard@0.2.3
@openzeppelin/wizard@0.3.0
@openzeppelin/wizard@0.4.0
@openzeppelin/wizard@0.4.1
@openzeppelin/wizard@0.4.2
@openzeppelin/wizard@0.4.3
@openzeppelin/wizard@0.4.4
@openzeppelin/wizard@0.4.5
@openzeppelin/wizard@0.4.6
@openzeppelin/wizard@0.5.0
@openzeppelin/wizard@0.5.1
@openzeppelin/wizard@0.5.2
@openzeppelin/wizard@0.5.3
@openzeppelin/wizard@0.5.4
@openzeppelin/wizard@0.5.5
@openzeppelin/wizard@0.5.6
@openzeppelin/wizard@0.6.0
@openzeppelin/wizard@0.7.0
@openzeppelin/wizard@0.7.1
@openzeppelin/wizard@0.8.0
@openzeppelin/wizard@0.8.1
@openzeppelin/wizard@0.9.0

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-48054.json"