CVE-2025-48187

9.1 CRITICAL

📋 TL;DR

CVE-2025-48187 allows attackers to brute-force 6-digit email verification codes in RAGFlow to register accounts, log in, or reset passwords without rate limiting. This enables complete account takeover of any user. All RAGFlow deployments through version 0.18.1 are affected.

💻 Affected Systems

Products:
  • RAGFlow
Versions: through 0.18.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: All deployments using email verification for registration, login, or password reset are vulnerable unless custom rate limiting is implemented.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete compromise of all user accounts, including administrative accounts, leading to data theft, unauthorized access to sensitive information, and potential lateral movement within the system.

🟠

Likely Case

Attackers take over user accounts to access confidential documents, impersonate legitimate users, or manipulate RAGFlow data and workflows.

🟢

If Mitigated

With rate limiting and proper code validation, the attack becomes impractical, reducing risk to minimal account enumeration attempts.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

The exploit requires no authentication and can be automated with simple scripts due to the predictable 6-digit code format and lack of rate limiting.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Not available

Vendor Advisory: Not available

Restart Required: No

Instructions:

Monitor the official GitHub repository for updates. Check commit history at https://github.com/infiniflow/ragflow/commits/main/ for potential fixes.

🔧 Temporary Workarounds

Implement Rate Limiting

all

Add rate limiting to email verification code endpoints to prevent brute-force attacks.

Depends on deployment environment. Use web server (nginx/apache) rate limiting or application-level middleware.

Increase Code Complexity

all

Change verification codes from 6-digit numeric to longer alphanumeric codes with higher entropy.

Modify RAGFlow source code to generate longer, more complex verification codes.

🧯 If You Can't Patch

  • Implement network-level rate limiting using WAF or reverse proxy to restrict requests to verification endpoints.
  • Disable email-based verification temporarily and use alternative authentication methods if available.

🔍 How to Verify

Check if Vulnerable:

Test if you can send multiple verification code requests without being blocked. Try brute-forcing a 6-digit code (000000-999999) programmatically.

Check Version:

Check RAGFlow version in web interface or configuration files. Default location varies by installation.

Verify Fix Applied:

After implementing fixes, verify that rate limiting blocks excessive requests and that verification codes are sufficiently complex.

📡 Detection & Monitoring

Log Indicators:

  • Multiple failed verification attempts from single IP
  • Unusual pattern of verification requests (e.g., sequential code attempts)

Network Indicators:

  • High volume of POST requests to /verify, /register, /reset-password endpoints
  • Traffic patterns showing systematic code guessing

SIEM Query:

source="ragflow" AND (uri_path="/verify" OR uri_path="/register" OR uri_path="/reset-password") | stats count by src_ip | where count > 100

🔗 References

📤 Share & Export