{"id":"CVE-2026-48710","kind":"vulnerability","aliases":["CVE-2026-48710"],"related":[],"title":"Starlette is a lightweight ASGI framework/toolkit","description":"Kludex Starlette contains a HTTP request/response smuggling vulnerability that could allow attackers to inject paths into the host part, prepending the actual path leading to issues such as authentication bypass when the authentication depends on the reconstructed URL’s path. This vulnerability could be chaned with CVE-2026-42271.\n\nCISA required action: Apply mitigations in accordance with vendor instructions, ensuring compliance with CISA’s BOD 26-04 Prioritizing Security Updates Based on Risk (see URL in Notes) guidance and CISA’s “Forensics Triage Requirements” (see URL in Notes). Follow applicable BOD 26-04 guidance for cloud services or discontinue use of the product if mitigations are unavailable. Stakeholders are responsible for evaluating each asset's internet exposure and ensuring adherence to BOD 26-04 patching guidelines.","summary":"Starlette builds the request URL from the Host header, so an attacker can inject path text into the host part and prepend it to the real path. If authentication checks the reconstructed URL path, the attacker can bypass it; the sources report this is chained with CVE-2026-42271 in LiteLLM for unauthenticated remote code execution.","severity":"high","cvss":6.5,"epss":null,"exploited":true,"exploited_at":"2026-09-02T00:00:00+00:00","products":[{"name":"Kludex Starlette","fixed":[],"affected":"","ecosystem":"vendor"},{"name":"starlette","fixed":["1.0.1"],"affected":"<= 1.0.0","ecosystem":"pypi"},{"name":"encode starlette","fixed":["1.0.1"],"affected":">= 0.8.3, < 1.0.1","ecosystem":"vendor"},{"name":"redhat ai inference server","fixed":[],"affected":">= 3.3.0, <= 3.3.5","ecosystem":"vendor"},{"name":"redhat ansible automation platform","fixed":[],"affected":"= 2.6","ecosystem":"vendor"},{"name":"redhat ansible automation platform","fixed":[],"affected":"= 2.7","ecosystem":"vendor"},{"name":"redhat migration toolkit for applications","fixed":["8.2.0"],"affected":"< 8.2.0","ecosystem":"vendor"},{"name":"redhat openshift ai","fixed":["3.3.5"],"affected":">= 3.3, < 3.3.5","ecosystem":"vendor"},{"name":"redhat openshift ai","fixed":["3.4.2"],"affected":">= 3.4, < 3.4.2","ecosystem":"vendor"},{"name":"redhat openshift lightspeed","fixed":[],"affected":"","ecosystem":"vendor"},{"name":"redhat satellite","fixed":[],"affected":"= 6.17","ecosystem":"vendor"},{"name":"redhat satellite","fixed":[],"affected":"= 6.18","ecosystem":"vendor"},{"name":"redhat satellite","fixed":[],"affected":"= 6.19","ecosystem":"vendor"},{"name":"redhat enterprise linux ai","fixed":[],"affected":"= 3.0","ecosystem":"vendor"}],"ecosystems":["pypi","vendor"],"tags":["exploited","fastapi","litellm","llm-gateway","mcp","package","python","self-hosted","starlette","vllm"],"not_affected_if":["auth-not-based-on-url-path","static-export"],"how_to_check":"Check the installed starlette version with pip show starlette; versions 1.0.0 and earlier are affected.","fix":"Upgrade starlette to 1.0.1 or later.\nIf LiteLLM or another gateway uses Starlette, also apply that product's fix for CVE-2026-42271.","status":"resolved","published_at":"2026-05-26T22:16:44+00:00","first_seen_at":"2026-10-23T19:11:51+00:00","triaged_at":"2026-10-23T22:41:55+00:00","updated_at":"2026-10-23T23:44:52+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-23T22:41:55Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade starlette to 1.0.1 or later.\nIf LiteLLM or another gateway uses Starlette, also apply that product's fix for CVE-2026-42271.","reach":"internet","title":"Starlette: Host header injection lets attackers bypass path-based authentication","impact":"high","summary":"Starlette builds the request URL from the Host header, so an attacker can inject path text into the host part and prepend it to the real path. If authentication checks the reconstructed URL path, the attacker can bypass it; the sources report this is chained with CVE-2026-42271 in LiteLLM for unauthenticated remote code execution.","category":"package","nicknames":["BadHost"],"who_cares":["python","starlette","fastapi","litellm","vllm","mcp","self-hosted"],"confidence":0.8,"needs_auth":"unknown","worst_case":"Attacker bypasses path-based authentication and may reach unauthenticated remote code execution when chained.","analyst_note":"Confirm the exact trigger conditions and whether auth-dependent apps are exposed; read the X41 BadHost write-up and GHSA-86qp-5c8j-p5mr for detection steps.","how_to_check":"Check the installed starlette version with pip show starlette; versions 1.0.0 and earlier are affected.\nunknown","needs_analyst":true,"not_affected_if":["static-export","auth-not-based-on-url-path"],"user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000614,"input_tokens":3505,"output_tokens":527,"severity_before":"high"},"analyst_status":"done","analyst_note":"Find the Starlette GHSA or release notes for affected and fixed versions and a detection method, and confirm the CVE-2026-42271 chain, via the Starlette GitHub security advisories or NVD for CVE-2026-48710.","search":"'-04':191C,217C,248C '-2026':8A,11A,116B,172C '-42271':117B,173C '-48710':9A,12A '26':190C,216C,247C 'accord':180C 'action':176C 'actual':146C 'adher':244C 'ai':20A,38A,41A,54A 'allow':135C 'ansible':24A,28A 'appli':177C 'applic':214C 'applications':35A 'asgi':5A 'asset':238C 'attack':80B,104B,136C 'authent':97B,153C,157C 'automation':25A,29A 'badhost':13A 'base':195C 'bod':189C,215C,246C 'build':70B 'bypass':106B,154C 'chain':113B 'chane':169C 'check':98B 'cisa':174C,187C,204C 'cloud':220C 'code':123B 'complianc':185C 'contain':127C 'could':134C,167C 'cve':7A,10A,115B,171C 'depend':158C 'discontinu':223C 'encode':17A 'ensur':184C,243C 'enterprise':52A 'evalu':236C 'execut':124B 'exploit':55B 'exposur':241C 'fastapi':56B 'follow':213C 'for':34A 'forens':206C 'framework/toolkit':6A 'gateway':60B 'guidanc':202C,218C 'guidelin':250C 'header':77B 'host':66B,76B,87B,142C 'http':129C 'inference':21A 'inject':82B,138C 'instruct':183C 'internet':240C 'issu':150C 'kludex':14A,125C 'lead':148C 'lightspeed':44A 'lightweight':4A 'linux':53A 'litellm':57B,119B 'llm':59B 'llm-gateway':58B 'mcp':61B 'migration':32A 'mitig':178C,229C 'note':201C,212C 'openshift':37A,40A,43A 'packag':62B 'part':88B,143C 'patch':249C 'path':83B,95B,102B,139C,147C,164C 'platform':26A,30A 'prepend':90B,144C 'priorit':192C 'product':227C 'python':63B 'real':94B 'reconstruct':100B,161C 'redhat':19A,23A,27A,31A,36A,39A,42A,45A,47A,49A,51A 'remot':122B 'report':110B 'request':72B 'request/response':130C 'requir':175C,208C 'respons':234C 'risk':197C 'satellite':46A,48A,50A 'secur':193C 'see':198C,209C 'self':65B 'self-host':64B 'server':22A 'servic':221C 'smuggl':131C 'sourc':109B 'stakehold':232C 'starlett':1A,67B,69B,126C 'starlette':15A,16A,18A 'text':84B 'toolkit':33A 'triag':207C 'unauthent':121B 'unavail':231C 'updat':194C 'url':73B,101B,162C,199C,210C 'use':224C 'vendor':182C 'vllm':68B 'vulner':132C,166C","nicknames":["BadHost"],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-05-26T22:16:44+00:00","kev":{"dateAdded":"2026-09-02","dueDate":"2026-09-16","requiredAction":"Apply mitigations in accordance with vendor instructions, ensuring compliance with CISA’s BOD 26-04 Prioritizing Security Updates Based on Risk (see URL in Notes) guidance and CISA’s “Forensics Triage Requirements” (see URL in Notes). Follow applicable BOD 26-04 guidance for cloud services or discontinue use of the product if mitigations are unavailable. Stakeholders are responsible for evaluating each asset's internet exposure and ensuring adherence to BOD 26-04 patching guidelines.","knownRansomwareCampaignUse":"Unknown"},"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","cvss_by":"security-advisories@github.com","poc_count":1,"sources":[{"source":"kev","external_id":"CVE-2026-48710","url":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog?search_api_fulltext=CVE-2026-48710","severity":null,"published_at":"2026-09-02T00:00:00+00:00","modified_at":null,"first_seen_at":"2026-10-23T19:11:51+00:00","fetched_at":"2026-10-25T16:39:44+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-48710:125","url":null,"severity":null,"published_at":"2026-10-23T21:40:25+00:00","modified_at":"2026-10-23T21:40:25+00:00","first_seen_at":"2026-10-23T21:40:25+00:00","fetched_at":"2026-10-23T21:40:25+00:00","note":"Read GHSA-86qp-5c8j-p5mr, X41/secwest write-up, OSTIF, Horizon3. Fixed in starlette 1.0.1; chain with LiteLLM CVE-2026-42271 confirmed by Horizon3 (unauth RCE). Severity kept high: KEV-listed, public PoC, downstream impact far above CVSS 6.5. No X posts found for BadHost. Note: secwest says affected >=0.8.3; GHSA says <=1.0.0."},{"source":"nvd","external_id":"CVE-2026-48710","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-48710","severity":null,"published_at":"2026-05-26T22:16:44+00:00","modified_at":"2026-10-01T18:17:18+00:00","first_seen_at":"2026-10-23T23:44:52+00:00","fetched_at":"2026-10-23T23:44:52+00:00","note":null}],"documents":[{"id":1187,"url":"https://github.com/advisories/GHSA-86QP-5C8J-P5MR","title":"GHSA-86qp-5c8j-p5mr Starlette Host header validation","kind":"advisory","source":"analyst","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null},{"id":1189,"url":"https://www.secwest.net/starlette","title":"BadHost: X41 write-up with PoC, detection, timeline","kind":"blog","source":"analyst","text":null,"published_at":null,"relation":"poc","confidence":null,"note":null},{"id":1190,"url":"https://ostif.org/disclosing-the-badhost-vulnerability-in-starlette/","title":"OSTIF: Disclosing BadHost","kind":"blog","source":"analyst","text":null,"published_at":null,"relation":"mitigation","confidence":null,"note":null},{"id":1191,"url":"https://horizon3.ai/attack-research/vulnerabilities/cve-2026-42271-chained-with-cve-2026-48710/","title":"Horizon3: LiteLLM unauth RCE chaining CVE-2026-42271 + CVE-2026-48710","kind":"blog","source":"analyst","text":null,"published_at":null,"relation":"describes","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}