{"id":"CVE-2026-118773","kind":"vulnerability","aliases":["CVE-2026-118773"],"related":[],"title":"glob: abort handling keeps traversing after cancellation, stacking filesystem work","description":"Glob matches files using patterns the shell uses. From 9.0.0 until 14.0.2, abort branches in src/walker.ts, including GlobUtil.walkCB(), GlobUtil.walkCB2(), GlobUtil.walkCBSync(), and GlobUtil.walkCB2Sync(), invoke the callbacks without returning. After AbortSignal or AbortSignal.timeout() rejects or emits an error, execution can continue into processor.processPatterns(), readdirCB(), and recursive traversal. The issue affects glob() and globStream() when applications expose attacker-influenced patterns or directory trees and rely on cancellation as a traversal budget. Repeated timed-out requests can stack background filesystem operations and CPU work, degrading worker throughput or service availability; no confidentiality or integrity impact was observed. This issue is fixed in 14.0.2.","summary":"The glob package, versions 9.0.0 through 14.0.2, keeps running directory traversal after an AbortSignal fires, because the abort branches invoke callbacks without returning. An attacker who can supply patterns or trigger repeated timed-out requests can stack background filesystem and CPU work, degrading service availability.","severity":"medium","cvss":6.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["glob","javascript","node","package","self-hosted"],"not_affected_if":["fixed-patterns","glob-below-9.0.0","no-abort-signal"],"how_to_check":"- Check the installed glob version with `npm ls glob` in each project.\n- Look for applications that pass attacker-influenced patterns to `glob()` or `globStream()` and use AbortSignal or AbortSignal.timeout() as a traversal budget.","fix":"- glob: `14.0.2`","status":"open","published_at":"2026-10-29T19:17:19+00:00","first_seen_at":"2026-10-29T19:26:47+00:00","triaged_at":"2026-10-29T19:27:29+00:00","updated_at":"2026-10-29T19:27:29+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-29T19:27:29Z","model":"claude-haiku-5-5","output":{"fix":"- glob: `14.0.2`","reach":"network","title":"glob: abort handling keeps traversing after cancellation, stacking filesystem work","impact":"low","summary":"The glob package, versions 9.0.0 through 14.0.2, keeps running directory traversal after an AbortSignal fires, because the abort branches invoke callbacks without returning. An attacker who can supply patterns or trigger repeated timed-out requests can stack background filesystem and CPU work, degrading service availability.","audience":"developers","category":"package","nicknames":[],"who_cares":["glob","node","javascript","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Repeated timeouts stack background filesystem and CPU work, degrading availability","analyst_note":"","how_to_check":"- Check the installed glob version with `npm ls glob` in each project.\n- Look for applications that pass attacker-influenced patterns to `glob()` or `globStream()` and use AbortSignal or AbortSignal.timeout() as a traversal budget.","plain_action":"","needs_analyst":false,"not_affected_if":["fixed-patterns","no-abort-signal","glob-below-9.0.0"],"who_is_affected":"Applications that call glob() or globStream() with patterns or directory trees an outside party can influence, and that rely on AbortSignal or AbortSignal.timeout() to cap traversal. Projects using glob with fixed patterns and no cancellation budget are less exposed. The sources report no confidentiality or integrity impact.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000719,"input_tokens":4299,"output_tokens":578,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-118773':13A,16A '-2026':12A,15A '14.0.2':30B,81C,170C '9.0.0':28B,79C 'abort':2A,41B,82C 'abortsign':37B,98C 'abortsignal.timeout':100C 'affect':117C 'applic':122C 'attack':48B,125C 'attacker-influenc':124C 'avail':69B,157C 'background':62B,146C 'branch':42B,83C 'budget':138C 'callback':44B,94C 'cancel':7A,134C 'confidenti':159C 'continu':108C 'cpu':65B,150C 'cve':11A,14A 'degrad':67B,152C 'directori':33B,129C 'emit':103C 'error':105C 'execut':106C 'expos':123C 'file':72C 'filesystem':9A,63B,147C 'fire':38B 'fix':168C 'glob':1A,17B,25B,70C,118C 'globstream':120C 'globutil.walkcb':87C 'globutil.walkcb2':88C 'globutil.walkcb2sync':91C 'globutil.walkcbsync':89C 'handl':3A 'host':23B 'impact':162C 'includ':86C 'influenc':126C 'integr':161C 'invok':43B,92C 'issu':116C,166C 'javascript':18B 'keep':4A,31B 'match':71C 'node':19B 'observ':164C 'oper':148C 'packag':20B,26B 'pattern':52B,74C,127C 'processor.processpatterns':110C 'readdircb':111C 'recurs':113C 'reject':101C 'reli':132C 'repeat':55B,139C 'request':59B,143C 'return':46B,96C 'run':32B 'self':22B 'self-host':21B 'servic':68B,156C 'shell':76C 'src/walker.ts':85C 'stack':8A,61B,145C 'suppli':51B 'throughput':154C 'time':57B,141C 'timed-out':56B,140C 'travers':5A,34B,114C,137C 'tree':130C 'trigger':54B 'use':73C,77C 'version':27B 'without':45B,95C 'work':10A,66B,151C 'worker':153C","nicknames":[],"mitigations":[],"who_affected":"Applications that call glob() or globStream() with patterns or directory trees an outside party can influence, and that rely on AbortSignal or AbortSignal.timeout() to cap traversal. Projects using glob with fixed patterns and no cancellation budget are less exposed. The sources report no confidentiality or integrity impact.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-10-29T19:17:19+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/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":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-118773","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-118773","severity":null,"published_at":"2026-10-29T19:17:19+00:00","modified_at":"2026-10-29T19:17:19+00:00","first_seen_at":"2026-10-29T19:26:47+00:00","fetched_at":"2026-10-29T19:26:47+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"}