Skip to main content

RuoYi CVE-2026-108802

| EUVDEUVD-2026-97234 LOW
Cross-site Scripting (XSS) (CWE-79)
2026-10-12 VulDB GHSA-pq38-jcrf-2whw
2.0
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Authenticate to RuoYi backend
  2. Delivery
    Inject payload into cssClass via dict data add
  3. Exploit
    Store malicious script in dictionary entry
  4. Execution
    Victim opens Drawer Preview
  5. Persist
    Script executes in victim browser
  6. Impact
    Session/action hijack in admin context

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 an authenticated low-privilege account on the RuoYi admin backend (PR:L) able to reach the Dictionary Data management feature at /system/dict/data/add and submit the cssClass argument. The payload is stored, so execution additionally requires a second user to passively view the Dictionary Data Drawer Preview (renderDrawer), which triggers the injected script in that victim's browser (UI:P). Limiting factors: prior authentication is mandatory, the vulnerable path is an administrative dictionary-management function (not public-facing), and impact depends on a victim opening the preview - there is no unauthenticated or zero-interaction path. No vendor patch is available, so mitigation currently depends on input/output sanitization or restricting access to the dictionary feature.

Impact

This is a medium-severity stored cross-site scripting flaw (CWE-79) with a modest real-world priority. The vendor-supplied CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P, score 5.1) indicates a network-reachable but privilege-gated issue: PR:L means an authenticated (low-privilege) account is required, UI:P means a victim must passively view the injected content, and impact is limited to low integrity (VI:L) with no confidentiality or availability impact. The 'E:P' exploit-maturity metric aligns with the confirmed public POC. Publicly available exploit code exists (GitHub, Bob-wentao security report), but there is NO CISA KEV listing and NO EPSS score was provided, so there is no evidence of active or widespread exploitation - this is POC availability, not confirmed exploitation in the wild. Net assessment: a legitimate but lower-tier issue. The authentication requirement (PR:L) and need for victim interaction (UI:P) meaningfully constrain impact; this is NOT a drive-by unauthenticated RCE. Note the injection point is an administrative dictionary-management function, so the attacker already needs backend access, further narrowing the realistic threat to insider/second-order scenarios. No conflicting signals in the CVSS data itself; the main gap is the absence of EPSS/KEV telemetry to gauge actual exploitation interest.

Exploit ScenarioDerived

An authenticated low-privilege user with access to the RuoYi admin backend submits a dictionary data entry via /system/dict/data/add, injecting a malicious payload into the cssClass argument. When another user (e.g., an administrator) opens the Dictionary Data Drawer Preview, the renderDrawer function reflects the stored payload and the script executes in their browser session. A public POC demonstrating this stored XSS is available on GitHub.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 12, 2026

Stored cross-site scripting in y_project RuoYi up to and including 4.8.3 lets an authenticated low-privilege admin user inject arbitrary script through the cssClass argument handled by renderDrawer in the Dictionary Data Drawer Preview at /system/dict/data/add; the payload is persisted and executes in the browser of any second user who opens the preview. Publicly available exploit code exists (a proof-of-concept is published on GitHub by Bob-wentao), but there is no indication of confirmed active exploitation (no CISA KEV entry). Successful abuse requires a valid backend account plus a victim passively viewing the affected preview, so impact is limited to client-side actions in that victim's session rather than server compromise, consistent with the medium severity (CVSS 5.1) rating.

RemediationAI

No vendor-released patch identified at time of analysis: the vendor was contacted early in the disclosure process and did not respond, so there is no fixed version to upgrade to and no upstream commit or tagged release has been cited in the available references. Because a patch is absent, prioritize compensating controls. First, strictly restrict access to the dictionary management endpoints (/system/dict/data/add and related dictionary APIs) to fully trusted administrators, since exploitation requires a low-privilege authenticated account; assume any compromised or over-privileged account can plant a stored payload. Second, deploy input validation and output encoding around the cssClass argument and the renderDrawer preview path so dictionary-controlled attributes are HTML-encoded or whitelist-validated before rendering - this is the direct fix for the CWE-79 root cause but requires code changes in a fork or custom overlay and may break legitimate styling classes if too aggressive. Third, audit existing dictionary records for already-stored script payloads and purge them, add a strict Content-Security-Policy (e.g., script-src 'self' with no unsafe-inline) to blunt execution, and add WAF rules matching script patterns in dictionary parameters as a stopgap with the usual false-positive trade-off. Track the VulDB advisory (https://vuldb.com/vuln/416579) and the public PoC (https://github.com/Bob-wentao/security-report-for-ruoyi-dictionary-preview-stored-xss) for any later vendor fix, and treat the preview feature as untrusted until then.

Affected VersionsENISA

RuoYi 4.8.3
RuoYi 4.8.0
RuoYi 4.8.2
RuoYi 4.8.1

Affected Packages

euvd ruoyi 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 flaw is a classic CWE-79 improper neutralization of input during web page generation, specifically its stored/persistent variant, in RuoYi, a Java/Spring Boot-based rapid-development admin framework widely used in China. In the Dictionary Data management module, the dictionary type/drawer components pass a cssClass argument into renderDrawer, which builds the Dictionary Data Drawer Preview markup without adequate output encoding; the injected value is saved server-side with the dictionary record and re-rendered to every user who opens the drawer, so the malicious markup executes in the victim's browser origin rather than only in the submitting user's view. Because execution occurs in the admin application's origin, script could read page content, act on behalf of the victim against RuoYi endpoints, or exfiltrate data the victim can see; it does not by itself grant server-side code execution or database access. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N) confirms a network-reachable path requiring low privileges and passive victim interaction, matching the independent CVSS 3.1 assessment (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) which additionally notes a changed scope because the injected script runs in the victim's context.

Know when Ruoyi 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 2.0 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
vuln.today AI 5.4 MEDIUM

Authenticated backend access needed (PR:L) and a victim must view the stored payload (UI:R); XSS crosses into the victim's browser context (S:C) with low confidentiality/integrity impact 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:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
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

Lifecycle Timeline

3
Severity Changed
Oct 12, 2026 - 06:22 NVD
MEDIUM LOW
CVSS changed
Oct 12, 2026 - 06:22 NVD
5.1 (MEDIUM) 2.0 (LOW)
CVE Published
Oct 12, 2026 - 05:00 cve.org
MEDIUM 5.1

DescriptionCVE.org

A weakness has been identified in y_project RuoYi up to 4.8.3. This affects the function renderDrawer of the file /system/dict/data/add of the component Dictionary Data Drawer Preview. Executing a manipulation of the argument cssClass can lead to cross site scripting. The attack may be performed from remote. The exploit has been made available to the public and could be used for attacks. The vendor was contacted early about this disclosure but did not respond in any way.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Medium
popular open-source Chinese rapid-development admin framework, common but not ubiquitous
Exploit
POC
Public exploit code exists
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 LOW
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
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 Ruoyi

View all
CVE-2025-28412 CRITICAL POC
9.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the /editSave method in SysNoticeControlle

CVE-2025-28410 CRITICAL POC
9.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the cancelAuthUserAll method does not prop

CVE-2025-28406 CRITICAL POC
9.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the jobLogId parameter. Rated critical sev

CVE-2025-28405 CRITICAL POC
9.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the changeStatus method. Rated critical se

CVE-2025-28402 CRITICAL POC
9.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the jobId parameter. Rated critical severi

CVE-2023-49371 CRITICAL POC
9.8 Dec 01

RuoYi up to v4.6 was discovered to contain a SQL injection vulnerability via /system/dept/edit. Rated critical severity

CVE-2022-4566 CRITICAL POC
9.8 Dec 16

A vulnerability, which was classified as critical, has been found in y_project RuoYi 4.7.5. Rated critical severity (CVS

CVE-2025-70985 CRITICAL POC
9.1 Jan 23

RuoYi v4.8.2 has an access control flaw in the update function allowing unauthorized attackers to modify arbitrary data

CVE-2025-28409 HIGH POC
8.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the add method of the /add/{parentId} endp

CVE-2025-28407 HIGH POC
8.8 Apr 07

An issue in RUoYi v.4.8.0 allows a remote attacker to escalate privileges via the edit method of the /edit/{dictId} endp

CVE-2025-56396 HIGH POC
8.8 Nov 26

An issue was discovered in Ruoyi 4.8.1 allowing attackers to gain escalated privileges due to the owning department havi

CVE-2022-23868 HIGH POC
7.8 Mar 30

RuoYi v4.7.2 contains a CSV injection vulnerability through ruoyi-admin when a victim opens .xlsx log file. Rated high s

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