{"id":"CVE-2026-113811","kind":"vulnerability","aliases":["CVE-2026-113811"],"related":[],"title":"Perl Algorithm::UrataniTakeda: search cache grows without limit, exhausting memory","description":"Algorithm::UrataniTakeda versions from 0.1.5 before 0.1.7 for Perl allow memory exhaustion via a never-cleared failure shift cache in search.\n\nThe failure shift is cached for each pair of trie state and text character in a field of the matcher object, and nothing clears it. A character not seen before at a given state adds an entry that lasts for the life of the matcher.\n\nAn attacker who can submit text with many distinct characters to a long-lived matcher can grow its memory with each search.","summary":"Algorithm::UrataniTakeda versions 0.1.5 before 0.1.7 keep a failure-shift cache in the matcher object that is never cleared. An attacker who submits text with many distinct characters to a long-lived matcher can make its memory grow with each search until it is exhausted.","severity":"low","cvss":null,"epss":0.00229,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cpan","package","perl","self-hosted"],"not_affected_if":["fixed-version","not-using-module","short-lived-process"],"how_to_check":"- Run `cpanm --info Algorithm::UrataniTakeda` or `perl -MAlgorithm::UrataniTakeda -e 'print $Algorithm::UrataniTakeda::VERSION'` to read the installed version\n- Search dependency manifests and lockfiles for `Algorithm::UrataniTakeda` to see whether it is pinned below `0.1.7`","fix":"- Upgrade Algorithm::UrataniTakeda to `0.1.7` or later\n- Where a matcher is long-lived, recreate it per request or restart the worker process periodically","status":"open","published_at":"2026-10-21T21:17:55+00:00","first_seen_at":"2026-10-23T21:57:29+00:00","triaged_at":"2026-10-25T05:02:04+00:00","updated_at":"2026-10-25T05:02:04+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T05:02:04Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Algorithm::UrataniTakeda to `0.1.7` or later\n- Where a matcher is long-lived, recreate it per request or restart the worker process periodically","reach":"unknown","title":"Perl Algorithm::UrataniTakeda: search cache grows without limit, exhausting memory","impact":"low","summary":"Algorithm::UrataniTakeda versions 0.1.5 before 0.1.7 keep a failure-shift cache in the matcher object that is never cleared. An attacker who submits text with many distinct characters to a long-lived matcher can make its memory grow with each search until it is exhausted.","category":"package","nicknames":[],"who_cares":["perl","cpan","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Attacker exhausts process memory, crashing the service with denial of service","analyst_note":"","how_to_check":"- Run `cpanm --info Algorithm::UrataniTakeda` or `perl -MAlgorithm::UrataniTakeda -e 'print $Algorithm::UrataniTakeda::VERSION'` to read the installed version\n- Search dependency manifests and lockfiles for `Algorithm::UrataniTakeda` to see whether it is pinned below `0.1.7`","needs_analyst":false,"not_affected_if":["short-lived-process","not-using-module","fixed-version"],"who_is_affected":"Applications that use Algorithm::UrataniTakeda in a long-running process, such as a daemon or web worker that keeps one matcher object and searches untrusted input through it. Short-lived scripts that create a matcher per run are much less exposed, and anyone not using the module can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"low"},"cost_usd":0.000655,"input_tokens":3428,"output_tokens":625,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-113811':13A,16A '-2026':12A,15A '0.1.5':26B,74C '0.1.7':28B,76C 'add':126C 'algorithm':2A,23B,70C 'allow':79C 'attack':44B,138C 'cach':5A,34B,89C,96C 'charact':51B,105C,118C,146C 'clear':42B,86C,115C 'cpan':17B 'cve':11A,14A 'distinct':50B,145C 'entri':128C 'exhaust':9A,69B,81C 'failur':32B,87C,93C 'failure-shift':31B 'field':108C 'given':124C 'grow':6A,62B,154C 'host':22B 'keep':29B 'last':130C 'life':133C 'limit':8A 'live':56B,151C 'long':55B,150C 'long-liv':54B,149C 'make':59B 'mani':49B,144C 'matcher':37B,57B,111C,136C,152C 'memori':10A,61B,80C,156C 'never':41B,85C 'never-clear':84C 'noth':114C 'object':38B,112C 'packag':18B 'pair':99C 'perl':1A,19B,78C 'search':4A,65B,91C,159C 'seen':120C 'self':21B 'self-host':20B 'shift':33B,88C,94C 'state':102C,125C 'submit':46B,141C 'text':47B,104C,142C 'trie':101C 'uratanitakeda':3A,24B,71C 'version':25B,72C 'via':82C 'without':7A","nicknames":[],"mitigations":[],"who_affected":"Applications that use Algorithm::UrataniTakeda in a long-running process, such as a daemon or web worker that keeps one matcher object and searches untrusted input through it. Short-lived scripts that create a matcher per run are much less exposed, and anyone not using the module can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T21:17:55+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-113811","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113811","severity":null,"published_at":"2026-10-21T21:17:55+00:00","modified_at":"2026-10-22T17:40:46+00:00","first_seen_at":"2026-10-23T21:57:29+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"epss","external_id":"CVE-2026-113811","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-113811","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T13:15:54+00:00","fetched_at":"2026-10-24T13:15:54+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}