Description
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.
Published: 2026-07-08
Score: 5.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A recursion error can be triggered when two Markdown files use the :include: directive to reference each other, causing unbounded recursion in the Mistune renderer and a RecursionError that crashes the rendering process. The weakness arises from insufficient cycle detection (CWE‑674) and resulting stack exhaustion (CWE‑755). The flaw also reveals a potential infinite loop condition (CWE‑835).

Affected Systems

The issue affects the Mistune Markdown parser released by the developer Lepture. Versions of Mistune prior to 3.3.0 are vulnerable and should be considered impacted.

Risk and Exploitability

The CVSS score of 5.3 indicates a moderate severity denial‑of‑service risk. The EPSS score of < 1% indicates a very low but non‑zero likelihood of exploitation, and the vulnerability is not listed in the CISA KEV catalog. An attacker can exploit the flaw by providing two attacker‑controlled Markdown files that include each other, which forces the application to recuse until the interpreter stack limit is hit, thereby crashing the request handler. No remote code execution or elevated privilege is possible through this vector.

Generated by OpenCVE AI on July 9, 2026 at 23:59 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Mistune to version 3.3.0 or later to include the recursion‑cycle fix
  • If an upgrade cannot be performed immediately, disable the :include: directive or restrict it to a safe, validated set of files to eliminate recursion between user‑supplied Markdown documents
  • Implement input validation to reject or sanitize Markdown files that contain multiple :include: directives before allowing them to be processed

Generated by OpenCVE AI on July 9, 2026 at 23:59 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 09 Jul 2026 12:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-835
References
Metrics threat_severity

None

threat_severity

Important


Wed, 08 Jul 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 08 Jul 2026 18:45:00 +0000

Type Values Removed Values Added
First Time appeared Lepture
Lepture mistune
Vendors & Products Lepture
Lepture mistune

Wed, 08 Jul 2026 17:00:00 +0000

Type Values Removed Values Added
Description 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.
Title Mistune directives/include: mutual `.. include::` recursion crashes the renderer with `RecursionError`, denial of service via two attacker-controlled markdown files
Weaknesses CWE-674
CWE-755
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-08T19:45:20.799Z

Reserved: 2026-07-07T18:20:06.126Z

Link: CVE-2026-59927

cve-icon Vulnrichment

Updated: 2026-07-08T19:45:11.248Z

cve-icon NVD

No data.

cve-icon Redhat

Severity : Important

Publid Date: 2026-07-08T16:24:37Z

Links: CVE-2026-59927 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-07-10T00:00:19Z

Weaknesses
  • CWE-674

    Uncontrolled Recursion

  • CWE-755

    Improper Handling of Exceptional Conditions

  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')