Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as store manager or vendor
-
ExploitInject script into product description field
-
ExecutionVictim views affected product page
-
ImpactScript executes in victim browser
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a privileged back-office account (store manager or vendor) with rights to edit product descriptions, since the XSS payload must be stored in product description rich-text fields that Grand.Web renders unencoded through Html.Raw in Product.Layout.Simple.cshtml on versions up to 2.3.0. Exploitation is further gated by victim interaction (UI:P): a separate user must view the affected product page for the stored script to execute. Limiting factors: PR:H means anonymous/unprivileged attackers cannot inject the payload, confining risk to deployments with multiple partially-trusted operators (e.g., multi-vendor marketplaces); the flaw is fully remediated in 2.4.0, which introduces allowlist-based HtmlSanitizer processing of this rich-text content. |
| Impact | This is a genuine but low-to-moderate priority issue, best characterized as a high-confidence-but-limited-impact flaw rather than an urgent threat. The vendor-supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:H/UI:P/VC:N/VI:L) scores 4.8 (medium), and the key moderating signals are consistent and credible: PR:H means an attacker must already hold a privileged account, and the source-code evidence in the fix PR confirms this precisely - the affected fields are 'Vendor/Store-manager-editable rich text rendered unencoded via Html.Raw', so this is a stored XSS injectable only by a store manager or vendor, not an anonymous visitor. UI:P further requires a victim to simply view the affected product page. There is no KEV listing and no public POC (reported solely by VulDB), so exploitation status is 'no public exploit identified at time of analysis' - this is not evidence of active exploitation, only of a disclosed, patched weakness. The signals do not conflict: network vector is real (the payload is served over HTTP), but the PR:H privilege gate and limited integrity-only impact (VC:N/VI:L) keep real-world risk contained to environments with multiple, partially-trusted back-office operators. One caveat: the vendor rated VC:N (no confidentiality impact), which is arguably optimistic for XSS, since script execution in a victim's authenticated session can realistically enable session/cookie theft - defenders should not assume zero confidentiality exposure. |
| Exploit ScenarioDerived | A user with store-manager or vendor privileges (PR:H) edits a product and embeds a malicious script into the product description, which is stored and later rendered unencoded via Html.Raw in Product.Layout.Simple.cshtml. When another user - such as a shopper or an admin reviewing the catalog - views that product page (UI:P), the script executes in their browser, enabling actions like session hijacking or defacement in the victim's context. No public exploit code has been identified at time of analysis, though the trivial nature of stored XSS makes exploitation straightforward once privileged access is obtained. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Stored cross-site scripting in GrandNode 2 through 2.3.0 lets a back-office operator with product-editing rights (store manager or vendor) plant script inside a product description that Grand.Web later renders unencoded through Html.Raw in Product.Layout.Simple.cshtml, so the payload executes in the browser of any other user who opens that product page. Because the CVSS vector carries PR:H, anonymous or unprivileged attackers cannot inject the payload themselves; the practical exposure is confined to deployments with multiple partially trusted operators, such as multi-vendor marketplaces, and execution still requires a victim to view the compromised page. A vendor fix is available in 2.4.0-beta and 2.4.0 (commit 41a8e349eab8d9641cf6ea800d738f2d8991ca22), no public exploit code has been identified at time of analysis, and this is best treated as a genuine but low-to-moderate priority flaw rather than an urgent threat.
RemediationAI
Vendor-released patch: upgrade to GrandNode 2.4.0 (or the 2.4.0-beta pre-release if 2.4.0 stable cannot yet be adopted), which pulls in HtmlSanitizer 9.2.995 and adds HtmlSanitizationService together with the [SanitizeHtml]/[NoHtml] validation attributes, per https://github.com/grandnode/grandnode2/releases/tag/2.4.0-beta, commit 41a8e349eab8d9641cf6ea800d738f2d8991ca22 and https://github.com/grandnode/grandnode2/pull/780. After upgrading, keep SecurityConfig.EnableHtmlSanitization at its default true - setting it to false restores raw, unsanitized HTML acceptance on every guarded rich-text field and re-introduces the flaw - and leave SanitizerAllowedIframeHosts empty or tightly scoped so the built-in video-embed defaults apply rather than allowing arbitrary framed hosts. For deployments that cannot upgrade immediately, the effective compensating controls are administrative rather than technical: restrict product-description editing to the smallest possible set of trusted back-office and vendor accounts, since the injection primitive requires an authenticated privileged session; audit and re-save existing product descriptions to strip script, iframe and event-handler markup already stored in the database; and, at the edge, apply a response policy or WAF rule that blocks inline script in product pages. A Content-Security-Policy on the storefront (no 'unsafe-inline' for script-src) meaningfully reduces execution even if a payload is stored, though it requires inventorying legitimate inline scripts and third-party embeds or storefront features may break during rollout.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-79 (improper neutralization of input during web page generation) in an ASP.NET Core MVC Razor view: the product description field is emitted with Html.Raw(), which deliberately bypasses Razor's default HTML output encoding, so any markup stored in that rich-text field is delivered verbatim to the browser. GrandNode's admin surface allows vendor and store-manager accounts to author such rich text, making the stored value an attacker-controlled HTML sink. The upstream fix (PR #780) does not simply remove Html.Raw; instead it introduces an allowlist-based sanitization layer built on the Ganss.Xss HtmlSanitizer library (pinned at version 9.2.995 via Directory.Packages.props) plus a new HtmlSanitizationService in Grand.Infrastructure/Security, wired to DataAnnotations attributes ([SanitizeHtml]/[NoHtml]) that reject markup on save. The new SecurityConfig exposes EnableHtmlSanitization (default true, documented as an operational escape hatch that re-opens raw HTML acceptance when disabled) and SanitizerAllowedIframeHosts, which restricts embedded frames to an allowlist (defaults: youtube.com, youtube-nocookie.com, vimeo.com, google.com and their subdomains) because iframe src is otherwise attacker-controlled; the service also strips interactive form-related tags (form, input, button, textarea, select, etc.) to close a phishing surface, and narrowly permits data: URIs only for img/src.
Know when Grandnode2 gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Stored XSS injectable only by store-manager/vendor (PR:H), requires a victim to view the page (UI:R), and executes cross-context (S:C) with limited C/I from session theft and DOM manipulation.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A vulnerability was detected in grandnode grandnode2 up to 2.3.0. Affected is the function Html.Raw of the file src/Web/Grand.Web/Views/Product/Product.Layout.Simple.cshtml of the component Product Description Handler. The manipulation results in cross site scripting. The attack can be launched remotely. Upgrading to version 2.4.0-beta and 2.4.0 is able to address this issue. The patch is identified as 41a8e349eab8d9641cf6ea800d738f2d8991ca22. Upgrading the affected component is recommended. The vendor was contacted early about this disclosure.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-104569
GHSA-vxcv-8gxv-hggx
NVD
CVE.org
EPSS
VulDB
Exploit-DB