---
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
---

## Overview

## Summary

The 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.

## Impact

This 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:

- **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.)
- **Self-hosted API:** same — the end user supplies the options and consumes the result.

The 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.

## Patches

Fixed 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.

## Affected packages

- `@openzeppelin/wizard <= 0.10.10`
- `@openzeppelin/wizard-cairo <= 3.0.0`
- `@openzeppelin/wizard-stellar <= 0.6.1`
- `@openzeppelin/wizard-stylus <= 0.3.0`

## Remediation

Upgrade to a patched release:

- `@openzeppelin/wizard 0.10.11`
- `@openzeppelin/wizard-cairo 3.0.1`
- `@openzeppelin/wizard-stellar 0.6.2`
- `@openzeppelin/wizard-stylus 0.3.1`
