CVE-2025-9411 Overview
A SQL injection vulnerability has been identified in lostvip-com ruoyi-go versions up to 2.1. The vulnerability exists within the SelectPageList function located in the file modules/system/service/LoginInforService.go. Manipulation of the isAsc argument enables attackers to inject arbitrary SQL commands. This vulnerability can be exploited remotely by authenticated attackers, and proof-of-concept exploit code has been publicly disclosed.
Critical Impact
Remote attackers with low privileges can exploit this SQL injection flaw to extract, modify, or delete database contents, potentially compromising the integrity and confidentiality of the entire application database.
Affected Products
- lostvip ruoyi-go versions up to 2.1
- Applications using the vulnerable LoginInforService.go module
- Systems exposing the SelectPageList function to user-controlled input
Discovery Timeline
- August 25, 2025 - CVE-2025-9411 published to NVD
- October 9, 2025 - Last updated in NVD database
Technical Details for CVE-2025-9411
Vulnerability Analysis
This SQL injection vulnerability (CWE-89) stems from improper neutralization of special elements used in SQL commands within the SelectPageList function. The vulnerability is classified under both CWE-89 (SQL Injection) and CWE-74 (Improper Neutralization of Special Elements in Output Used by a Downstream Component).
The vulnerable function accepts user input through the isAsc parameter, which is typically used to control the sort order of query results (ascending or descending). However, the application fails to properly validate or sanitize this input before incorporating it into SQL queries, allowing attackers to break out of the intended query structure and inject malicious SQL statements.
The vulnerability requires network access and low-level authentication to exploit, but does not require user interaction. While the immediate impact is limited to the vulnerable component (no scope change), successful exploitation can result in unauthorized access to confidential data, data modification, and potential service disruption.
Root Cause
The root cause of this vulnerability is insufficient input validation in the LoginInforService.go file. The isAsc parameter is directly concatenated or improperly parameterized into SQL queries without adequate sanitization. In Go applications using database drivers, this typically occurs when developers construct SQL queries using string concatenation rather than using parameterized queries or prepared statements.
The vendor was contacted early about this disclosure but did not respond, leaving users without an official patch or guidance.
Attack Vector
The attack vector is network-based, allowing remote exploitation. An authenticated attacker can craft malicious input for the isAsc parameter when interacting with the SelectPageList function. By injecting SQL syntax into this parameter, the attacker can manipulate the underlying database query to perform unauthorized operations.
Typical attack scenarios include:
- Extracting sensitive data from database tables using UNION-based injection
- Bypassing authentication or authorization checks
- Modifying or deleting database records
- Potentially achieving command execution if database features like xp_cmdshell (SQL Server) or LOAD_FILE (MySQL) are available
The exploit has been publicly disclosed through GitHub CVE Issue #5, increasing the risk of exploitation in the wild.
Detection Methods for CVE-2025-9411
Indicators of Compromise
- Unusual SQL error messages in application logs referencing the LoginInforService or SelectPageList function
- HTTP requests containing SQL syntax characters (;, ', --, UNION, SELECT) in the isAsc parameter
- Database query logs showing unexpected or malformed ORDER BY clauses
- Anomalous database access patterns, including bulk data extraction or unauthorized table access
Detection Strategies
- Deploy web application firewall (WAF) rules to detect SQL injection patterns in the isAsc parameter
- Implement runtime application self-protection (RASP) to monitor and block SQL injection attempts
- Configure database audit logging to capture and alert on suspicious query patterns
- Use SentinelOne Singularity XDR to correlate network, endpoint, and application-level indicators of SQL injection attacks
Monitoring Recommendations
- Enable verbose logging for the LoginInforService.go module to capture all parameter values
- Monitor database server logs for syntax errors or unexpected query structures
- Set up alerting for failed authentication attempts following database query anomalies
- Implement network traffic analysis to detect patterns consistent with data exfiltration
How to Mitigate CVE-2025-9411
Immediate Actions Required
- Restrict network access to the affected ruoyi-go application to trusted IP addresses only
- Implement input validation to allow only expected values (asc or desc) for the isAsc parameter
- Deploy WAF rules specifically targeting SQL injection in ordering parameters
- Consider disabling or restricting access to the SelectPageList functionality until a patch is available
Patch Information
No official patch is currently available from the vendor. The vendor was contacted early about this disclosure but did not respond. Users should monitor the ruoyi-go GitHub repository for potential security updates or consider implementing the workarounds below.
For additional technical details, refer to:
Workarounds
- Modify the LoginInforService.go source code to use parameterized queries or whitelist validation for the isAsc parameter
- Implement application-level input validation to reject any value other than asc or desc
- Use a reverse proxy or WAF to filter malicious requests before they reach the application
- Apply database-level access controls to limit the permissions of the application's database user
# Example: Input validation in Go (conceptual workaround)
# Validate isAsc parameter before use in queries
# Only allow "asc" or "desc" values
# If using nginx as reverse proxy, add WAF rules:
# location /api/ {
# if ($arg_isAsc ~* "[;'\"\-\-]|union|select|insert|update|delete") {
# return 403;
# }
# proxy_pass http://backend;
# }
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


