{"id":"CVE-2026-85295","kind":"vulnerability","aliases":["CVE-2026-85295"],"related":[],"title":"Chartbrew: forged session tokens let attackers impersonate any user","description":"Chartbrew is an open-source web application that can connect directly to databases and APIs and use the data to create charts. Prior to 5.2.3, four authentication helpers accepted session tokens signed with CB_SECRET, including known, weak, or shipped-default values. The vulnerable surface is session JWT fallback in server/modules/verifyToken.js, verifyUser.js, getUserFromToken.js, and socketManager.js across the API and socket layer. A stock source or repository Docker Compose deployment retains a known, weak, or default CB_SECRET and an attacker submits a forged HS256 token decoding to a target user id. Knowing the symmetric secret lets the attacker create a token that the legacy verification fallback accepts as the target user without that user's password or two-factor authentication. The condition includes stock source and repository Docker Compose installs and any otherwise known or weak CB_SECRET; a bare container where CB_SECRET is undefined is not affected by this fallback path. A forged session impersonates the chosen user across the entire API and socket layer and exercises that user's Chartbrew privileges. This issue is fixed in version 5.2.3.","summary":"Chartbrew, a self-hosted charting web app, accepts session tokens signed with a CB_SECRET that is often a known or default value in stock Docker Compose installs. An attacker who knows that secret can forge an HS256 token for any user id and act as that user, without their password or two-factor code.","severity":"critical","cvss":9.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["chartbrew","docker-compose","node","package","self-hosted"],"not_affected_if":["cb-secret-undefined","managed-hosting","strong-cb-secret"],"how_to_check":"- Check the Chartbrew version in the deployment; affected builds are before `5.2.3`.\n- Inspect the `CB_SECRET` environment variable in the Docker Compose or server config; a stock, repository-default, or weak value means exposure.\n- A bare container where `CB_SECRET` is undefined is not affected by this fallback path, per the description.","fix":"- Chartbrew: upgrade to `5.2.3`.","status":"open","published_at":"2026-11-06T21:17:10+00:00","first_seen_at":"2026-11-06T21:45:08+00:00","triaged_at":"2026-11-06T21:46:26+00:00","updated_at":"2026-11-06T21:46:26+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-06T21:46:26Z","model":"claude-haiku-5-5","output":{"fix":"- Chartbrew: upgrade to `5.2.3`.","reach":"internet","title":"Chartbrew: forged session tokens let attackers impersonate any user","impact":"high","summary":"Chartbrew, a self-hosted charting web app, accepts session tokens signed with a CB_SECRET that is often a known or default value in stock Docker Compose installs. An attacker who knows that secret can forge an HS256 token for any user id and act as that user, without their password or two-factor code.","audience":"businesses","category":"package","nicknames":[],"who_cares":["chartbrew","self-hosted","docker-compose","node"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"attacker impersonates any user, exercising their privileges across the API","analyst_note":"Confirm the fixed version and default CB_SECRET details against the Chartbrew release notes and vendor advisory linked in the sources.","how_to_check":"- Check the Chartbrew version in the deployment; affected builds are before `5.2.3`.\n- Inspect the `CB_SECRET` environment variable in the Docker Compose or server config; a stock, repository-default, or weak value means exposure.\n- A bare container where `CB_SECRET` is undefined is not affected by this fallback path, per the description.","plain_action":"","needs_analyst":true,"not_affected_if":["managed-hosting","strong-cb-secret","cb-secret-undefined"],"who_is_affected":"Self-hosted Chartbrew installs from the stock source or repository Docker Compose setup that keep a known, weak, or default CB_SECRET are exposed, because the legacy session fallback accepts tokens signed with that secret. Deployments with a strong, unique CB_SECRET are not affected by this path, and a bare container where CB_SECRET is undefined is not affected either. Teams using managed hosting can skip it unless their provider runs an older release.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"critical"},"cost_usd":0.000801,"input_tokens":4539,"output_tokens":694,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-85295':12A,15A '5.2.3':107C,265C 'accept':33B,111C,190C 'across':139C,245C 'act':70B 'affect':233C 'api':97C,141C,248C 'app':32B 'applic':89C 'attack':6A,55B,163C,181C 'authent':109C,204C 'bare':224C 'cb':39B,116C,159C,221C,227C 'chart':30B,104C 'chartbrew':1A,16B,25B,82C,257C 'chosen':243C 'code':81B 'compos':19B,52B,151C,213C 'condit':206C 'connect':92C 'contain':225C 'creat':103C,182C 'cve':10A,13A 'data':101C 'databas':95C 'decod':169C 'default':47B,124C,158C 'deploy':152C 'direct':93C 'docker':18B,51B,150C,212C 'docker-compos':17B 'entir':247C 'exercis':253C 'factor':80B,203C 'fallback':132C,189C,236C 'fix':262C 'forg':2A,61B,166C,239C 'four':108C 'getuserfromtoken.js':136C 'helper':110C 'host':24B,29B 'hs256':63B,167C 'id':68B,174C 'imperson':7A,241C 'includ':118C,207C 'instal':53B,214C 'issu':260C 'jwt':131C 'know':57B,175C 'known':45B,119C,155C,218C 'layer':144C,251C 'legaci':187C 'let':5A,179C 'node':20B 'often':43B 'open':86C 'open-sourc':85C 'otherwis':217C 'packag':21B 'password':76B,199C 'path':237C 'prior':105C 'privileg':258C 'repositori':149C,211C 'retain':153C 'secret':40B,59B,117C,160C,178C,222C,228C 'self':23B,28B 'self-host':22B,27B 'server/modules/verifytoken.js':134C 'session':3A,34B,112C,130C,240C 'ship':123C 'shipped-default':122C 'sign':36B,114C 'socket':143C,250C 'socketmanager.js':138C 'sourc':87C,147C,209C 'stock':50B,146C,208C 'submit':164C 'surfac':128C 'symmetr':177C 'target':172C,193C 'token':4A,35B,64B,113C,168C,184C 'two':79B,202C 'two-factor':78B,201C 'undefin':230C 'use':99C 'user':9A,67B,73B,173C,194C,197C,244C,255C 'valu':48B,125C 'verif':188C 'verifyuser.js':135C 'version':264C 'vulner':127C 'weak':120C,156C,220C 'web':31B,88C 'without':74B,195C","nicknames":[],"mitigations":[],"who_affected":"Self-hosted Chartbrew installs from the stock source or repository Docker Compose setup that keep a known, weak, or default CB_SECRET are exposed, because the legacy session fallback accepts tokens signed with that secret. Deployments with a strong, unique CB_SECRET are not affected by this path, and a bare container where CB_SECRET is undefined is not affected either. Teams using managed hosting can skip it unless their provider runs an older release.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["chartbrew","critical","dockercompose","node","package","selfhosted"],"campaign_type":null,"search_a":"'-2026':11A,14A '-85295':12A,15A 'attack':6A 'chartbrew':1A 'cve':10A,13A 'forg':2A 'imperson':7A 'let':5A 'session':3A 'token':4A 'user':9A","search_b":"'accept':33B 'act':70B 'app':32B 'attack':55B 'cb':39B 'chart':30B 'chartbrew':16B,25B 'code':81B 'compos':19B,52B 'default':47B 'docker':18B,51B 'docker-compos':17B 'factor':80B 'forg':61B 'host':24B,29B 'hs256':63B 'id':68B 'instal':53B 'know':57B 'known':45B 'node':20B 'often':43B 'packag':21B 'password':76B 'secret':40B,59B 'self':23B,28B 'self-host':22B,27B 'session':34B 'sign':36B 'stock':50B 'token':35B,64B 'two':79B 'two-factor':78B 'user':67B,73B 'valu':48B 'web':31B 'without':74B","search_c":"'5.2.3':107C,265C 'accept':111C,190C 'across':139C,245C 'affect':233C 'api':97C,141C,248C 'applic':89C 'attack':163C,181C 'authent':109C,204C 'bare':224C 'cb':116C,159C,221C,227C 'chart':104C 'chartbrew':82C,257C 'chosen':243C 'compos':151C,213C 'condit':206C 'connect':92C 'contain':225C 'creat':103C,182C 'data':101C 'databas':95C 'decod':169C 'default':124C,158C 'deploy':152C 'direct':93C 'docker':150C,212C 'entir':247C 'exercis':253C 'factor':203C 'fallback':132C,189C,236C 'fix':262C 'forg':166C,239C 'four':108C 'getuserfromtoken.js':136C 'helper':110C 'hs256':167C 'id':174C 'imperson':241C 'includ':118C,207C 'instal':214C 'issu':260C 'jwt':131C 'know':175C 'known':119C,155C,218C 'layer':144C,251C 'legaci':187C 'let':179C 'open':86C 'open-sourc':85C 'otherwis':217C 'password':199C 'path':237C 'prior':105C 'privileg':258C 'repositori':149C,211C 'retain':153C 'secret':117C,160C,178C,222C,228C 'server/modules/verifytoken.js':134C 'session':112C,130C,240C 'ship':123C 'shipped-default':122C 'sign':114C 'socket':143C,250C 'socketmanager.js':138C 'sourc':87C,147C,209C 'stock':146C,208C 'submit':164C 'surfac':128C 'symmetr':177C 'target':172C,193C 'token':113C,168C,184C 'two':202C 'two-factor':201C 'undefin':230C 'use':99C 'user':173C,194C,197C,244C,255C 'valu':125C 'verif':188C 'verifyuser.js':135C 'version':264C 'vulner':127C 'weak':120C,156C,220C 'web':88C 'without':195C","first_public_at":"2026-09-06T04:51:06+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-85295","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-85295","severity":null,"published_at":"2026-11-06T21:17:10+00:00","modified_at":"2026-11-06T21:17:11+00:00","first_seen_at":"2026-11-06T21:45:08+00:00","fetched_at":"2026-11-06T21:45:08+00:00","note":null}],"documents":[{"id":90343,"url":"https://github.com/chartbrew/chartbrew/commit/da8c71f156aaa13fbc7ead15a4726740fef2b3c5","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":90344,"url":"https://github.com/chartbrew/chartbrew/releases/tag/v5.2.3","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":90345,"url":"https://github.com/chartbrew/chartbrew/security/advisories/GHSA-qvv4-r3q6-8797","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-06T04:51:06+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}