CVE-2025-6466

6.3 MEDIUM

📋 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

Products:
  • ageerle ruoyi-ai
Versions: 2.0.0 only
Operating Systems: All platforms running Java
Default Config Vulnerable: ⚠️ Yes
Notes: Affects the speech-to-text transcription upload functionality specifically. Any deployment using the vulnerable version is affected regardless of configuration.

📦 What is this software?

⚠️ 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.

🌐 Internet-Facing: HIGH - Remote exploitation possible without authentication, making internet-facing instances immediately vulnerable.
🏢 Internal Only: MEDIUM - Internal attackers or compromised internal systems could exploit this vulnerability.

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

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

all

Temporarily 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

all

Add 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

📤 Share & Export