n8n Improper CSP Enforcement in Webhook Responses May Allow Stored XSS
Description
n8n is an open source workflow automation platform. Prior to version 1.123.2, a Cross-Site Scripting (XSS) vulnerability has been identified in the handling of webhook responses and related HTTP endpoints. Under certain conditions, the Content Security Policy (CSP) sandbox protection intended to isolate HTML responses may not be applied correctly. An authenticated user with permission to create or modify workflows could abuse this to execute malicious scripts with same-origin privileges when other users interact with the crafted workflow. This could lead to session hijacking and account takeover. This issue has been patched in version 1.123.2.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
n8nnpm | >= 1.123.0, < 1.123.2 | 1.123.2 |
n8nnpm | < 1.122.5 | 1.122.5 |
Affected products
1Patches
2ced34c0f93abfix(core): Fix html header check (#22713)
2 files changed · +7 −3
packages/core/src/html-sandbox.ts+1 −1 modified@@ -17,7 +17,7 @@ export const getWebhookSandboxCSP = (): string => { * as HTML. */ export const isHtmlRenderedContentType = (contentType: string) => { - const contentTypeLower = contentType.toLowerCase(); + const contentTypeLower = contentType.trim().toLowerCase(); return ( // The content-type can also contain a charset, e.g. "text/html; charset=utf-8"
packages/core/src/__tests__/html-sandbox.test.ts+6 −2 modified@@ -75,11 +75,15 @@ describe('isHtmlRenderedContentType', () => { }); }); + it('should handle content type with extra spaces', () => { + expect(isHtmlRenderedContentType(' text/html')).toBe(true); + expect(isHtmlRenderedContentType('text/html ')).toBe(true); + expect(isHtmlRenderedContentType(' text/html ')).toBe(true); + }); + it('should handle edge cases', () => { expect(isHtmlRenderedContentType('text/htmlsomething')).toBe(true); expect(isHtmlRenderedContentType('application/xhtml+xmlsomething')).toBe(true); - expect(isHtmlRenderedContentType(' text/html')).toBe(false); - expect(isHtmlRenderedContentType('text/html ')).toBe(true); }); });
e8cf4d6bb3affix(core): Fix html header check (#22713)
2 files changed · +7 −3
packages/core/src/html-sandbox.ts+1 −1 modified@@ -17,7 +17,7 @@ export const getWebhookSandboxCSP = (): string => { * as HTML. */ export const isHtmlRenderedContentType = (contentType: string) => { - const contentTypeLower = contentType.toLowerCase(); + const contentTypeLower = contentType.trim().toLowerCase(); return ( // The content-type can also contain a charset, e.g. "text/html; charset=utf-8"
packages/core/src/__tests__/html-sandbox.test.ts+6 −2 modified@@ -75,11 +75,15 @@ describe('isHtmlRenderedContentType', () => { }); }); + it('should handle content type with extra spaces', () => { + expect(isHtmlRenderedContentType(' text/html')).toBe(true); + expect(isHtmlRenderedContentType('text/html ')).toBe(true); + expect(isHtmlRenderedContentType(' text/html ')).toBe(true); + }); + it('should handle edge cases', () => { expect(isHtmlRenderedContentType('text/htmlsomething')).toBe(true); expect(isHtmlRenderedContentType('application/xhtml+xmlsomething')).toBe(true); - expect(isHtmlRenderedContentType(' text/html')).toBe(false); - expect(isHtmlRenderedContentType('text/html ')).toBe(true); }); });
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-825q-w924-xhgxghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2026-25051ghsaADVISORY
- github.com/n8n-io/n8n/commit/ced34c0f93ab4c759a56065965986094d8ef7323ghsax_refsource_MISCWEB
- github.com/n8n-io/n8n/commit/e8cf4d6bb3af94dc296cbb67bc3dd20e9b508ac9ghsax_refsource_MISCWEB
- github.com/n8n-io/n8n/security/advisories/GHSA-825q-w924-xhgxghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.