CVE-2025-63387
📋 TL;DR
CVE-2025-63387 is an insecure permissions vulnerability in Dify v1.9.1 that allows unauthenticated attackers to access the /console/api/system-features endpoint without credentials. This exposes system configuration data, though the maintainer disputes its sensitivity. All Dify v1.9.1 deployments with default configurations are affected.
💻 Affected Systems
- Dify
📦 What is this software?
Dify by Langgenius
⚠️ Risk & Real-World Impact
Worst Case
Attackers could map system architecture, identify other vulnerabilities, or use exposed data for targeted attacks against the Dify deployment.
Likely Case
Information disclosure of system configuration details that could aid reconnaissance for further attacks.
If Mitigated
Limited impact if data is truly non-sensitive as maintainer claims, but still violates principle of least privilege.
🎯 Exploit Status
Simple HTTP GET request to endpoint with no authentication required.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: Fixed in pull request #31392
Vendor Advisory: https://github.com/langgenius/dify/issues/31368#issuecomment-3783712203
Restart Required: Yes
Instructions:
1. Update Dify to version containing fix from PR #31392
2. Restart Dify services
3. Verify endpoint now requires authentication
🔧 Temporary Workarounds
Web Application Firewall Rule
allBlock unauthenticated access to /console/api/system-features endpoint
WAF-specific configuration to block GET /console/api/system-features from unauthenticated sources
Reverse Proxy Authentication
linuxAdd authentication layer before the endpoint using nginx or similar
nginx location block configuration with auth_basic directives
🧯 If You Can't Patch
- Implement network segmentation to restrict access to Dify console endpoints
- Deploy web application firewall with rules blocking unauthenticated access to sensitive endpoints
🔍 How to Verify
Check if Vulnerable:
Send HTTP GET request to http://[dify-host]/console/api/system-features without authentication. If it returns 200 OK with data, system is vulnerable.
Check Version:
Check Dify version in web interface or via package manager
Verify Fix Applied:
Send same request after patch. Should return 401 Unauthorized or redirect to login.
📡 Detection & Monitoring
Log Indicators:
- Multiple GET requests to /console/api/system-features from unauthenticated IPs
- 401 errors after patch applied
Network Indicators:
- Unusual traffic patterns to system-features endpoint
- GET requests without authentication headers
SIEM Query:
sourceIP=* AND destinationPort=443 AND urlPath="/console/api/system-features" AND NOT userAgent="browser-agent"
🔗 References
- https://gist.github.com/Cristliu/cddc0cbbf354de51106ab63a11be94af
- https://gist.github.com/Cristliu/dfc5f3a31dc6d7fff2754867e5c649a5
- https://github.com/langgenius/dify/discussions
- https://github.com/langgenius/dify/issues/31368#issuecomment-3783712203
- https://github.com/langgenius/dify/pull/31392
- https://github.com/langgenius/dify/pull/31417