{"id":"CVE-2026-126353","kind":"vulnerability","aliases":["CVE-2026-126353"],"related":[],"title":"Addressable: crafted URI templates can hang a Ruby thread indefinitely","description":"Addressable is an alternative implementation to the URI implementation that is part of Ruby's standard library. From 2.3.0 until 2.9.1, URI template expressions containing several exploded variables generate ambiguous regular expressions that can divide a run of members among the variables in polynomially many ways. Template#match or Template#extract processing of an attacker-controlled URI can therefore consume a thread and cause denial of service. The flaw affects MRI Ruby before 3.2 and JRuby, TruffleRuby 40.0, and plus or number-sign expressions on MRI Ruby 3.2. MRI Ruby 3.3 and later, URI parsing, and Template#expand are unaffected. This issue is fixed in version 2.9.1.","summary":"Addressable is a Ruby library for parsing and expanding URIs and URI templates. Template#match and Template#extract on an attacker-supplied URI can take polynomial time, tying up a thread and causing denial of service.","severity":"medium","cvss":5.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["addressable","jruby","package","ruby","truffleruby"],"not_affected_if":["expand-only","no-untrusted-template-match","ruby-3.3-or-later"],"how_to_check":"- Check the locked version in the Gemfile.lock: `addressable` below `2.9.1` is affected.\n- Check whether the Ruby version is before `3.2`, or the app uses JRuby or TruffleRuby 40.0 (or `+` or `#` expressions on MRI Ruby 3.2), since those are the affected runtimes.\n- Check whether the app calls Template#match or Template#extract on untrusted input.","fix":"- `addressable` `2.9.1`","status":"open","published_at":"2026-11-12T22:19:20+00:00","first_seen_at":"2026-11-12T22:40:38+00:00","triaged_at":"2026-11-12T22:42:31+00:00","updated_at":"2026-11-12T22:42:31+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-12T22:42:31Z","model":"claude-haiku-5-5","output":{"fix":"- `addressable` `2.9.1`","reach":"internet","title":"Addressable: crafted URI templates can hang a Ruby thread indefinitely","impact":"low","summary":"Addressable is a Ruby library for parsing and expanding URIs and URI templates. Template#match and Template#extract on an attacker-supplied URI can take polynomial time, tying up a thread and causing denial of service.","audience":"developers","category":"package","nicknames":[],"who_cares":["ruby","addressable","jruby","truffleruby"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"a request ties up a thread, causing denial of service","analyst_note":"","how_to_check":"- Check the locked version in the Gemfile.lock: `addressable` below `2.9.1` is affected.\n- Check whether the Ruby version is before `3.2`, or the app uses JRuby or TruffleRuby 40.0 (or `+` or `#` expressions on MRI Ruby 3.2), since those are the affected runtimes.\n- Check whether the app calls Template#match or Template#extract on untrusted input.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["ruby-3.3-or-later","no-untrusted-template-match","expand-only"],"who_is_affected":"Only applications that call Addressable's Template#match or Template#extract on attacker-controlled URIs are exposed, and only on the affected Ruby runtimes. Apps on MRI Ruby 3.3 or later, apps that only parse URIs or call Template#expand, and apps that do not handle untrusted URI templates can skip it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000774,"input_tokens":4732,"output_tokens":601,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-126353':13A,16A '-2026':12A,15A '2.3.0':77C '2.9.1':79C,167C '3.2':133C,148C '3.3':151C '40.0':137C 'address':1A,17B,22B,59C 'affect':129C 'altern':62C 'ambigu':88C 'among':98C 'attack':43B,114C 'attacker-control':113C 'attacker-suppli':42B 'caus':55B,123C 'consum':119C 'contain':83C 'control':115C 'craft':2A 'cve':11A,14A 'denial':56B,124C 'divid':93C 'expand':30B,158C 'explod':85C 'express':82C,90C,144C 'extract':39B,109C 'fix':164C 'flaw':128C 'generat':87C 'hang':6A 'implement':63C,67C 'indefinit':10A 'issu':162C 'jrubi':18B,135C 'later':153C 'librari':26B,75C 'mani':103C 'match':36B,106C 'member':97C 'mri':130C,146C,149C 'number':142C 'number-sign':141C 'packag':19B 'pars':28B,155C 'part':70C 'plus':139C 'polynomi':48B,102C 'process':110C 'regular':89C 'rubi':8A,20B,25B,72C,131C,147C,150C 'run':95C 'servic':58B,126C 'sever':84C 'sign':143C 'standard':74C 'suppli':44B 'take':47B 'templat':4A,34B,35B,38B,81C,105C,108C,157C 'therefor':118C 'thread':9A,53B,121C 'tie':50B 'time':49B 'trufflerubi':21B,136C 'unaffect':160C 'uri':3A,31B,33B,45B,66C,80C,116C,154C 'variabl':86C,100C 'version':166C 'way':104C","nicknames":[],"mitigations":[],"who_affected":"Only applications that call Addressable's Template#match or Template#extract on attacker-controlled URIs are exposed, and only on the affected Ruby runtimes. Apps on MRI Ruby 3.3 or later, apps that only parse URIs or call Template#expand, and apps that do not handle untrusted URI templates can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["addressable","jruby","medium","package","ruby","truffleruby"],"campaign_type":null,"search_a":"'-126353':13A,16A '-2026':12A,15A 'address':1A 'craft':2A 'cve':11A,14A 'hang':6A 'indefinit':10A 'rubi':8A 'templat':4A 'thread':9A 'uri':3A","search_b":"'address':17B,22B 'attack':43B 'attacker-suppli':42B 'caus':55B 'denial':56B 'expand':30B 'extract':39B 'jrubi':18B 'librari':26B 'match':36B 'packag':19B 'pars':28B 'polynomi':48B 'rubi':20B,25B 'servic':58B 'suppli':44B 'take':47B 'templat':34B,35B,38B 'thread':53B 'tie':50B 'time':49B 'trufflerubi':21B 'uri':31B,33B,45B","search_c":"'2.3.0':77C '2.9.1':79C,167C '3.2':133C,148C '3.3':151C '40.0':137C 'address':59C 'affect':129C 'altern':62C 'ambigu':88C 'among':98C 'attack':114C 'attacker-control':113C 'caus':123C 'consum':119C 'contain':83C 'control':115C 'denial':124C 'divid':93C 'expand':158C 'explod':85C 'express':82C,90C,144C 'extract':109C 'fix':164C 'flaw':128C 'generat':87C 'implement':63C,67C 'issu':162C 'jrubi':135C 'later':153C 'librari':75C 'mani':103C 'match':106C 'member':97C 'mri':130C,146C,149C 'number':142C 'number-sign':141C 'pars':155C 'part':70C 'plus':139C 'polynomi':102C 'process':110C 'regular':89C 'rubi':72C,131C,147C,150C 'run':95C 'servic':126C 'sever':84C 'sign':143C 'standard':74C 'templat':81C,105C,108C,157C 'therefor':118C 'thread':121C 'trufflerubi':136C 'unaffect':160C 'uri':66C,80C,116C,154C 'variabl':86C,100C 'version':166C 'way':104C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-10-30T08:13:28+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/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-126353","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126353","severity":null,"published_at":"2026-11-12T22:19:20+00:00","modified_at":"2026-11-12T22:19:20+00:00","first_seen_at":"2026-11-12T22:40:38+00:00","fetched_at":"2026-11-12T22:40:38+00:00","note":null}],"documents":[{"id":139819,"url":"https://github.com/sporkmonger/addressable/commit/49aecf97bf6f6675717f1078a0b45f95c428e103","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":139737,"url":"https://github.com/sporkmonger/addressable/releases/tag/addressable-2.9.1","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":139821,"url":"https://github.com/sporkmonger/addressable/security/advisories/GHSA-4w5q-wg7v-w6gp","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-30T08:13:28+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"}