Dify
CVE-2025-63387
HIGH
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Dify console over network
-
ExploitSend unauthenticated GET to /console/api/system-features
-
ExecutionEndpoint skips authorization check
-
ImpactRead system-features/license config metadata
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | No special conditions for reaching the endpoint - an unauthenticated remote GET to /console/api/system-features against a default Dify 1.9.1 console returns data. However, the security-relevant content is strongly LIMITED: per the source fix (PR #31392), the only fields that were improperly exposed to anonymous users are enterprise license status/expiry and workspace limit/usage figures, and these are only populated when ENTERPRISE_ENABLED is true - in a standard non-enterprise deployment the endpoint returns ordinary UI configuration flags (branding, SSO, marketplace) that are intended to be public. The maintainer asserts no PII, credentials, or secrets are returned, so realistic impact is reconnaissance-level metadata disclosure, not exposure of true secrets. |
| Impact | Signals conflict sharply here, and the conflict is the story. The NVD CVSS vector (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N = 7.5 HIGH) rates this as a remote, unauthenticated, low-complexity confidentiality breach with HIGH impact. However, the C:H rating is the weakest link: the Dify maintainer explicitly disputes it, stating the /console/api/system-features endpoint is unauthenticated BY DESIGN as a dashboard bootstrap mechanism and that the returned data is non-sensitive UI/client-rendering configuration containing no PII, credentials, or secrets. The source-code evidence (PR #31392) partially corroborates BOTH sides: the fix did not remove anonymous access to the endpoint, but it DID gate a subset of fields - enterprise license status, expiry date, and workspace limits/usage - behind an authentication check, implicitly conceding that this specific metadata should not have been anonymously readable. This narrows the true confidentiality impact to low-sensitivity enterprise license/config metadata, not 'sensitive system configuration.' No CISA KEV entry and no EPSS score are provided, so there is no evidence of active or probable widespread exploitation. Public gist references (Cristliu) suggest proof-of-concept material exists. Net assessment: this is a real but LOW-severity information-exposure/access-control issue that is over-scored at 7.5; the realistic confidentiality impact is C:L, making this a 'high-CVSS-but-modest-real-risk' finding. The HIGH score should be treated as contested pending confirmation of exactly what the endpoint returns in enterprise deployments. |
| Exploit ScenarioDerived | An attacker who can reach the Dify console over the network sends a plain HTTP GET to /console/api/system-features with no credentials or session token and receives the system-features JSON, including (in pre-fix enterprise deployments) license status, expiry, and workspace quota metadata. Publicly referenced gists indicate proof-of-concept request examples exist. Given AV:N/AC:L/PR:N/UI:N, the request is trivial and requires no interaction, but the practical payoff is limited to low-sensitivity configuration reconnaissance. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Dify 1.9.1 permits unauthenticated remote GET requests to the /console/api/system-features console endpoint, letting anonymous clients retrieve system feature configuration that should normally require a logged-in console session (CWE-284, improper access control). The realistic impact is limited and reconnaissance-level rather than secret disclosure: per the upstream fix in PR #31392, the fields improperly exposed were enterprise license status/expiry and workspace limit/usage counters, and these are populated only when ENTERPRISE_ENABLED is true - in a standard non-enterprise deployment the endpoint returns branding, SSO and marketplace flags that are intended to be public. No public exploit identified at time of analysis, and the maintainer disputes the report, stating the endpoint is unauthenticated by design as a dashboard bootstrap mechanism and that no PII, credentials, or secrets are returned. Given the disagreement between the original CVSS 7.5 (C:H) and the narrowed reality of the data actually exposed, this should be triaged as an information-disclosure/hardening issue rather than a high-severity confidentiality breach.
RemediationAI
Upstream fix available (PR/commit); a released patched version is not independently confirmed in the available data, so operators should upgrade to a Dify build that includes PR #31392 and the follow-up PR #31417 and verify the fix behavior against issue #31368 before closing. Until then, the highest-value compensating control is to place an authenticating reverse proxy in front of the console API and deny anonymous access to /console/api/system-features - the trade-off is that the Dify frontend uses this endpoint as a bootstrap call during dashboard/login initialization, so a blanket block can break login-page rendering and branding display. A softer variant is to allow the request but strip or filter the license and workspaces keys from the response body at the proxy, which preserves UI bootstrap while removing the only fields the upstream patch actually classified as requiring authentication. Where the console does not need to be internet-facing, restrict /console/* to trusted networks or a VPN/SSO gateway; the trade-off is loss of remote administrative access. Setting ENTERPRISE_ENABLED=false removes the license/workspace metadata from the response entirely and is a low-cost mitigation for deployments not using Dify's enterprise licensing, at the cost of disabling those enterprise features. Note that no exploit code or active exploitation is evidenced, so these measures can be scheduled rather than emergency-applied.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The endpoint lives in the Dify console API layer (api/controllers/console/feature.py), a Flask application backed by a Node.js-based frontend, as reflected in the CPE cpe:2.3:a:langgenius:dify:1.9.1:*:*:*:*:node.js:*:*. The root cause is CWE-284 (Improper Access Control): FeatureService.get_system_features() serialized the full SystemFeatureModel - including enterprise license status, expiry, and workspace enabled/limit/used values sourced from the enterprise license payload - without checking whether the caller was authenticated. Notably, the login loader (load_user_from_request in api/extensions/ext_login.py) raises werkzeug Unauthorized when no token is supplied, so the handler simply returned the full payload for anonymous requests. The upstream fix in PR #31392 introduces an is_authenticated flag derived from current_user.is_authenticated (wrapped in a try/except for Unauthorized), passes it into get_system_features(), and gates license detail fulfillment with 'if is_authenticated and (license_info := enterprise_info.get("License"))'. Anonymous callers now receive a minimized payload where license.status is NONE, license.expired_at is empty, and workspace limit/size default to 0, while public UI flags (branding, SSO, marketplace) remain available - confirming that the endpoint was deliberately kept reachable for client-side bootstrap and that the true defect was scoped to the license/workspace metadata branch.
Know when Dify gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Remote unauthenticated GET (AV:N/AC:L/PR:N/UI:N) but exposed data is low-sensitivity license/config metadata, so C:L not C:H; no integrity or availability impact.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
DescriptionCVE.org
Dify v1.9.1 is vulnerable to Insecure Permissions. An unauthenticated attacker can directly send HTTP GET requests to the /console/api/system-features endpoint without any authentication credentials or session tokens. The endpoint fails to implement proper authorization checks, allowing anonymous access to sensitive system configuration data. NOTE: The maintainer states that the endpoint is unauthenticated by design and serves as a bootstrap mechanism required for the dashboard initialization. They also state that the description inaccurately classifies the returned data as sensitive system configuration, stating that the data is non-sensitive and required for client-side rendering. No PII, credentials, or secrets are exposed.
Executive ViewAI
Dify 1.9.1, an open-source LLM application development platform, carries an improper access-control weakness (CVE-2025-63387, CVSS 7.5) in its console API system-features endpoint that can return system feature configuration beyond the boundary the vendor's own fix (PR #31392) considered acceptable. Where ENTERPRISE_ENABLED is true, the fields involved are enterprise license status and expiry and workspace limit and usage counters; in standard non-enterprise deployments the endpoint returns only branding, SSO and marketplace flags intended to be public, and the maintainer disputes the report, stating no PII, credentials or secrets are returned. Leadership should treat this as low-impact exposure and a configuration-governance matter rather than a data-breach risk, while still confirming which environments have enterprise features enabled and ensuring the endpoint is monitored and access-controlled.
No vendor-released patch identified at time of analysis; interim mitigations include restricting network access to /console/api/system-features via WAF, API gateway, or reverse-proxy allow-listing, enforcing authentication at the proxy layer, limiting console API exposure to trusted networks or VPN, monitoring and alerting on anomalous requests to that path, and keeping ENTERPRISE_ENABLED set to false where enterprise features are not required to minimize the fields exposed.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Affected Products (CPE)CVE.org
Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al
Path traversal in Dify versions 0 through 1.14.1 allows authenticated tenants to escape their authorized tenant path and
Cross-tenant authorization bypass in LangGenius Dify versions through 1.14.1 lets any logged-in editor reroute another t
A vulnerability in langgenius/dify v0.10.1 allows an attacker to take over any account, including administrator accounts
SQL injection in Dify's MyScale vector store backend (versions before 1.16.0-rc1) lets authenticated attackers execute a
Plaintext exposure of third-party service API keys in Dify prior to version 1.11.0 allows any authenticated non-administ
Cross-tenant document disclosure in Dify 1.14.1 and prior allows any authenticated user to read up to 3,000 characters o
langgenius/dify version v0.10.1 contains a vulnerability where there are no limits applied to the number of code guess a
In langgenius/dify v0.10.1, the `/forgot-password/resets` endpoint does not verify the password reset code, allowing an
Dify is an open-source LLM app development platform. Rated high severity (CVSS 7.6), this vulnerability is remotely expl
A stored cross-site scripting (XSS) vulnerability exists in langgenius/dify version latest, specifically in the chat log
langgenius/dify version 0.9.1 contains a Server-Side Request Forgery (SSRF) vulnerability. Rated high severity (CVSS 7.5
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB