{"id":"CVE-2026-54631","kind":"vulnerability","aliases":["CVE-2026-54631"],"related":[],"title":"Part-DB: committed secret lets attackers forge login cookies for any user","description":"Part-DB is an open source inventory management system for electronic components. Prior to version 2.12.1, the file .env committed in the Part-DB repository contains a fixed value for APP_SECRET (a03498528f5a5fc089273ec9ae5b2849). The official Docker image jbtronics/part-db1 does not override or randomize this value at container start-up. Because Symfony uses APP_SECRET (via kernel.secret) as the HMAC key for signing remember-me cookies, any attacker who knows the secret -- or fetches it from the public repository -- can forge an arbitrary-user remember-me cookie and gain a fully authenticated session with no credentials required. This issue has been patched in version 2.12.1.","summary":"Part-DB's repository commits a fixed APP_SECRET in its .env file, and the official Docker image does not replace it at startup. An attacker who knows that value can forge remember-me cookies and log in as any user without credentials.","severity":"medium","cvss":6.3,"epss":0.00109,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["docker","package","part-db","self-hosted","symfony"],"not_affected_if":["custom-app-secret","no-remember-me","version-2.12.1-or-later"],"how_to_check":"- Run `docker exec <container> printenv APP_SECRET` and compare with the value in the public repository's .env file (a03498528f5a5fc089273ec9ae5b2849)\n- Check the running Part-DB version and confirm it is below `2.12.1`\n- unknown","fix":"- Upgrade Part-DB to `2.12.1` or later\n- Set APP_SECRET to a freshly generated random value and rotate it so existing remember-me cookies are invalidated\n- unknown","status":"open","published_at":"2026-10-23T04:18:17+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","triaged_at":"2026-10-25T04:00:08+00:00","updated_at":"2026-10-25T04:00:08+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T04:00:08Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Part-DB to `2.12.1` or later\n- Set APP_SECRET to a freshly generated random value and rotate it so existing remember-me cookies are invalidated\n- unknown","reach":"internet","title":"Part-DB: committed secret lets attackers forge login cookies for any user","impact":"high","summary":"Part-DB's repository commits a fixed APP_SECRET in its .env file, and the official Docker image does not replace it at startup. An attacker who knows that value can forge remember-me cookies and log in as any user without credentials.","category":"package","nicknames":[],"who_cares":["part-db","self-hosted","docker","symfony"],"confidence":0.8,"needs_auth":"no","worst_case":"Attacker logs in as any user, including administrators, without credentials","analyst_note":"","how_to_check":"- Run `docker exec <container> printenv APP_SECRET` and compare with the value in the public repository's .env file (a03498528f5a5fc089273ec9ae5b2849)\n- Check the running Part-DB version and confirm it is below `2.12.1`\n- unknown","needs_analyst":false,"not_affected_if":["custom-app-secret","no-remember-me","version-2.12.1-or-later"],"who_is_affected":"Deployments of Part-DB running a version before 2.12.1 that use the official jbtronics/part-db1 Docker image or the committed .env without overriding APP_SECRET. Installs that set their own APP_SECRET at runtime and use remember-me login are not exposed through this path. Teams not running Part-DB can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000639,"input_tokens":3474,"output_tokens":584,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':15A,18A '-54631':16A,19A '2.12.1':90C,183C 'a03498528f5a5fc089273ec9ae5b2849':108C 'app':37B,106C,129C 'arbitrari':160C 'arbitrary-us':159C 'attack':7A,55B,144C 'authent':170C 'commit':4A,34B,94C 'compon':86C 'contain':101C,122C 'cooki':10A,65B,142C,165C 'credenti':73B,174C 'cve':14A,17A 'db':3A,24B,31B,76C,99C 'docker':20B,46B,111C 'electron':85C 'env':41B,93C 'fetch':150C 'file':42B,92C 'fix':36B,103C 'forg':8A,61B,157C 'fulli':169C 'gain':167C 'hmac':135C 'host':27B 'imag':47B,112C 'inventori':81C 'issu':177C 'jbtronics/part-db1':113C 'kernel.secret':132C 'key':136C 'know':57B,146C 'let':6A 'log':67B 'login':9A 'manag':82C 'offici':45B,110C 'open':79C 'overrid':116C 'packag':21B 'part':2A,23B,30B,75C,98C 'part-db':1A,22B,29B,74C,97C 'patch':180C 'prior':87C 'public':154C 'random':118C 'rememb':63B,140C,163C 'remember-m':62B,139C,162C 'replac':50B 'repositori':33B,100C,155C 'requir':175C 'secret':5A,38B,107C,130C,148C 'self':26B 'self-host':25B 'session':171C 'sign':138C 'sourc':80C 'start':124C 'start-up':123C 'startup':53B 'symfoni':28B,127C 'system':83C 'use':128C 'user':13A,71B,161C 'valu':59B,104C,120C 'version':89C,182C 'via':131C 'without':72B","nicknames":[],"mitigations":[],"who_affected":"Deployments of Part-DB running a version before 2.12.1 that use the official jbtronics/part-db1 Docker image or the committed .env without overriding APP_SECRET. Installs that set their own APP_SECRET at runtime and use remember-me login are not exposed through this path. Teams not running Part-DB can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T04:18:17+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-54631","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54631","severity":null,"published_at":"2026-10-23T04:18:17+00:00","modified_at":"2026-10-23T19:36:32+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-54631","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-54631","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+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"}