{"id":"CVE-2026-126658","kind":"vulnerability","aliases":["CVE-2026-126658"],"related":[],"title":"ByteStash: deactivated accounts keep API key access to snippets and MCP","description":"ByteStash 1.5.10 before 1.6.2 contains an insufficient session expiration vulnerability that allows holders of API keys to keep access after account deactivation because validateApiKey never checks account status. Attackers holding a deactivated account's API key can read, create, modify and delete its snippets via /api/snippets and use every MCP tool via /mcp.","summary":"ByteStash, a self-hosted code snippet manager, does not check whether an account is still active when validating an API key. Someone holding the API key of a deactivated account can keep reading, creating, changing and deleting that account's snippets, and use every MCP tool.","severity":"medium","cvss":5.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-tooling","api-keys","bytestash","mcp","self-hosted"],"not_affected_if":["no-api-keys-issued","version-1.6.2-or-later"],"how_to_check":"- Check the installed ByteStash version; affected versions are `1.5.10` up to but not including `1.6.2`.\n- Review whether any API keys belonging to deactivated or removed users are still valid.","fix":"- Move ByteStash to `1.6.2` or later.","status":"open","published_at":"2026-11-11T13:17:23+00:00","first_seen_at":"2026-11-11T13:27:16+00:00","triaged_at":"2026-11-11T13:29:25+00:00","updated_at":"2026-11-11T13:29:25+00:00","category":"ai-tooling","confidence":0.7,"triage":{"at":"2026-11-11T13:29:25Z","model":"claude-haiku-5-5","output":{"fix":"- Move ByteStash to `1.6.2` or later.","reach":"network","title":"ByteStash: deactivated accounts keep API key access to snippets and MCP","impact":"medium","summary":"ByteStash, a self-hosted code snippet manager, does not check whether an account is still active when validating an API key. Someone holding the API key of a deactivated account can keep reading, creating, changing and deleting that account's snippets, and use every MCP tool.","audience":"businesses","category":"ai-tooling","nicknames":[],"who_cares":["bytestash","self-hosted","mcp","api-keys"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"deactivated users keep read and write access to their snippets","analyst_note":"","how_to_check":"- Check the installed ByteStash version; affected versions are `1.5.10` up to but not including `1.6.2`.\n- Review whether any API keys belonging to deactivated or removed users are still valid.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-1.6.2-or-later","no-api-keys-issued"],"who_is_affected":"Teams that run ByteStash themselves and issue API keys to user accounts. Exposure comes from keys that outlive the account they belong to, which then reach the snippet API and the MCP endpoint. Instances that do not issue API keys, or that are on 1.6.2 or later, are not affected.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000738,"input_tokens":4644,"output_tokens":548,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-126658':14A,17A '-2026':13A,16A '/api/snippets':121C '/mcp':128C '1.5.10':77C '1.6.2':79C 'access':7A,94C 'account':3A,42B,59B,68B,96C,102C,108C 'activ':45B 'ai':19B 'ai-tool':18B 'allow':87C 'api':5A,22B,49B,54B,90C,110C 'api-key':21B 'attack':104C 'bytestash':1A,24B,29B,76C 'chang':64B 'check':39B,101C 'code':34B 'contain':80C 'creat':63B,114C 'cve':12A,15A 'deactiv':2A,58B,97C,107C 'delet':66B,117C 'everi':73B,124C 'expir':84C 'hold':52B,105C 'holder':88C 'host':28B,33B 'insuffici':82C 'keep':4A,61B,93C 'key':6A,23B,50B,55B,91C,111C 'manag':36B 'mcp':11A,25B,74B,125C 'modifi':115C 'never':100C 'read':62B,113C 'self':27B,32B 'self-host':26B,31B 'session':83C 'snippet':9A,35B,70B,119C 'someon':51B 'status':103C 'still':44B 'tool':20B,75B,126C 'use':72B,123C 'valid':47B 'validateapikey':99C 'via':120C,127C 'vulner':85C 'whether':40B","nicknames":[],"mitigations":[],"who_affected":"Teams that run ByteStash themselves and issue API keys to user accounts. Exposure comes from keys that outlive the account they belong to, which then reach the snippet API and the MCP endpoint. Instances that do not issue API keys, or that are on 1.6.2 or later, are not affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["aitooling","apikeys","bytestash","mcp","medium","selfhosted"],"campaign_type":null,"search_a":"'-126658':14A,17A '-2026':13A,16A 'access':7A 'account':3A 'api':5A 'bytestash':1A 'cve':12A,15A 'deactiv':2A 'keep':4A 'key':6A 'mcp':11A 'snippet':9A","search_b":"'account':42B,59B,68B 'activ':45B 'ai':19B 'ai-tool':18B 'api':22B,49B,54B 'api-key':21B 'bytestash':24B,29B 'chang':64B 'check':39B 'code':34B 'creat':63B 'deactiv':58B 'delet':66B 'everi':73B 'hold':52B 'host':28B,33B 'keep':61B 'key':23B,50B,55B 'manag':36B 'mcp':25B,74B 'read':62B 'self':27B,32B 'self-host':26B,31B 'snippet':35B,70B 'someon':51B 'still':44B 'tool':20B,75B 'use':72B 'valid':47B 'whether':40B","search_c":"'/api/snippets':121C '/mcp':128C '1.5.10':77C '1.6.2':79C 'access':94C 'account':96C,102C,108C 'allow':87C 'api':90C,110C 'attack':104C 'bytestash':76C 'check':101C 'contain':80C 'creat':114C 'deactiv':97C,107C 'delet':117C 'everi':124C 'expir':84C 'hold':105C 'holder':88C 'insuffici':82C 'keep':93C 'key':91C,111C 'mcp':125C 'modifi':115C 'never':100C 'read':113C 'session':83C 'snippet':119C 'status':103C 'tool':126C 'use':123C 'validateapikey':99C 'via':120C,127C 'vulner':85C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-10T11:33:37+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/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":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126658","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126658","severity":null,"published_at":"2026-11-11T13:17:23+00:00","modified_at":"2026-11-11T13:17:23+00:00","first_seen_at":"2026-11-11T13:27:16+00:00","fetched_at":"2026-11-11T13:27:16+00:00","note":null}],"documents":[{"id":125681,"url":"https://github.com/jordan-dalby/ByteStash/commit/eb4ecdfc30f2e7d1424137fa7fe3a9eed663218b","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":125682,"url":"https://github.com/jordan-dalby/ByteStash/releases/tag/v1.6.2","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":125683,"url":"https://github.com/jordan-dalby/ByteStash/security/advisories/GHSA-26m9-ww2j-3cr5","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-10T11:33:37+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":125684,"url":"https://www.vulncheck.com/advisories/bytestash-1.5.10-before-1.6.2-insufficient-session-expiration-via-api-keys","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.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"}