{"id":"CVE-2026-127088","kind":"vulnerability","aliases":["CVE-2026-127088"],"related":[],"title":"2FAuth: forged Host header lets attackers take over accounts via reset links","description":"2FAuth before 9.0.1 contains a weak password recovery vulnerability that allows unauthenticated attackers to poison reset links by forging the HTTP Host header. Attackers can request password or WebAuthn recovery emails with an attacker-controlled host, capture the victim's token, and take over accounts exposing stored TOTP/HOTP secrets.","summary":"2FAuth is a self-hosted two-factor authentication manager. Before version 9.0.1, a forged HTTP Host header in password recovery requests makes reset emails point at an attacker-controlled host, so the attacker captures the victim's token and gains access to stored TOTP/HOTP secrets.","severity":"high","cvss":8.6,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["2fauth","other","self-hosted","totp"],"not_affected_if":["version-9.0.1-or-later"],"how_to_check":"- Check the installed 2FAuth version and confirm it is `9.0.1` or later.","fix":"- 2FAuth: upgrade to `9.0.1` or later.","status":"open","published_at":"2026-11-13T10:18:05+00:00","first_seen_at":"2026-11-13T10:47:30+00:00","triaged_at":"2026-11-13T10:50:40+00:00","updated_at":"2026-11-13T10:50:40+00:00","category":"other","confidence":0.7,"triage":{"at":"2026-11-13T10:50:40Z","model":"claude-haiku-5-5","output":{"fix":"- 2FAuth: upgrade to `9.0.1` or later.","reach":"internet","title":"2FAuth: forged Host header lets attackers take over accounts via reset links","impact":"high","summary":"2FAuth is a self-hosted two-factor authentication manager. Before version 9.0.1, a forged HTTP Host header in password recovery requests makes reset emails point at an attacker-controlled host, so the attacker captures the victim's token and gains access to stored TOTP/HOTP secrets.","audience":"businesses","category":"other","nicknames":[],"who_cares":["2fauth","self-hosted","totp"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Attacker takes over accounts and reads stored TOTP/HOTP secrets","analyst_note":"Confirm the affected version range and mitigation details from the vendor advisory and NVD entry; the sources do not state a user-interaction requirement or a configuration-specific trigger.","how_to_check":"- Check the installed 2FAuth version and confirm it is `9.0.1` or later.\n- unknown","plain_action":"","product_name":"","needs_analyst":true,"not_affected_if":["version-9.0.1-or-later"],"who_is_affected":"Self-hosted 2FAuth instances running a version before `9.0.1` that accept password or WebAuthn recovery requests are exposed. The sources do not say whether managed or default configurations differ, so treat any running instance below `9.0.1` as affected.","user_interaction":"yes","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000742,"input_tokens":4644,"output_tokens":555,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-127088':15A,18A '-2026':14A,17A '2fauth':1A,19B,25B,73C '9.0.1':38B,75C 'access':68B 'account':9A,118C 'allow':83C 'attack':6A,55B,60B,85C,96C,107C 'attacker-control':54B,106C 'authent':34B 'captur':61B,110C 'contain':76C 'control':56B,108C 'cve':13A,16A 'email':50B,103C 'expos':119C 'factor':33B 'forg':2A,40B,91C 'gain':67B 'header':4A,43B,95C 'host':3A,23B,30B,42B,57B,94C,109C 'http':41B,93C 'let':5A 'link':12A,89C 'make':48B 'manag':35B 'password':45B,79C,99C 'point':51B 'poison':87C 'recoveri':46B,80C,102C 'request':47B,98C 'reset':11A,49B,88C 'secret':72B,122C 'self':22B,29B 'self-host':21B,28B 'store':70B,120C 'take':7A,116C 'token':65B,114C 'totp':24B 'totp/hotp':71B,121C 'two':32B 'two-factor':31B 'unauthent':84C 'version':37B 'via':10A 'victim':63B,112C 'vulner':81C 'weak':78C 'webauthn':101C","nicknames":[],"mitigations":[],"who_affected":"Self-hosted 2FAuth instances running a version before `9.0.1` that accept password or WebAuthn recovery requests are exposed. The sources do not say whether managed or default configurations differ, so treat any running instance below `9.0.1` as affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["2fauth","high","other","selfhosted","totp"],"campaign_type":null,"search_a":"'-127088':15A,18A '-2026':14A,17A '2fauth':1A 'account':9A 'attack':6A 'cve':13A,16A 'forg':2A 'header':4A 'host':3A 'let':5A 'link':12A 'reset':11A 'take':7A 'via':10A","search_b":"'2fauth':19B,25B '9.0.1':38B 'access':68B 'attack':55B,60B 'attacker-control':54B 'authent':34B 'captur':61B 'control':56B 'email':50B 'factor':33B 'forg':40B 'gain':67B 'header':43B 'host':23B,30B,42B,57B 'http':41B 'make':48B 'manag':35B 'password':45B 'point':51B 'recoveri':46B 'request':47B 'reset':49B 'secret':72B 'self':22B,29B 'self-host':21B,28B 'store':70B 'token':65B 'totp':24B 'totp/hotp':71B 'two':32B 'two-factor':31B 'version':37B 'victim':63B","search_c":"'2fauth':73C '9.0.1':75C 'account':118C 'allow':83C 'attack':85C,96C,107C 'attacker-control':106C 'captur':110C 'contain':76C 'control':108C 'email':103C 'expos':119C 'forg':91C 'header':95C 'host':94C,109C 'http':93C 'link':89C 'password':79C,99C 'poison':87C 'recoveri':80C,102C 'request':98C 'reset':88C 'secret':122C 'store':120C 'take':116C 'token':114C 'totp/hotp':121C 'unauthent':84C 'victim':112C 'vulner':81C 'weak':78C 'webauthn':101C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-02T08:27:15+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/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-127088","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-127088","severity":null,"published_at":"2026-11-13T10:18:05+00:00","modified_at":"2026-11-13T10:18:05+00:00","first_seen_at":"2026-11-13T10:47:30+00:00","fetched_at":"2026-11-13T10:47:30+00:00","note":null}],"documents":[{"id":145310,"url":"https://github.com/Bubka/2FAuth/commit/35ce085b69f9f5044dfb94017c3f27c1dc2668f3","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":145311,"url":"https://github.com/Bubka/2FAuth/releases/tag/v9.0.1","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":145312,"url":"https://github.com/Bubka/2FAuth/security/advisories/GHSA-v9qw-r94g-95qv","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-02T08:27:15+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":145313,"url":"https://www.vulncheck.com/advisories/2fauth-before-9.0.1-password-reset-poisoning-via-host-header","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"}