{"id":"CVE-2026-121438","kind":"vulnerability","aliases":["CVE-2026-121438"],"related":[],"title":"Mistune: crafted Markdown with nested brackets exhausts CPU","description":"Mistune before 3.3.3 contains a denial of service vulnerability in InlineParser.parse_link that allows attackers to cause quadratic CPU growth by supplying balanced nested brackets. Attackers can submit crafted Markdown with thousands of nested bracket pairs not forming a valid link, triggering repeated _contains_nested_link scans that exhaust CPU in parsing applications.","summary":"Mistune, a Python Markdown parser, takes quadratic CPU time on Markdown containing thousands of balanced nested brackets that do not form a link. An attacker who can submit such text to an application that parses it can tie up CPU and cause denial of service.","severity":"medium","cvss":6.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["markdown","mistune","package","python"],"not_affected_if":["mistune-not-used","trusted-input-only"],"how_to_check":"- Check the installed Mistune version with `pip show mistune` or by reading the lockfile for `mistune`\n- Look for applications that parse user-submitted Markdown with Mistune","fix":"- Mistune `3.3.3`","status":"open","published_at":"2026-11-03T15:17:35+00:00","first_seen_at":"2026-11-03T15:22:00+00:00","triaged_at":"2026-11-03T15:23:11+00:00","updated_at":"2026-11-03T15:23:11+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-03T15:23:11Z","model":"claude-haiku-5-5","output":{"fix":"- Mistune `3.3.3`\n- unknown","reach":"internet","title":"Mistune: crafted Markdown with nested brackets exhausts CPU","impact":"low","summary":"Mistune, a Python Markdown parser, takes quadratic CPU time on Markdown containing thousands of balanced nested brackets that do not form a link. An attacker who can submit such text to an application that parses it can tie up CPU and cause denial of service.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","mistune","markdown"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Parsing service consumes CPU until it slows or stops responding.","analyst_note":"","how_to_check":"- Check the installed Mistune version with `pip show mistune` or by reading the lockfile for `mistune`\n- Look for applications that parse user-submitted Markdown with Mistune\n- unknown","plain_action":"","needs_analyst":false,"not_affected_if":["trusted-input-only","mistune-not-used"],"who_is_affected":"Applications that run Mistune on Markdown supplied by users or other untrusted sources are exposed, since the attack needs only crafted input. Internal tools that parse only trusted Markdown are at much lower risk. unknown for any further detail the sources do not give.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000671,"input_tokens":4215,"output_tokens":499,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-121438':11A,14A '-2026':10A,13A '3.3.3':66C 'allow':77C 'applic':51B,116C 'attack':43B,78C,89C 'balanc':33B,86C 'bracket':6A,35B,88C,98C 'caus':60B,80C 'contain':30B,67C,107C 'cpu':8A,26B,58B,82C,113C 'craft':2A,92C 'cve':9A,12A 'denial':61B,69C 'exhaust':7A,112C 'form':39B,101C 'growth':83C 'inlineparser.parse':74C 'link':41B,75C,104C,109C 'markdown':3A,15B,22B,29B,93C 'mistun':1A,16B,19B,64C 'nest':5A,34B,87C,97C,108C 'packag':17B 'pair':99C 'pars':53B,115C 'parser':23B 'python':18B,21B 'quadrat':25B,81C 'repeat':106C 'scan':110C 'servic':63B,71C 'submit':46B,91C 'suppli':85C 'take':24B 'text':48B 'thousand':31B,95C 'tie':56B 'time':27B 'trigger':105C 'valid':103C 'vulner':72C","nicknames":[],"mitigations":[],"who_affected":"Applications that run Mistune on Markdown supplied by users or other untrusted sources are exposed, since the attack needs only crafted input. Internal tools that parse only trusted Markdown are at much lower risk. unknown for any further detail the sources do not give.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["markdown","medium","mistune","package","python"],"first_public_at":"2026-10-19T11:05:09+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-121438","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121438","severity":null,"published_at":"2026-11-03T15:17:35+00:00","modified_at":"2026-11-03T15:17:35+00:00","first_seen_at":"2026-11-03T15:22:00+00:00","fetched_at":"2026-11-03T15:22:00+00:00","note":null}],"documents":[{"id":58402,"url":"https://github.com/lepture/mistune/commit/fe02f40faf091f86da9ed62c865f31e11da111d7","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":58403,"url":"https://github.com/lepture/mistune/security/advisories/GHSA-47p6-w2rc-5qf7","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-19T11:05:09+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":58404,"url":"https://www.vulncheck.com/advisories/mistune-before-3.3.3-denial-of-service-via-balanced-bracket-link-parsing","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}