Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAttacker gains write access to markdown content store
-
DeliveryCreates file A including file B and file B including file A
-
ExploitTriggers rendering of either file via application request
-
InstallMistune Include directive recurses without cycle guard
-
C2Python call stack exhausted
-
ExecuteRecursionError raised
-
ImpactRendering request crashes
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
|
| Exploitation Conditions | The Include directive (src/mistune/directives/include.py) must be explicitly enabled and active in the target application - it is an optional Mistune feature, not enabled in all deployments. The attacker must be able to create or influence two distinct markdown files on the server's filesystem such that each references the other via Include syntax; this typically requires write access to the application's content store (e.g., wiki page creation, file upload capability), making PR:N in the vendor CVSS potentially optimistic for hardened deployments. Applications where the Include directive is disabled, where markdown content is entirely author-controlled (no user submissions), or where file-creation is restricted to privileged users are not practically exploitable. The scope is limited to availability (A:L) - no confidentiality or integrity impact applies. Python's built-in recursion limit bounds the damage to a single request crash rather than process or host compromise. |
| Impact | The vendor-assigned CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) characterizes this as a low-complexity, unauthenticated network attack with limited availability impact. The PR:N and AV:N assignments may overstate ease of exploitation: the Include directive operates on server-side filesystem files, meaning an attacker typically must be able to write or influence two separate markdown files in the target application before a cycle can be triggered - suggesting PR:L and AC:H are more realistic in most deployments. No EPSS score was provided in the input; given the absence from CISA KEV and no reported POC code, real-world exploitation probability appears low. The practical blast radius is a single crashed rendering request rather than full service compromise, consistent with the A:L rating. Applications that expose the Include directive to unauthenticated user-supplied content (e.g., public wikis or documentation platforms) carry higher risk than those where markdown is author-controlled. Overall this is a genuine but low-urgency issue warranting a planned patch cycle rather than emergency response. |
| Exploit ScenarioDerived | An attacker with the ability to create or upload markdown content to a Mistune-powered application constructs two files where file A contains an include reference to file B and file B contains an include reference back to file A. When any user or automated process triggers a render of either file, Mistune's Include directive recursively processes the chain without bound, exhausting the Python interpreter's call stack and raising a RecursionError that crashes the rendering request. No public exploit code has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 08, 2026
Unbounded recursion in Mistune's Include directive (all versions prior to 3.3.0) can be triggered by a pair of mutually-referencing markdown files, bypassing the cycle detector that only checks for direct self-inclusion. An attacker who can supply markdown content processed by an application using the Include directive may crash the rendering request with a Python RecursionError, resulting in a denial of service. No public exploit has been identified at time of analysis and the vulnerability is not listed in CISA KEV; a confirmed fix is available in version 3.3.0.
RemediationAI
Upgrade Mistune to version 3.3.0, which introduces indirect cycle detection for the Include directive. The fix is confirmed in the official release at https://github.com/lepture/mistune/releases/tag/v3.3.0 and the underlying code change is visible at https://github.com/lepture/mistune/commit/1bef343ade163fc3bb95572b15be720084cdb993. If an immediate upgrade is not possible, disable the Include directive feature in the application's Mistune configuration to eliminate the vulnerable code path entirely - this is the most effective workaround with no security trade-off, though it removes include functionality. Alternatively, restrict the markdown rendering endpoint to authenticated or trusted users to reduce the attacker-controlled input surface; this reduces risk but does not eliminate the flaw for insider or compromised-account scenarios. Content validation to block or sanitize include directives before they reach Mistune is also a viable compensating control but requires careful implementation to avoid bypass.
Affected VersionsENISA
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
Mistune (CPE: cpe:2.3:a:lepture:mistune:*:*:*:*:*:*:*:*) is a Python Markdown parser that supports an optional Include directive implemented in src/mistune/directives/include.py, which reads and inlines external markdown files at render time. The root cause is CWE-674 (Uncontrolled Recursion): the guard logic only detects a file directly naming itself as an include target and does not maintain a call-stack or visited-file set across the full inclusion chain. When file A includes file B and file B includes file A, the directive handler recurses without bound until Python's default recursion limit is hit, raising an uncaught RecursionError that aborts the rendering request. The flaw is entirely within the parser library and is independent of the underlying markdown content format.
Know when Mistune 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:N/I:N/A:L
Triggering the cycle requires writing two mutually-referencing files to the server, implying PR:L and AC:H rather than vendor's PR:N/AC:L.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Mistune is a Python Markdown parser with renderers and plugins. Prior to 3.3.0, the Include directive in src/mistune/directives/include.py detects only direct self-includes and not indirect cycles, allowing two markdown files that include each other to trigger unbounded recursion, raise RecursionError, and crash the rendering request. This issue is fixed in version 3.3.0.
Blast Radius
ecosystem impact- 1 pypi packages depend on mistune (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.3.0.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Uncontrolled CPU consumption in Mistune, a Python Markdown parser, allows remote unauthenticated attackers to cause deni
Denial of service in Mistune (the lepture Python Markdown parser) before 3.3.0 lets remote unauthenticated attackers exh
Denial of service in Mistune, a Python Markdown parser, affects all versions prior to 3.3.0 when the strikethrough, mark
Denial of service in Mistune, a widely used pure-Python Markdown parser, affects all versions prior to 3.3.0 where the d
Cross-site scripting in Mistune Python Markdown parser (all versions before 3.3.0) allows attacker-controlled Markdown c
Cross-site scripting in Mistune prior to 3.3.0 stems from an incomplete URI scheme blocklist in the `safe_url` filter, p
mistune.py in Mistune 0.7.4 allows XSS via an unexpected newline (such as in java\nscript:) or a crafted email address,
Path traversal in Mistune's Include plugin allows reading arbitrary files from the server filesystem when processing att
Quadratic denial of service in Mistune's Markdown parser (parse_link_text) affects versions 3.2.0, 3.2.1 and main prior
Denial of service in Mistune 3.3.0 through 3.3.3 allows unauthenticated remote attackers to exhaust CPU and stall reques
Predictable heading anchor ID generation in Mistune's toc plugin (all versions prior to 3.3.0) enables same-page navigat
In mistune through 2.0.2, support of inline markup is implemented by using regular expressions that can involve a high a
Same weakness CWE-674 – Uncontrolled Recursion
View allSame technique Denial Of Service
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.0 SUSE Linux Enterprise Server for SAP applications 16.0 | Fixed |
| openSUSE Leap 16.0 | Fixed |
| SUSE Linux Enterprise Desktop 15 SP7 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Not-Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP4 | Not-Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP5 | Not-Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP6 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP4 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Not-Affected |
| SUSE Linux Enterprise Server 15 SP5 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Not-Affected |
| SUSE Linux Enterprise Server 15 SP6 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Not-Affected |
| SUSE Manager Proxy 4.3 | Not-Affected |
| SUSE Manager Retail Branch Server 4.3 | Not-Affected |
| SUSE Manager Server 4.3 | Not-Affected |
| SUSE Linux Enterprise Desktop 15 SP4 | Not-Affected |
| SUSE Linux Enterprise Desktop 15 SP5 | Not-Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP6 | Not-Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP4 | Not-Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Not-Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Not-Affected |
| openSUSE Leap 15.3 | Not-Affected |
| openSUSE Leap 15.4 | Not-Affected |
| openSUSE Leap 15.5 | Not-Affected |
| openSUSE Leap 15.6 | Not-Affected |
EUVD-2026-42339
GHSA-8mpj-m6qm-5qr8
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB