{"id":"CVE-2026-121437","kind":"vulnerability","aliases":["CVE-2026-121437"],"related":[],"title":"Mistune: quadratic emphasis parsing lets small markdown stall workers","description":"Mistune from 3.3.0 before 3.3.4 contains a denial of service vulnerability that allows remote attackers to exhaust CPU through quadratic-time emphasis delimiter processing. Attackers can submit small markdown documents with repeated patterns like \"*a_b\" to trigger an O(n²) index-fixup loop, stalling workers for seconds.","summary":"Mistune, a Python markdown parser, takes quadratic time on repeated emphasis delimiters such as \"*a_b\". A remote attacker can send small markdown documents that tie up CPU and stall worker processes for seconds.","severity":"high","cvss":8.7,"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 version with `pip show mistune` or `python -c \"import mistune; print(mistune.__version__)\"`.\n- Look for any service that parses user-submitted markdown with mistune.","fix":"- Mistune: `3.3.4` (fixed version per the sources; any 3.3.x before 3.3.4 is affected).","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:22:32+00:00","updated_at":"2026-11-03T15:22:32+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-03T15:22:32Z","model":"claude-haiku-5-5","output":{"fix":"- Mistune: `3.3.4` (fixed version per the sources; any 3.3.x before 3.3.4 is affected).","reach":"internet","title":"Mistune: quadratic emphasis parsing lets small markdown stall workers","impact":"low","summary":"Mistune, a Python markdown parser, takes quadratic time on repeated emphasis delimiters such as \"*a_b\". A remote attacker can send small markdown documents that tie up CPU and stall worker processes for seconds.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","mistune","markdown"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Repeated requests exhaust CPU and stall parsing workers","analyst_note":"","how_to_check":"- Check the installed version with `pip show mistune` or `python -c \"import mistune; print(mistune.__version__)\"`.\n- Look for any service that parses user-submitted markdown with mistune.","plain_action":"","needs_analyst":false,"not_affected_if":["trusted-input-only","mistune-not-used"],"who_is_affected":"Applications that pass untrusted markdown to mistune 3.3.0 through 3.3.4 are exposed, because a single small document can consume a worker for seconds. Internal tools that only parse trusted content, or code that does not use mistune, can skip it.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000678,"input_tokens":4206,"output_tokens":515,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-121437':12A,15A '-2026':11A,14A '3.3.0':56C '3.3.4':58C 'allow':66C 'attack':38B,68C,79C 'b':35B,90C 'contain':59C 'cpu':47B,71C 'cve':10A,13A 'delimit':31B,77C 'denial':61C 'document':43B,84C 'emphasi':3A,30B,76C 'exhaust':70C 'fixup':98C 'index':97C 'index-fixup':96C 'let':5A 'like':88C 'loop':99C 'markdown':7A,16B,23B,42B,83C 'mistun':1A,17B,20B,54C 'n':95C 'o':94C 'packag':18B 'pars':4A 'parser':24B 'pattern':87C 'process':51B,78C 'python':19B,22B 'quadrat':2A,26B,74C 'quadratic-tim':73C 'remot':37B,67C 'repeat':29B,86C 'second':53B,103C 'send':40B 'servic':63C 'small':6A,41B,82C 'stall':8A,49B,100C 'submit':81C 'take':25B 'tie':45B 'time':27B,75C 'trigger':92C 'vulner':64C 'worker':9A,50B,101C","nicknames":[],"mitigations":[],"who_affected":"Applications that pass untrusted markdown to mistune 3.3.0 through 3.3.4 are exposed, because a single small document can consume a worker for seconds. Internal tools that only parse trusted content, or code that does not use mistune, can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["high","markdown","mistune","package","python"],"first_public_at":"2026-10-19T11:05:04+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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-121437","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121437","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":58399,"url":"https://github.com/lepture/mistune/commit/b4dd3284e52ec741ed9a227db29ade9017828e90","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":58400,"url":"https://github.com/lepture/mistune/security/advisories/GHSA-qp42-r9j6-83g9","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-19T11:05:04+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":58401,"url":"https://www.vulncheck.com/advisories/mistune-3.3.0-before-3.3.4-quadratic-time-dos-via-process-emphasis-delimiters","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"}