{"id":"CVE-2026-126193","kind":"vulnerability","aliases":["CVE-2026-126193"],"related":[],"title":"Soup Sieve: deeply nested selectors crash parsing with a recursion error","description":"Soup Sieve is a CSS selector library for Beautiful Soup. From 0.4 until 3.0, deeply nested CSS pseudo-class selectors can cause recursive parsing to exceed Python’s recursion limit and raise  RecursionError . Applications accepting untrusted selectors may experience failure of the affected request or task if the exception is not handled. The demonstrated behavior is recoverable and does not establish an interpreter crash or persistent service-wide denial of service. This vulnerability is fixed in version 3.0.","summary":"Soup Sieve, the CSS selector library used by Beautiful Soup, recurses without limit on deeply nested pseudo-class selectors and raises a RecursionError. An attacker who can supply selectors can make the affected request or task fail, a denial of service for that request only.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["beautifulsoup","package","python","soupsieve"],"not_affected_if":["fixed-selectors","trusted-input-only"],"how_to_check":"- Run `pip show soupsieve` and check whether the installed version is below `3.0`.\n- Search dependency lockfiles for `soupsieve` to find every place it is pinned.","fix":"- Soup Sieve: upgrade to `3.0`.","status":"open","published_at":"2026-11-12T17:17:32+00:00","first_seen_at":"2026-11-12T17:39:38+00:00","triaged_at":"2026-11-12T17:40:06+00:00","updated_at":"2026-11-12T17:40:06+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-12T17:40:06Z","model":"claude-haiku-5-5","output":{"fix":"- Soup Sieve: upgrade to `3.0`.","reach":"unknown","title":"Soup Sieve: deeply nested selectors crash parsing with a recursion error","impact":"low","summary":"Soup Sieve, the CSS selector library used by Beautiful Soup, recurses without limit on deeply nested pseudo-class selectors and raises a RecursionError. An attacker who can supply selectors can make the affected request or task fail, a denial of service for that request only.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","beautifulsoup","soupsieve"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Individual requests or tasks fail with an unhandled RecursionError.","analyst_note":"","how_to_check":"- Run `pip show soupsieve` and check whether the installed version is below `3.0`.\n- Search dependency lockfiles for `soupsieve` to find every place it is pinned.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["fixed-selectors","trusted-input-only"],"who_is_affected":"Applications that pass untrusted or user-supplied CSS selectors to Soup Sieve through Beautiful Soup are exposed. Code that only parses trusted HTML with fixed selectors can skip it. The failure is recoverable and the sources do not show a crash of the whole interpreter or a lasting outage.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.00074,"input_tokens":4658,"output_tokens":549,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-126193':14A,17A '-2026':13A,16A '0.4':78C '3.0':80C,146C 'accept':102C 'affect':55B,110C 'applic':101C 'attack':47B 'beauti':30B,75C 'beautifulsoup':18B 'behavior':122C 'caus':89C 'class':40B,86C 'crash':6A,131C 'css':25B,71C,83C 'cve':12A,15A 'deepli':3A,36B,81C 'demonstr':121C 'denial':61B,137C 'error':11A 'establish':128C 'exceed':93C 'except':116C 'experi':106C 'fail':59B 'failur':107C 'fix':143C 'handl':119C 'interpret':130C 'librari':27B,73C 'limit':34B,97C 'make':53B 'may':105C 'nest':4A,37B,82C 'packag':19B 'pars':7A,91C 'persist':133C 'pseudo':39B,85C 'pseudo-class':38B,84C 'python':20B,94C 'rais':43B,99C 'recover':124C 'recurs':10A,32B,90C,96C 'recursionerror':45B,100C 'request':56B,66B,111C 'selector':5A,26B,41B,51B,72C,87C,104C 'servic':63B,135C,139C 'service-wid':134C 'siev':2A,23B,68C 'soup':1A,22B,31B,67C,76C 'soupsiev':21B 'suppli':50B 'task':58B,113C 'untrust':103C 'use':28B 'version':145C 'vulner':141C 'wide':136C 'without':33B","nicknames":[],"mitigations":[],"who_affected":"Applications that pass untrusted or user-supplied CSS selectors to Soup Sieve through Beautiful Soup are exposed. Code that only parses trusted HTML with fixed selectors can skip it. The failure is recoverable and the sources do not show a crash of the whole interpreter or a lasting outage.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["beautifulsoup","medium","package","python","soupsieve"],"campaign_type":null,"search_a":"'-126193':14A,17A '-2026':13A,16A 'crash':6A 'cve':12A,15A 'deepli':3A 'error':11A 'nest':4A 'pars':7A 'recurs':10A 'selector':5A 'siev':2A 'soup':1A","search_b":"'affect':55B 'attack':47B 'beauti':30B 'beautifulsoup':18B 'class':40B 'css':25B 'deepli':36B 'denial':61B 'fail':59B 'librari':27B 'limit':34B 'make':53B 'nest':37B 'packag':19B 'pseudo':39B 'pseudo-class':38B 'python':20B 'rais':43B 'recurs':32B 'recursionerror':45B 'request':56B,66B 'selector':26B,41B,51B 'servic':63B 'siev':23B 'soup':22B,31B 'soupsiev':21B 'suppli':50B 'task':58B 'use':28B 'without':33B","search_c":"'0.4':78C '3.0':80C,146C 'accept':102C 'affect':110C 'applic':101C 'beauti':75C 'behavior':122C 'caus':89C 'class':86C 'crash':131C 'css':71C,83C 'deepli':81C 'demonstr':121C 'denial':137C 'establish':128C 'exceed':93C 'except':116C 'experi':106C 'failur':107C 'fix':143C 'handl':119C 'interpret':130C 'librari':73C 'limit':97C 'may':105C 'nest':82C 'pars':91C 'persist':133C 'pseudo':85C 'pseudo-class':84C 'python':94C 'rais':99C 'recover':124C 'recurs':90C,96C 'recursionerror':100C 'request':111C 'selector':72C,87C,104C 'servic':135C,139C 'service-wid':134C 'siev':68C 'soup':67C,76C 'task':113C 'untrust':103C 'version':145C 'vulner':141C 'wide':136C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-04T13:55:21+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126193","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126193","severity":null,"published_at":"2026-11-12T17:17:32+00:00","modified_at":"2026-11-12T17:17:32+00:00","first_seen_at":"2026-11-12T17:39:38+00:00","fetched_at":"2026-11-12T17:39:38+00:00","note":null}],"documents":[{"id":136848,"url":"https://github.com/facelessuser/soupsieve/commit/52de12f157a373614ad0f486d434551c5a4378ee","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":136843,"url":"https://github.com/facelessuser/soupsieve/releases/tag/3.0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":136850,"url":"https://github.com/facelessuser/soupsieve/security/advisories/GHSA-7g44-g9rc-x53w","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-04T13:55:21+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}