{"id":"GHSA-9wxg-vf3r-56hc","title":"OpenZeppelin Contracts Wizard: Line terminators in info.securityContact / info.license can inject lines into generated source","summary":"OpenZeppelin Contracts Wizard: Line terminators in info.securityContact / info.license can inject lines into generated source","severity":"low","cvss":3.3,"cwe":["CWE-94","CWE-116"],"vendor":"openzeppelin","product":"@openzeppelin/wizard","affected":["@openzeppelin/wizard <= 0.10.10","@openzeppelin/wizard-cairo <= 3.0.0","@openzeppelin/wizard-stellar <= 0.6.1","@openzeppelin/wizard-stylus <= 0.3.0"],"patched":["@openzeppelin/wizard 0.10.11","@openzeppelin/wizard-cairo 3.0.1","@openzeppelin/wizard-stellar 0.6.2","@openzeppelin/wizard-stylus 0.3.1"],"published":"2026-06-19","updated":"2026-06-19","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-9wxg-vf3r-56hc","references":[{"url":"https://github.com/OpenZeppelin/contracts-wizard/security/advisories/GHSA-9wxg-vf3r-56hc"},{"url":"https://github.com/advisories/GHSA-9wxg-vf3r-56hc"}],"tags":["ghsa","npm"],"ingestedAt":"2026-06-22T15:52:21.086Z","ecosystem":"npm","slug":"GHSA-9wxg-vf3r-56hc","body":"## Overview\n\n## Summary\n\nThe Contracts Wizard generators printed `info.securityContact` and `info.license` verbatim into a single-line comment of the generated Solidity, Cairo, Stellar/Soroban, and Stylus source without rejecting line terminators. A newline (`\\n` or `\\r\\n`) in either field ends the comment, so the text after it is emitted as source rather than remaining inside the comment — allowing arbitrary declarations to be injected into the generated contract.\n\n## Impact\n\nThis only matters when these fields are filled from input other than the user who will use the generated contract. Normal self-service use does not meet that condition:\n\n- **Web app, AI assistant, and CLI:** the user supplies these fields and uses their own output, so a line break only affects their own contract. (These fields are not URL-derived, so shared links cannot set them.)\n- **Self-hosted API:** same — the end user supplies the options and consumes the result.\n\nThe case that matters is an integration that fills these fields from untrusted input — for example, an MCP agent whose tool arguments are derived from content it processed. There, a newline in the value can add lines to output that otherwise looks like normal Wizard source. Impact is integrity-only; there is no execution on any Wizard service.\n\n## Patches\n\nFixed by rejecting line terminators in `setInfo` — the single code path all surfaces use — so the value can no longer break out of the comment. Upgrade to the patched versions. `@openzeppelin/wizard-confidential` and `@openzeppelin/wizard-uniswap-hooks` reuse this `setInfo` through their `@openzeppelin/wizard` dependency and receive the fix once that dependency is updated to a patched version.\n\n## Affected packages\n\n- `@openzeppelin/wizard <= 0.10.10`\n- `@openzeppelin/wizard-cairo <= 3.0.0`\n- `@openzeppelin/wizard-stellar <= 0.6.1`\n- `@openzeppelin/wizard-stylus <= 0.3.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `@openzeppelin/wizard 0.10.11`\n- `@openzeppelin/wizard-cairo 3.0.1`\n- `@openzeppelin/wizard-stellar 0.6.2`\n- `@openzeppelin/wizard-stylus 0.3.1`","depth":"sunlit","depthScore":18,"depthScoreParts":{"impact":18.2,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}