{"id":"CVE-2026-128047","kind":"vulnerability","aliases":["CVE-2026-128047"],"related":[],"title":"OpenMage magento-lts: predictable reset and confirmation tokens allow account takeover","description":"OpenMage magento-lts before 20.18.2 and 21.0.0-beta pre-releases before 21.0.0-beta3 generate customer email-confirmation keys with md5(uniqid()) and customer and administrator password-reset tokens with the non-cryptographic uniqHash(). Unauthenticated attackers can brute-force the roughly 20-bit confirmation key via the unrate-limited confirmAction endpoint to log in as pending customers, or predict administrator reset tokens after recovering generator state.","summary":"OpenMage generates customer email-confirmation keys and password-reset tokens with weak, non-cryptographic functions, so the keys can be guessed. An unauthenticated attacker can brute-force a pending customer's confirmation key to log in, or predict an administrator's reset token.","severity":"critical","cvss":9.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["magento","magento-lts","openmage","package","php","self-hosted"],"not_affected_if":["other-platform","patched-version"],"how_to_check":"- Check the installed magento-lts or OpenMage version in composer.json or composer.lock against the fixed versions below.\n- Look for `uniqid()` and `uniqHash()` in the customer confirmation and password-reset code paths.\n- Confirm whether the confirmAction endpoint is rate-limited.","fix":"- magento-lts: move to `20.18.2` or later.\n- 21.0.0-beta pre-releases: move to `21.0.0-beta3` or later.","status":"open","published_at":"2026-11-13T10:18:10+00:00","first_seen_at":"2026-11-13T10:47:32+00:00","triaged_at":"2026-11-13T10:48:28+00:00","updated_at":"2026-11-13T10:48:28+00:00","category":"package","confidence":0.85,"triage":{"at":"2026-11-13T10:48:28Z","model":"claude-haiku-5-5","output":{"fix":"- magento-lts: move to `20.18.2` or later.\n- 21.0.0-beta pre-releases: move to `21.0.0-beta3` or later.","reach":"internet","title":"OpenMage magento-lts: predictable reset and confirmation tokens allow account takeover","impact":"high","summary":"OpenMage generates customer email-confirmation keys and password-reset tokens with weak, non-cryptographic functions, so the keys can be guessed. An unauthenticated attacker can brute-force a pending customer's confirmation key to log in, or predict an administrator's reset token.","audience":"businesses","category":"package","nicknames":[],"who_cares":["magento","openmage","magento-lts","php","self-hosted"],"confidence":0.85,"fix_status":"available","needs_auth":"no","worst_case":"attacker logs in as customers or takes over administrator accounts","analyst_note":"","how_to_check":"- Check the installed magento-lts or OpenMage version in composer.json or composer.lock against the fixed versions below.\n- Look for `uniqid()` and `uniqHash()` in the customer confirmation and password-reset code paths.\n- Confirm whether the confirmAction endpoint is rate-limited.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["patched-version","other-platform"],"who_is_affected":"Sites running OpenMage magento-lts before 20.18.2, or 21.0.0-beta pre-releases before 21.0.0-beta3, are exposed because customer confirmation and password-reset tokens are generated with weak functions. The confirmAction endpoint has no rate limit, so brute-forcing is practical. Stores on other platforms or on patched versions can skip it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.000785,"input_tokens":4702,"output_tokens":629,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-128047':15A,18A '-2026':14A,17A '20':122C '20.18.2':81C '21.0.0':83C,89C 'account':11A 'administr':72B,103C,141C 'allow':10A 'attack':55B,115C 'beta':84C 'beta3':90C 'bit':123C 'brute':58B,118C 'brute-forc':57B,117C 'confirm':8A,34B,64B,95C,124C 'confirmact':131C 'cryptograph':45B,112C 'custom':31B,62B,92C,101C,138C 'cve':13A,16A 'email':33B,94C 'email-confirm':32B,93C 'endpoint':132C 'forc':59B,119C 'function':46B 'generat':30B,91C,146C 'guess':52B 'host':28B 'key':35B,49B,65B,96C,125C 'limit':130C 'log':67B,134C 'lts':4A,22B,79C 'magento':3A,19B,21B,78C 'magento-lt':2A,20B,77C 'md5':98C 'non':44B,111C 'non-cryptograph':43B,110C 'openmag':1A,23B,29B,76C 'packag':24B 'password':38B,105C 'password-reset':37B,104C 'pend':61B,137C 'php':25B 'pre':86C 'pre-releas':85C 'predict':5A,70B,140C 'recov':145C 'releas':87C 'reset':6A,39B,74B,106C,142C 'rough':121C 'self':27B 'self-host':26B 'state':147C 'takeov':12A 'token':9A,40B,75B,107C,143C 'unauthent':54B,114C 'uniqhash':113C 'uniqid':99C 'unrat':129C 'unrate-limit':128C 'via':126C 'weak':42B","nicknames":[],"mitigations":[],"who_affected":"Sites running OpenMage magento-lts before 20.18.2, or 21.0.0-beta pre-releases before 21.0.0-beta3, are exposed because customer confirmation and password-reset tokens are generated with weak functions. The confirmAction endpoint has no rate limit, so brute-forcing is practical. Stores on other platforms or on patched versions can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["critical","magento","magentolts","openmage","package","php","selfhosted"],"campaign_type":null,"search_a":"'-128047':15A,18A '-2026':14A,17A 'account':11A 'allow':10A 'confirm':8A 'cve':13A,16A 'lts':4A 'magento':3A 'magento-lt':2A 'openmag':1A 'predict':5A 'reset':6A 'takeov':12A 'token':9A","search_b":"'administr':72B 'attack':55B 'brute':58B 'brute-forc':57B 'confirm':34B,64B 'cryptograph':45B 'custom':31B,62B 'email':33B 'email-confirm':32B 'forc':59B 'function':46B 'generat':30B 'guess':52B 'host':28B 'key':35B,49B,65B 'log':67B 'lts':22B 'magento':19B,21B 'magento-lt':20B 'non':44B 'non-cryptograph':43B 'openmag':23B,29B 'packag':24B 'password':38B 'password-reset':37B 'pend':61B 'php':25B 'predict':70B 'reset':39B,74B 'self':27B 'self-host':26B 'token':40B,75B 'unauthent':54B 'weak':42B","search_c":"'20':122C '20.18.2':81C '21.0.0':83C,89C 'administr':103C,141C 'attack':115C 'beta':84C 'beta3':90C 'bit':123C 'brute':118C 'brute-forc':117C 'confirm':95C,124C 'confirmact':131C 'cryptograph':112C 'custom':92C,101C,138C 'email':94C 'email-confirm':93C 'endpoint':132C 'forc':119C 'generat':91C,146C 'key':96C,125C 'limit':130C 'log':134C 'lts':79C 'magento':78C 'magento-lt':77C 'md5':98C 'non':111C 'non-cryptograph':110C 'openmag':76C 'password':105C 'password-reset':104C 'pend':137C 'pre':86C 'pre-releas':85C 'predict':140C 'recov':145C 'releas':87C 'reset':106C,142C 'rough':121C 'state':147C 'token':107C,143C 'unauthent':114C 'uniqhash':113C 'uniqid':99C 'unrat':129C 'unrate-limit':128C 'via':126C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-10-26T19:59:19+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/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-128047","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-128047","severity":null,"published_at":"2026-11-13T10:18:10+00:00","modified_at":"2026-11-13T10:18:10+00:00","first_seen_at":"2026-11-13T10:47:32+00:00","fetched_at":"2026-11-13T10:47:32+00:00","note":null}],"documents":[{"id":145404,"url":"https://github.com/OpenMage/magento-lts/commit/4a8d91c692524de4a07e70af5367b6cb67a9516d","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":145405,"url":"https://github.com/OpenMage/magento-lts/commit/9f5a1c3cf63f5cf6ac9f90b041a97a474cea04c2","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":145406,"url":"https://github.com/OpenMage/magento-lts/security/advisories/GHSA-7j66-6mw7-rgfx","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-26T19:59:19+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":145407,"url":"https://www.vulncheck.com/advisories/openmage-magento-lts-before-20.18.2-account-takeover-via-predictable-confirmation-key","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"}