{"id":"CVE-2026-113703","kind":"vulnerability","aliases":["CVE-2026-113703"],"related":[],"title":"SuggestArr: spoofed X-Forwarded-For grants unauthenticated admin access","description":"SuggestArr before 3.0.0 contains an authentication bypass vulnerability in its local_bypass authentication mode where enforce_authentication() in api_service/auth/middleware.py trusts the client-controlled request.remote_addr value, which is derived from the spoofable X-Forwarded-For header due to ProxyFix(x_for=1) configuration in api_service/app.py. Attackers can send a request with X-Forwarded-For set to a trusted CIDR address such as 127.0.0.1 to be granted an unauthenticated admin session via _load_bypass_user_context(), gaining full administrative access to endpoints like /api/users and /api/jobs without providing any credentials.","summary":"SuggestArr versions before 3.0.0 trust the X-Forwarded-For header when local_bypass authentication is on, so a request claiming to come from 127.0.0.1 is treated as a local admin. An attacker with network access gets full admin on endpoints such as /api/users and /api/jobs without any credentials.","severity":"critical","cvss":9.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["docker","package","self-hosted","suggestarr"],"not_affected_if":["local_bypass-disabled","not-reachable-from-untrusted-network","version-3.0.0-or-later"],"how_to_check":"Check whether the SuggestArr version is below 3.0.0 and whether local_bypass authentication mode is enabled in its settings.\nFrom outside the host, send a request to /api/users with header X-Forwarded-For: 127.0.0.1 and see whether it returns data without a login.","fix":"Upgrade SuggestArr to 3.0.0 or later.\nUntil then, turn off local_bypass authentication or block external access to the SuggestArr port.","status":"open","published_at":"2026-10-20T16:17:13+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","triaged_at":"2026-10-23T22:39:28+00:00","updated_at":"2026-10-23T22:39:28+00:00","category":"package","confidence":0.85,"triage":{"at":"2026-10-23T22:39:28Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade SuggestArr to 3.0.0 or later.\nUntil then, turn off local_bypass authentication or block external access to the SuggestArr port.","reach":"network","title":"SuggestArr: spoofed X-Forwarded-For grants unauthenticated admin access","impact":"high","summary":"SuggestArr versions before 3.0.0 trust the X-Forwarded-For header when local_bypass authentication is on, so a request claiming to come from 127.0.0.1 is treated as a local admin. An attacker with network access gets full admin on endpoints such as /api/users and /api/jobs without any credentials.","category":"package","who_cares":["suggestarr","docker","self-hosted"],"confidence":0.85,"needs_auth":"no","worst_case":"Attacker gets unauthenticated admin access, reading and changing users and jobs.","analyst_note":"","how_to_check":"Check whether the SuggestArr version is below 3.0.0 and whether local_bypass authentication mode is enabled in its settings.\nFrom outside the host, send a request to /api/users with header X-Forwarded-For: 127.0.0.1 and see whether it returns data without a login.","needs_analyst":false,"not_affected_if":["version-3.0.0-or-later","local_bypass-disabled","not-reachable-from-untrusted-network"],"user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"critical"},"cost_usd":0.000556,"input_tokens":3057,"output_tokens":500,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-113703':13A,16A '-2026':12A,15A '/api/jobs':68B,161C '/api/users':66B,159C '1':116C '127.0.0.1':47B,139C '3.0.0':26B,74C 'access':10A,58B,155C 'addr':98C 'address':136C 'admin':9A,53B,61B,145C 'administr':154C 'api':90C,119C 'attack':55B,121C 'authent':37B,77C,84C,88C 'bypass':36B,78C,83C,149C 'cidr':135C 'claim':43B 'client':95C 'client-control':94C 'come':45B 'configur':117C 'contain':75C 'context':151C 'control':96C 'credenti':71B,165C 'cve':11A,14A 'deriv':102C 'docker':17B 'due':111C 'endpoint':63B,157C 'enforc':87C 'forward':5A,31B,108C,129C 'full':60B,153C 'gain':152C 'get':59B 'grant':7A,142C 'header':33B,110C 'host':21B 'like':158C 'load':148C 'local':35B,52B,82C 'mode':85C 'network':57B 'packag':18B 'provid':163C 'proxyfix':113C 'request':42B,125C 'request.remote':97C 'self':20B 'self-host':19B 'send':123C 'service/app.py':120C 'service/auth/middleware.py':91C 'session':146C 'set':131C 'spoof':2A 'spoofabl':105C 'suggestarr':1A,22B,23B,72C 'treat':49B 'trust':27B,92C,134C 'unauthent':8A,144C 'user':150C 'valu':99C 'version':24B 'via':147C 'vulner':79C 'without':69B,162C 'x':4A,30B,107C,114C,128C 'x-forwarded-for':3A,29B,106C,127C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T16:17:13+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/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-113703","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113703","severity":null,"published_at":"2026-10-20T16:17:13+00:00","modified_at":"2026-10-20T20:11:29+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","fetched_at":"2026-10-23T22:28:58+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"}