{"id":"GHSA-jf9x-2fg2-hx4w","kind":"vulnerability","aliases":["GHSA-jf9x-2fg2-hx4w"],"related":[],"title":"Prerendered paths are interpreted as regular expressions in Vercel route config generated by @sveltejs/adapter-vercel and @sveltejs/adapter-static","description":"If an attacker could influence a link that was crawled during the prerender phase, that link could later be interpreted as a regex in the Vercel routing configuration.","summary":"The Vercel and static adapters for SvelteKit write prerendered page paths into Vercel routing config as regular expressions without escaping them. A path crawled during prerendering that an attacker influenced could be read as a regex pattern, which could change how routes match.","severity":"medium","cvss":5.9,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"@sveltejs/adapter-vercel","fixed":["6.3.5","7.0.2"],"affected":"<= 6.3.5, 7.0.0, 7.0.1","ecosystem":"npm"},{"name":"@sveltejs/adapter-static","fixed":["3.0.11","4.0.1"],"affected":"<= 3.0.10, 4.0.0","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["cwe-116","cwe-625","npm","package","svelte","sveltekit","vercel"],"not_affected_if":["managed-hosting-without-adapter","no-prerendered-paths"],"how_to_check":"- Check the installed version with `npm ls @sveltejs/adapter-vercel @sveltejs/adapter-static`\n- Look for `@sveltejs/adapter-vercel` or `@sveltejs/adapter-static` in `package.json` and `package-lock.json`","fix":"- @sveltejs/adapter-vercel: `6.3.5` (6 line) or `7.0.2` (7 line)\n- @sveltejs/adapter-static: `3.0.11` (3 line) or `4.0.1` (4 line)","status":"open","published_at":"2026-10-29T23:47:18+00:00","first_seen_at":"2026-11-09T22:53:16+00:00","triaged_at":"2026-11-09T22:56:17+00:00","updated_at":"2026-11-09T22:56:17+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-09T22:56:17Z","model":"claude-haiku-5-5","output":{"fix":"- @sveltejs/adapter-vercel: `6.3.5` (6 line) or `7.0.2` (7 line)\n- @sveltejs/adapter-static: `3.0.11` (3 line) or `4.0.1` (4 line)","reach":"unknown","title":"SvelteKit adapters: prerendered paths treated as regex in Vercel routes","impact":"low","summary":"The Vercel and static adapters for SvelteKit write prerendered page paths into Vercel routing config as regular expressions without escaping them. A path crawled during prerendering that an attacker influenced could be read as a regex pattern, which could change how routes match.","audience":"developers","category":"package","nicknames":[],"who_cares":["sveltekit","svelte","vercel","npm"],"confidence":0.6,"fix_status":"available","needs_auth":"unknown","worst_case":"Vercel route matching changes for attacker-influenced prerendered paths","analyst_note":"","how_to_check":"- Check the installed version with `npm ls @sveltejs/adapter-vercel @sveltejs/adapter-static`\n- Look for `@sveltejs/adapter-vercel` or `@sveltejs/adapter-static` in `package.json` and `package-lock.json`","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["no-prerendered-paths","managed-hosting-without-adapter"],"who_is_affected":"Projects that use @sveltejs/adapter-vercel or @sveltejs/adapter-static to build a SvelteKit site with prerendered pages. The flaw needs a crawled link that an attacker can influence during the prerender phase; sites with no prerendered routes or no such link have less exposure. The sources do not say how far a bad route match could reach in practice.","user_interaction":"unknown","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000793,"input_tokens":4689,"output_tokens":648,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-116':30B '-625':32B '2fg2':20A,25A 'adapt':42B 'attack':66B,83C 'chang':77B 'config':11A,52B 'configur':108C 'could':68B,76B,84C,97C 'crawl':61B,90C 'cwe':29B,31B 'escap':57B 'express':7A,55B 'generat':12A 'ghsa':18A,23A 'ghsa-jf9x-2fg2-hx4w':17A,22A 'hx4w':21A,26A 'influenc':67B,85C 'interpret':4A,100C 'jf9x':19A,24A 'later':98C 'link':87C,96C 'match':80B 'npm':33B 'packag':34B 'page':47B 'path':2A,48B,60B 'pattern':74B 'phase':94C 'prerend':1A,46B,63B,93C 'read':70B 'regex':73B,103C 'regular':6A,54B 'rout':10A,51B,79B,107C 'static':41B 'svelt':35B 'sveltejs/adapter-static':16A,28A 'sveltejs/adapter-vercel':14A,27A 'sveltekit':36B,44B 'vercel':9A,37B,39B,50B,106C 'without':56B 'write':45B","nicknames":[],"mitigations":[],"who_affected":"Projects that use @sveltejs/adapter-vercel or @sveltejs/adapter-static to build a SvelteKit site with prerendered pages. The flaw needs a crawled link that an attacker can influence during the prerender phase; sites with no prerendered routes or no such link have less exposure. The sources do not say how far a bad route match could reach in practice.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["adapterstatic","adaptervercel"],"ptokens":["adapter","static","sveltejs","vercel"],"labels":["cwe116","cwe625","medium","npm","package","svelte","sveltekit","vercel"],"campaign_type":null,"search_a":"'2fg2':20A,25A 'config':11A 'express':7A 'generat':12A 'ghsa':18A,23A 'ghsa-jf9x-2fg2-hx4w':17A,22A 'hx4w':21A,26A 'interpret':4A 'jf9x':19A,24A 'path':2A 'prerend':1A 'regular':6A 'rout':10A 'sveltejs/adapter-static':16A,28A 'sveltejs/adapter-vercel':14A,27A 'vercel':9A","search_b":"'-116':30B '-625':32B 'adapt':42B 'attack':66B 'chang':77B 'config':52B 'could':68B,76B 'crawl':61B 'cwe':29B,31B 'escap':57B 'express':55B 'influenc':67B 'match':80B 'npm':33B 'packag':34B 'page':47B 'path':48B,60B 'pattern':74B 'prerend':46B,63B 'read':70B 'regex':73B 'regular':54B 'rout':51B,79B 'static':41B 'svelt':35B 'sveltekit':36B,44B 'vercel':37B,39B,50B 'without':56B 'write':45B","search_c":"'attack':83C 'configur':108C 'could':84C,97C 'crawl':90C 'influenc':85C 'interpret':100C 'later':98C 'link':87C,96C 'phase':94C 'prerend':93C 'regex':103C 'rout':107C 'vercel':106C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-10-29T23:47:18+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"ghsa-repo","external_id":"GHSA-jf9x-2fg2-hx4w","url":"https://github.com/sveltejs/kit/security/advisories/GHSA-jf9x-2fg2-hx4w","severity":"medium","published_at":"2026-10-29T23:47:18+00:00","modified_at":"2026-10-29T23:47:19+00:00","first_seen_at":"2026-11-09T22:53:16+00:00","fetched_at":"2026-11-09T22:53:16+00:00","note":null}],"documents":[{"id":110422,"url":"https://github.com/sveltejs/kit/security/advisories/GHSA-jf9x-2fg2-hx4w","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa-repo","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's 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"}