Skip to main content

GrandNode 2 EUVDEUVD-2026-104569

| CVE-2026-112249 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-19 VulDB GHSA-vxcv-8gxv-hggx
4.8
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as store manager or vendor
  2. Exploit
    Inject script into product description field
  3. Execution
    Victim views affected product page
  4. Impact
    Script 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

grandnode2 2.0
grandnode2 2.2
grandnode2 2.3.0
grandnode2 2.1

Affected Packages

euvd grandnode2 no fix

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

Vendor (VulDB) PRIMARY 4.8 MEDIUM
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
vuln.today AI 4.8 MEDIUM

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.

3.1 AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:H/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
High
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.4%
Top 67% exploitable
Prevalence
Low
niche open-source .NET e-commerce platform, limited production footprint
Data Quality
7 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

24
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy