CVE-2025-6466
📋 TL;DR
This critical vulnerability in ageerle ruoyi-ai 2.0.0 allows remote attackers to upload arbitrary files without restrictions via the speechToTextTranscriptionsV2/upload function. This affects all systems running the vulnerable version of ruoyi-ai, potentially leading to remote code execution or system compromise.
💻 Affected Systems
- ageerle ruoyi-ai
📦 What is this software?
Ruoyi Ai by Ageerle
⚠️ Risk & Real-World Impact
Worst Case
Remote code execution leading to complete system takeover, data exfiltration, or deployment of ransomware/malware.
Likely Case
Unauthorized file upload leading to web shell deployment, data manipulation, or denial of service.
If Mitigated
File uploads restricted to authenticated users with proper file type validation and storage outside web root.
🎯 Exploit Status
Exploit details have been publicly disclosed on GitHub issues. The vulnerability is straightforward to exploit with basic web attack tools.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: 2.0.1
Vendor Advisory: https://github.com/ageerle/ruoyi-ai/releases/tag/v2.0.1
Restart Required: Yes
Instructions:
1. Backup current installation. 2. Download version 2.0.1 from GitHub releases. 3. Replace existing files with patched version. 4. Restart the application server. 5. Verify the patch commit 4e93ac86d4891c59ecfcd27c051de9b3c5379315 is applied.
🔧 Temporary Workarounds
Disable vulnerable endpoint
allTemporarily disable the speechToTextTranscriptionsV2/upload endpoint via web server configuration or application firewall.
# Apache: RewriteRule ^/speechToTextTranscriptionsV2/upload - [F]
# Nginx: location ~ /speechToTextTranscriptionsV2/upload { deny all; }
Implement WAF rules
allAdd web application firewall rules to block unrestricted file uploads to the vulnerable endpoint.
# ModSecurity rule: SecRule REQUEST_URI "@rx /speechToTextTranscriptionsV2/upload" "id:1001,phase:1,deny"
🧯 If You Can't Patch
- Implement strict file upload validation (whitelist allowed extensions, validate file signatures)
- Isolate the application in a restricted network segment with no internet access
🔍 How to Verify
Check if Vulnerable:
Check if ruoyi-ai version is 2.0.0 and examine the SseServiceImpl.java file for missing file upload validation in the upload method.
Check Version:
Check application.properties or pom.xml for version information, or examine git history: git log --oneline | grep -i version
Verify Fix Applied:
Verify the application version is 2.0.1 and check that commit 4e93ac86d4891c59ecfcd27c051de9b3c5379315 is present in the codebase.
📡 Detection & Monitoring
Log Indicators:
- Unusual file uploads to /speechToTextTranscriptionsV2/upload endpoint
- Uploads of executable files (.jsp, .war, .php, .exe)
- Large number of failed/successful upload attempts
Network Indicators:
- POST requests to /speechToTextTranscriptionsV2/upload with suspicious file types
- Unusual outbound connections from the application server
SIEM Query:
source="*ruoyi*" AND (uri_path="/speechToTextTranscriptionsV2/upload" OR file_extension IN ("jsp", "war", "php", "exe"))
🔗 References
- https://github.com/ageerle/ruoyi-ai/commit/4e93ac86d4891c59ecfcd27c051de9b3c5379315
- https://github.com/ageerle/ruoyi-ai/issues/9
- https://github.com/ageerle/ruoyi-ai/issues/9#event-16775988438
- https://github.com/ageerle/ruoyi-ai/releases/tag/v2.0.1
- https://vuldb.com/?ctiid.313574
- https://vuldb.com/?id.313574
- https://vuldb.com/?submit.598365
- https://github.com/ageerle/ruoyi-ai/issues/9#event-16775988438