{"id":"GHSA-w28w-gp39-m4p6","summary":"Prompty: Server-Side Template Injection to Remote Code Execution in the @prompty/core Nunjucks Renderer","details":"## Summary\nThe TypeScript Nunjucks renderer evaluated untrusted `.prompty` template bodies with unrestricted JavaScript member access. An attacker-controlled template could traverse constructor and prototype properties to execute JavaScript in the host Node.js process.\n\n## Affected packages\n- npm `@prompty/core` versions `\u003c= 0.1.4`\n- npm `@prompty/core` versions `\u003c= 2.0.0-beta.4`\n\n## Impact\nApplications that render untrusted, community-supplied, cloned, or LLM-generated `.prompty` files with the TypeScript runtime could allow attacker-controlled code execution with the privileges of the Node.js host process.\n\n## Remediation\nUpgrade to `@prompty/core` `2.0.0-beta.5` or later. The patched renderer sanitizes render inputs to own-data-only values, rejects constructor/prototype member traversal, and disallows template function calls. Ordinary interpolation, conditionals, loops, and own nested data properties remain supported.\n\n## Fix details\nThe fix is merged in PR #404 and includes regression coverage for default Nunjucks rendering, explicit renderer usage, unsafe member lookups, and attempted template function calls.","aliases":["CVE-2026-73299"],"modified":"2026-08-13T04:11:08.015471511Z","published":"2026-07-24T16:23:59Z","database_specific":{"github_reviewed_at":"2026-07-24T16:23:59Z","nvd_published_at":null,"cwe_ids":["CWE-1336","CWE-94"],"severity":"CRITICAL","github_reviewed":true},"references":[{"type":"WEB","url":"https://github.com/microsoft/prompty/security/advisories/GHSA-w28w-gp39-m4p6"},{"type":"WEB","url":"https://github.com/microsoft/prompty/pull/404"},{"type":"WEB","url":"https://github.com/microsoft/prompty/commit/047756f4c8caf91c5868eeb42520c938393277b0"},{"type":"PACKAGE","url":"https://github.com/microsoft/prompty"}],"affected":[{"package":{"name":"@prompty/core","ecosystem":"npm","purl":"pkg:npm/%40prompty/core"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.1.5"}]}],"database_specific":{"last_known_affected_version_range":"\u003c= 0.1.4","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-w28w-gp39-m4p6/GHSA-w28w-gp39-m4p6.json"}},{"package":{"name":"@prompty/core","ecosystem":"npm","purl":"pkg:npm/%40prompty/core"},"ranges":[{"type":"SEMVER","events":[{"introduced":"2.0.0-alpha.1"},{"fixed":"2.0.0-beta.5"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-w28w-gp39-m4p6/GHSA-w28w-gp39-m4p6.json","last_known_affected_version_range":"\u003c= 2.0.0-beta.4"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"}]}