{"id":"CVE-2026-126190","kind":"vulnerability","aliases":["CVE-2026-126190"],"related":[],"title":"Soup Sieve: deeply nested HTML makes CSS selector matching hang workers","description":"Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 4.0, Soup Sieve repeatedly walks the same ancestors while matching descendant combinators, and each additional descendant combinator raises the polynomial degree of the work on deeply nested attacker-influenced HTML or XML. Applications using selectors such as section div div through select(), select_one(), or Beautiful Soup CSS APIs against untrusted documents can have a worker occupied for seconds or minutes, while trusted-only document processing is not affected. Selectors compiled with NOCACHE continue to use the old uncached behavior. This issue is fixed in version 4.0.","summary":"Soup Sieve is the CSS selector library used with Beautiful Soup 4. Descendant selectors such as `section div div` re-walk ancestors on deeply nested untrusted HTML or XML, so an attacker can tie up a worker for seconds or minutes.","severity":"high","cvss":7.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["beautifulsoup","package","python","web-scraping"],"not_affected_if":["no-descendant-selectors","trusted-documents-only"],"how_to_check":"- Check the installed version with `pip show soupsieve`\n- Search the code for `select(`, `select_one(` or other Beautiful Soup CSS selector calls run on untrusted documents","fix":"- Soup Sieve: move to `4.0` or later","status":"open","published_at":"2026-11-12T17:17:32+00:00","first_seen_at":"2026-11-12T17:39:37+00:00","triaged_at":"2026-11-12T17:39:53+00:00","updated_at":"2026-11-12T17:39:53+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-12T17:39:53Z","model":"claude-haiku-5-5","output":{"fix":"- Soup Sieve: move to `4.0` or later","reach":"internet","title":"Soup Sieve: deeply nested HTML makes CSS selector matching hang workers","impact":"low","summary":"Soup Sieve is the CSS selector library used with Beautiful Soup 4. Descendant selectors such as `section div div` re-walk ancestors on deeply nested untrusted HTML or XML, so an attacker can tie up a worker for seconds or minutes.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","beautifulsoup","web-scraping"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"Worker process is occupied for seconds or minutes per request","analyst_note":"","how_to_check":"- Check the installed version with `pip show soupsieve`\n- Search the code for `select(`, `select_one(` or other Beautiful Soup CSS selector calls run on untrusted documents","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["trusted-documents-only","no-descendant-selectors"],"who_is_affected":"Applications that run Beautiful Soup CSS selectors with descendant combinators against untrusted HTML or XML are exposed. Processing only trusted documents is not affected, and selectors compiled with NOCACHE keep the old uncached behavior.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000725,"input_tokens":4716,"output_tokens":507,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-126190':14A,17A '-2026':13A,16A '4':35B,80C '4.0':83C,171C 'addit':97C 'affect':153C 'ancestor':46B,90C 'api':132C 'applic':116C 'attack':56B,111C 'attacker-influenc':110C 'beauti':33B,78C,129C 'beautifulsoup':18B 'behavior':164C 'combin':94C,99C 'compil':155C 'continu':158C 'css':7A,28B,70C,131C 'cve':12A,15A 'deepli':3A,48B,108C 'degre':103C 'descend':36B,93C,98C 'design':73C 'div':41B,42B,122C,123C 'document':135C,149C 'fix':168C 'hang':10A 'html':5A,51B,113C 'influenc':112C 'issu':166C 'librari':30B,72C 'make':6A 'match':9A,92C 'minut':65B,144C 'nest':4A,49B,109C 'nocach':157C 'occupi':140C 'old':162C 'one':127C 'packag':19B 'polynomi':102C 'prior':81C 'process':150C 'python':20B 'rais':100C 're':44B 're-walk':43B 'repeat':86C 'scrape':23B 'second':63B,142C 'section':40B,121C 'select':125C,126C 'selector':8A,29B,37B,71C,118C,154C 'siev':2A,25B,67C,85C 'soup':1A,24B,34B,66C,79C,84C,130C 'tie':58B 'trust':147C 'trusted-on':146C 'uncach':163C 'untrust':50B,134C 'use':31B,76C,117C,160C 'version':170C 'walk':45B,87C 'web':22B 'web-scrap':21B 'work':106C 'worker':11A,61B,139C 'xml':53B,115C","nicknames":[],"mitigations":[],"who_affected":"Applications that run Beautiful Soup CSS selectors with descendant combinators against untrusted HTML or XML are exposed. Processing only trusted documents is not affected, and selectors compiled with NOCACHE keep the old uncached behavior.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["beautifulsoup","high","package","python","webscraping"],"campaign_type":null,"search_a":"'-126190':14A,17A '-2026':13A,16A 'css':7A 'cve':12A,15A 'deepli':3A 'hang':10A 'html':5A 'make':6A 'match':9A 'nest':4A 'selector':8A 'siev':2A 'soup':1A 'worker':11A","search_b":"'4':35B 'ancestor':46B 'attack':56B 'beauti':33B 'beautifulsoup':18B 'css':28B 'deepli':48B 'descend':36B 'div':41B,42B 'html':51B 'librari':30B 'minut':65B 'nest':49B 'packag':19B 'python':20B 're':44B 're-walk':43B 'scrape':23B 'second':63B 'section':40B 'selector':29B,37B 'siev':25B 'soup':24B,34B 'tie':58B 'untrust':50B 'use':31B 'walk':45B 'web':22B 'web-scrap':21B 'worker':61B 'xml':53B","search_c":"'4':80C '4.0':83C,171C 'addit':97C 'affect':153C 'ancestor':90C 'api':132C 'applic':116C 'attack':111C 'attacker-influenc':110C 'beauti':78C,129C 'behavior':164C 'combin':94C,99C 'compil':155C 'continu':158C 'css':70C,131C 'deepli':108C 'degre':103C 'descend':93C,98C 'design':73C 'div':122C,123C 'document':135C,149C 'fix':168C 'html':113C 'influenc':112C 'issu':166C 'librari':72C 'match':92C 'minut':144C 'nest':109C 'nocach':157C 'occupi':140C 'old':162C 'one':127C 'polynomi':102C 'prior':81C 'process':150C 'rais':100C 'repeat':86C 'second':142C 'section':121C 'select':125C,126C 'selector':71C,118C,154C 'siev':67C,85C 'soup':66C,79C,84C,130C 'trust':147C 'trusted-on':146C 'uncach':163C 'untrust':134C 'use':76C,117C,160C 'version':170C 'walk':87C 'work':106C 'worker':139C 'xml':115C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-04T15:56:15+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126190","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126190","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:37+00:00","fetched_at":"2026-11-12T17:39:37+00:00","note":null}],"documents":[{"id":136839,"url":"https://github.com/facelessuser/soupsieve/commit/ff1a5ce7e5addc31626d7b6053511fecdb4f6320","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":136840,"url":"https://github.com/facelessuser/soupsieve/releases/tag/4.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":136841,"url":"https://github.com/facelessuser/soupsieve/security/advisories/GHSA-mmhr-3c5m-f64f","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-04T15:56:15+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"}