Summary
orval, when generating MSW mocks (output.mock: true), emits each schema property name as a single-quoted
object key in the mock factory WITHOUT escaping the single quote. A ' in a property name closes the key
and lands in object-literal context, where an injected computed property key [expr] is evaluated when the
mock factory is called (e.g. in tests / MSW handlers) -> RCE. The property name is a pure data field.
Verified on orval 8.19.0 / Node. CWE-94 / CWE-95 / CWE-116.
Details
export const getOpResponseMock = (...): Thing => ({'x': 0, [require("fs").writeFileSync("PWNED","")]: 0, 'y': faker...., ...overrideResponse});
Safe elsewhere: the zod schema double-quotes the property name; the TS interface key is a type (DoS only).
Distinct from orval's $ref / route-path / server-url / zod-default findings.
PoC
reproduce.sh (+ make_spec.py) attached: a property name x': 0, [require("fs").writeFileSync("<marker>","")]: 0, 'y
-> mock object literal; calling the mock factory writes the marker. Verified on 8.19.0.
Impact
JavaScript / OS command execution (via child_process) on the machine of anyone who generates orval mocks
from an attacker-controlled spec and runs them (tests / MSW). Estimated Critical, e.g.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N.
Suggested fix
Escape the property name for the JS string key (JSON.stringify), and never interpolate a raw property name
adjacent to [ ] in object-literal position.
Summary
orval, when generating MSW mocks (output.mock: true), emits each schema property name as a single-quoted
object key in the mock factory WITHOUT escaping the single quote. A ' in a property name closes the key
and lands in object-literal context, where an injected computed property key [expr] is evaluated when the
mock factory is called (e.g. in tests / MSW handlers) -> RCE. The property name is a pure data field.
Verified on orval 8.19.0 / Node. CWE-94 / CWE-95 / CWE-116.
Details
Safe elsewhere: the zod schema double-quotes the property name; the TS interface key is a type (DoS only).
Distinct from orval's $ref / route-path / server-url / zod-default findings.
PoC
reproduce.sh (+ make_spec.py) attached: a property name
x': 0, [require("fs").writeFileSync("<marker>","")]: 0, 'y-> mock object literal; calling the mock factory writes the marker. Verified on 8.19.0.
Impact
JavaScript / OS command execution (via child_process) on the machine of anyone who generates orval mocks
from an attacker-controlled spec and runs them (tests / MSW). Estimated Critical, e.g.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N.Suggested fix
Escape the property name for the JS string key (JSON.stringify), and never interpolate a raw property name
adjacent to [ ] in object-literal position.