Skip to main content

Dify CVE-2025-63387

HIGH
Improper Access Control (CWE-284)
2025-12-18 cve@mitre.org
7.5
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach Dify console over network
  2. Exploit
    Send unauthenticated GET to /console/api/system-features
  3. Execution
    Endpoint skips authorization check
  4. Impact
    Read 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.

Act Now Prioritize within 24-48h. Why: HIGH severity + EPSS > 10%.
No patch listed yet 29.9% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

pypi dify-client no fix

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

Vendor (mitre) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

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

Why It Matters

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.

Business Impact: Low
Compensating Controls

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

EPSS Score
29.9%
Top 2% exploitable
Prevalence
Medium
popular open-source LLM app platform, common but not ubiquitous
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 29.9%
Patch available No
Active threat Yes
Deciding rule
HIGH severity + EPSS > 10%
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Low

Priority Score

88
Low Medium High Critical
KEV: 0
EPSS: +30
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Affected Products (CPE)CVE.org

cpe:2.3:a:langgenius:dify:1.9.1:*:*:*:*:node.js:*:*

More in Dify

View all
CVE-2025-56157 CRITICAL POC
9.8 Dec 18

Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al

CVE-2026-41948 CRITICAL POC
9.3 May 18

Path traversal in Dify versions 0 through 1.14.1 allows authenticated tenants to escape their authorized tenant path and

CVE-2026-41947 CRITICAL POC
9.3 May 18

Cross-tenant authorization bypass in LangGenius Dify versions through 1.14.1 lets any logged-in editor reroute another t

CVE-2025-1796 HIGH POC
8.8 Mar 20

A vulnerability in langgenius/dify v0.10.1 allows an attacker to take over any account, including administrator accounts

CVE-2026-61461 HIGH POC
8.7 Jul 10

SQL injection in Dify's MyScale vector store backend (versions before 1.16.0-rc1) lets authenticated attackers execute a

CVE-2025-67732 HIGH POC
8.4 Jan 05

Plaintext exposure of third-party service API keys in Dify prior to version 1.11.0 allows any authenticated non-administ

CVE-2026-41949 HIGH POC
8.2 May 18

Cross-tenant document disclosure in Dify 1.14.1 and prior allows any authenticated user to read up to 3,000 characters o

CVE-2024-12039 HIGH POC
8.1 Mar 20

langgenius/dify version v0.10.1 contains a vulnerability where there are no limits applied to the number of code guess a

CVE-2024-12776 HIGH POC
8.1 Mar 20

In langgenius/dify v0.10.1, the `/forgot-password/resets` endpoint does not verify the password reset code, allowing an

CVE-2025-43862 HIGH POC
7.6 Apr 25

Dify is an open-source LLM app development platform. Rated high severity (CVSS 7.6), this vulnerability is remotely expl

CVE-2024-11824 HIGH POC
7.6 Mar 20

A stored cross-site scripting (XSS) vulnerability exists in langgenius/dify version latest, specifically in the chat log

CVE-2024-11822 HIGH POC
7.5 Mar 20

langgenius/dify version 0.9.1 contains a Server-Side Request Forgery (SSRF) vulnerability. Rated high severity (CVSS 7.5

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy