CVE-2025-14085
Executive Summary
CVE-2025-14085 is a critical vulnerability in the youlai-mall e-commerce platform (versions 1.0.0 and 2.0.0) developed by Youlai. The flaw resides in the /app-api/v1/orders/ endpoint, where the orderId parameter is improperly sanitized, leading to Improper Control of Dynamically-Identified Variables (CWE-913). This allows an unauthenticated remote attacker to manipulate internal variables, potentially leading to data tampering, privilege escalation, or unauthorized access to order data. The vendor has not responded to disclosure, and no official patch is available. With a CVSS score of 6.3 (Medium), the vulnerability is exploitable over the network without authentication, making it a significant risk for any deployment of youlai-mall.
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.
No signup required
Supply Chain & Package Security
This vulnerability affects a Java-based e-commerce application (youlai-mall). While not a direct package manager issue (NPM, PyPI, etc.), the risk extends to the software supply chain if the application is deployed as a pre-built artifact or container image. Organizations should verify the integrity of their youlai-mall deployments and consider the lack of vendor response as a supply chain red flag.
CVSS Breakdown & Threat Level
- CVSS Score: 6.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – Vulnerability does not affect other components.
- Confidentiality Impact: Low (C:L) – Limited data exposure.
- Integrity Impact: Low (I:L) – Limited data modification.
- Availability Impact: Low (A:L) – Limited service disruption.
Threat Level: Medium. The ease of exploitation and public availability of PoC make this a realistic threat for unpatched instances.
Deep Dive & Mechanics
The vulnerability is a classic case of dynamic variable evaluation (CWE-913). The /app-api/v1/orders/ endpoint likely uses the orderId parameter to dynamically construct a query or object reference. For example, the code might do something like:
String orderId = request.getParameter("orderId");
// Unsafe: directly using orderId to access a map or construct a query
Order order = orderMap.get(orderId);
If orderId is not validated, an attacker can pass special values (e.g., __proto__, constructor, or SQL-like strings) to manipulate the underlying data structure or logic. In Java, this could manifest as:
- SpEL Injection: If the value is evaluated in a Spring Expression Language context.
- Map/List Manipulation: If the value is used to access a collection with dynamic keys.
- SQL Injection: If the value is concatenated into a SQL query without parameterization.
The public PoC (not provided in the input but referenced) likely demonstrates how to inject a payload that modifies order status, accesses other users' orders, or escalates privileges.
Vulnerable vs. Patched Code
Since no patch is available, we can only infer the vulnerable pattern. A typical vulnerable code snippet might look like:
Vulnerable Code (Java):
@GetMapping("/orders/")
public Order getOrder(@RequestParam String orderId) {
// Directly using orderId to fetch from a map
return orderRepository.getOrderById(orderId);
}
Patched Code (Hypothetical):
@GetMapping("/orders/")
public Order getOrder(@RequestParam String orderId) {
// Validate that orderId is a UUID or numeric
if (!orderId.matches("[a-fA-F0-9-]{36}")) {
throw new IllegalArgumentException("Invalid order ID");
}
return orderRepository.getOrderById(orderId);
}
The fix would involve strict input validation (whitelist pattern) and using parameterized queries or safe API calls.
Exploitation & Lab Setup
Red Team (Exploitation)
Lab Setup:
- Deploy youlai-mall 1.0.0 or 2.0.0 in a Docker container.
- Ensure the
/app-api/v1/orders/endpoint is accessible.
Exploitation Steps:
- Identify the vulnerable endpoint:
curl -v http://target:8080/app-api/v1/orders/?orderId=test - Attempt to manipulate the
orderIdparameter with special characters:curl "http://target:8080/app-api/v1/orders/?orderId=__proto__" - If the application uses SpEL, try:
curl "http://target:8080/app-api/v1/orders/?orderId=T(java.lang.Runtime).getRuntime().exec('id')" - For SQL injection (if applicable):
curl "http://target:8080/app-api/v1/orders/?orderId=1' OR '1'='1"
Expected Outcome: Unauthorized access to order data, modification of order status, or remote code execution (depending on the underlying framework).
Blue Team (Defense)
Detection:
- Monitor for unusual
orderIdvalues in logs (e.g., non-numeric, containing special characters). - Deploy WAF rules to block requests with suspicious patterns (e.g.,
__proto__,constructor, SQL keywords).
Mitigation:
- If patching is not possible, implement a reverse proxy (e.g., Nginx) to validate the
orderIdparameter:location /app-api/v1/orders/ { if ($arg_orderId !~ "^[a-fA-F0-9-]{36}$") { return 403; } proxy_pass http://backend; } - Restrict network access to the endpoint to trusted IPs only.
Indicators of Compromise (IOCs)
Network:
- HTTP requests to
/app-api/v1/orders/withorderIdcontaining special characters (e.g.,__proto__,constructor,',;). - Unusual response sizes or error messages indicating variable manipulation.
- HTTP requests to
Logs:
- Application logs showing
orderIdvalues that are not UUIDs or numeric. - Stack traces related to
SpelEvaluationExceptionorSQLException.
- Application logs showing
File System:
- Unexpected files in the application directory (if RCE is achieved).
- Modified order records in the database.
Detection Engineering
YARA Rule
rule CVE_2025_14085_Exploit {
meta:
description = "Detects exploitation attempts for CVE-2025-14085 in youlai-mall"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-14085"
strings:
$s1 = "orderId=" nocase
$s2 = "__proto__" nocase
$s3 = "constructor" nocase
$s4 = "T(java.lang.Runtime)" nocase
$s5 = "1' OR '1'='1" nocase
condition:
$s1 and any of ($s2, $s3, $s4, $s5)
}
Sigma Rule
title: CVE-2025-14085 Exploitation Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests targeting the vulnerable /app-api/v1/orders/ endpoint with suspicious orderId values.
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: '/app-api/v1/orders/'
cs-uri-query|contains|any:
- '__proto__'
- 'constructor'
- 'T(java.lang.Runtime)'
- "1' OR '1'='1"
condition: selection
falsepositives:
- Legitimate use of special characters in order IDs (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-14085 Exploitation Attempt"; flow:to_server; content:"/app-api/v1/orders/"; http_uri; content:"orderId="; http_uri; pcre:"/(__proto__|constructor|T\(java\.lang\.Runtime\)|1%27%20OR%20%271%27%3D%271)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate affected systems from the internet if possible.
- Implement WAF rules to block suspicious
orderIdvalues. - Apply input validation at the reverse proxy level (e.g., Nginx, HAProxy).
Long-Term Fix:
- Since the vendor is unresponsive, consider forking the project and applying the patch yourself:
- Validate
orderIdagainst a strict regex (e.g., UUID format). - Use parameterized queries or safe API calls.
- Validate
- Migrate to an alternative e-commerce platform if youlai-mall is critical.
Monitoring:
- Enable detailed logging for the
/app-api/v1/orders/endpoint. - Set up alerts for any detection rule matches.
Valters IT
DevSecOps & Cyber Threat Intelligence