Skip to main content

Shopclass CVE-2026-104479

| EUVDEUVD-2026-91855 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-03 disclosure@vulncheck.com GHSA-3gwr-hcgg-p3rv
5.1
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Self-register non-admin account
  2. Delivery
    Submit listing with <script> in description
  3. Exploit
    ItemActions.php stores HTML unsanitized
  4. Execution
    Victim opens listing page
  5. Impact
    Script executes in site origin

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

Exploitation requires three conditions to hold together: (1) the site admin must have enabled the non-default 'use TinyMCE on the frontend' option - per the vendor CHANGELOG this is off unless explicitly turned on, and on default configurations the plain-textarea path strips every tag so the flaw is not present; (2) the attacker must hold a self-registered non-admin account with permission to post an item listing (PR:L); and (3) a victim must passively view the malicious listing for the stored script to fire (UI:P). The specific vulnerable code path is ItemActions.php::prepareData(), which read the 'description' parameter with Params' XSS check switched off (Params::getParam('description', false, false)) and stored it without any replacement sanitization. These factors - non-default configuration, required authentication, and required victim page view - materially limit realistic exploitation despite the network attack vector.

Impact

This is a medium-severity stored XSS (vendor CVSS 4.0 base 5.1) whose real-world risk is tightly bounded, and the signals largely agree rather than conflict. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N with subsequent-system SC:L/SI:L) correctly reflects a network-reachable but authenticated (PR:L - a self-registered non-admin account) flaw that needs a victim to passively view the listing (UI:P), yielding only low confidentiality/integrity impact typical of script execution in another user's browser. No EPSS score, KEV listing, or POC was supplied in the intelligence, so exploitation probability cannot be quantified; based on the available data there is no public exploit identified at time of analysis. The most important risk-limiting signal is not in the CVSS vector at all but in the vendor source evidence: the vulnerable path only exists when an admin has turned on the non-default 'use TinyMCE on the frontend' setting - everywhere else Params' XSS check strips every tag, so the issue is unexploitable. The net picture is a genuine but conditional, authenticated, user-interaction-dependent XSS: a real issue to patch for sites using the frontend rich editor, not a high-urgency mass-exploitation threat.

Exploit ScenarioDerived

An attacker self-registers an ordinary (non-admin) account on a Shopclass site that has the frontend TinyMCE rich editor enabled, then submits an item listing whose description contains a <script> payload, which ItemActions.php stores verbatim because the tag-stripping XSS check is disabled on the rich-editor path. The script then executes in the site's origin in the browser of any visitor - or the author - who opens the listing, enabling session/cookie theft or UI manipulation. No public exploit code was identified in the provided data, though the fix commit publicly documents the vulnerable path.

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

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

Alert me

AnalysisAIv1 – Oct 03, 2026

Stored cross-site scripting in Shopclass versions before 6.2.0 lets a self-registered, non-administrative user with listing-posting rights embed persistent JavaScript in an item description, which then executes in the site origin for every visitor who views that listing - including the listing author. The flaw only exists on sites where an administrator has explicitly enabled the non-default "use TinyMCE on the frontend" option, because the rich-editor path in ItemActions.php::prepareData() disables Params' tag-stripping XSS check and, prior to the fix, stored the description verbatim with no replacement sanitization. Authentication is required (low-privileged account) and a victim must view the crafted listing, and no public exploit code has been identified at time of analysis; the vendor shipped an HTMLPurifier-based allow-list fix in 6.2.0 (commit c196f709) and the advisory is credited to VulnCheck.

RemediationAI

Upgrade to Shopclass 6.2.0 or later, which is the released version carrying the fix commit c196f70906522c9b9172c24f1b42cd0a02357422; the patch adds osc_sanitize_html() (HTMLPurifier with a strict HTML/CSS/URL-scheme allow-list) to the rich-editor branch of ItemActions.php::prepareData(), so description content that reaches the database can no longer contain script tags, iframes, event handlers or javascript:/data: URLs. If an immediate upgrade is not possible, the highest-value workaround is to disable the "use TinyMCE on the frontend" option in the site settings: this returns listings to the plain-textarea path that strips all tags, which eliminates the flaw entirely, at the cost of losing rich formatting for listings on the public site (admin-side editing is unaffected in terms of the vulnerability, but the admin path in pre-6.2.0 also stored unfiltered markup and should equally be treated as trusted-admin-only). Secondary compensating controls, each with trade-offs: close public self-registration or gate listing submission behind manual moderation/approval so untrusted non-admin accounts cannot post descriptions, accepting the loss of instant self-service publishing; and temporarily restrict listing creation to trusted roles, which reduces exposure but does not fix the underlying missing sanitization if any low-privileged account retains posting rights. Because the payload is stored and fires for passive viewers, there is no server-side request filter that reliably substitutes for the fix; deploying a Content-Security-Policy that forbids inline and third-party script is a useful defence-in-depth layer but must be scoped not to break the site's own front-end assets. Note that upgrading to 6.2.0 also removes the source-view button from the public listing editor. Vendor advisory and patch references: https://www.vulncheck.com/advisories/shopclass-before-6.2.0-stored-xss-via-listing-description-field and https://github.com/mindstellar/shopclass/commit/c196f70906522c9b9172c24f1b42cd0a02357422.

Affected VersionsENISA

shopclass 0 <6.2.0

Affected Packages

euvd shopclass fix: 6.2.0

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 vulnerability is a classic CWE-79 stored/persistent cross-site scripting issue rooted in an inconsistency between two input-handling paths. Shopclass (an Osclass-derived classifieds platform) reads the item 'description' parameter through ItemActions.php::prepareData(). On the plain-textarea path it calls Params::getParam('description'), whose XSS check strips all HTML tags. On the rich-editor path - active when osc_tinymce_frontend() is true or when running in the admin context - it called Params::getParam('description', false, false), deliberately disabling the XSS check so that TinyMCE's markup would survive; nothing was substituted for the removed filter, so raw HTML bypassing the editor entirely (a plain form POST was sufficient, source view not needed) was persisted to the database. The upstream fix introduces osc_sanitize_html() in hSanitize.php, an HTMLPurifier wrapper configured with an explicit HTML.Allowed allow-list (paragraphs, inline formatting, lists, links, headings, blockquote, hr, tables, span[style], img[src|alt|width|height]), a restricted CSS.AllowedProperties set limited to color, background-color, text-align, font-weight, font-style and text-decoration, and URI.AllowedSchemes limited to http, https and mailto; scripts, iframes, event handlers and non-http(s)/mailto URL schemes such as javascript: and data: are removed. Definition caching is intentionally disabled so no cached purifier definition is written to disk. Array inputs are walked so per-locale description maps are sanitized too.

Know when PHP 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 (vulncheck) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Self-registered non-admin poster gives PR:L, the victim must view the listing (UI:R), and script executing in the site origin against other users is a scope change (S:C) with low C/I and no availability impact.

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

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

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

Lifecycle Timeline

1
Patch available
Oct 03, 2026 - 01:01 EUVD

DescriptionCVE.org

Shopclass before 6.2.0 contains a stored cross-site scripting vulnerability that allows self-registered non-admin users to inject scripts into item listing descriptions when frontend TinyMCE is enabled. Attackers can submit malicious JavaScript, which ItemActions.php saves without tag stripping, causing it to execute in the site origin for any visitor viewing the listing.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
niche open-source osclass-fork classifieds script, limited production footprint
Social Media
1
Sightings
Data Quality
6 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.2%
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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
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.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

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