В Starlette исправлена уязвимость BadHost, затрагивающая FastAPI-сервисы

В Starlette, ASGI-фреймворке Python и основе FastAPI, раскрыта уязвимость BadHost (CVE-2026-48710). При определенных реализациях middleware она позволяет обойти проверки доступа через специально сформированный HTTP-заголовок Host; исправление доступно в Starlette 1.0.1 и новее. Особое внимание стоит уделить LLM-шлюзам, MCP-серверам и другим сервисам на FastAPI/Starlette с кастомной авторизацией по пути.

Исследователи X41 D-Sec описали BadHost как уязвимость в проверке HTTP-заголовка Host в Starlette — легковесном ASGI-фреймворке для асинхронных Python-сервисов, на котором построен FastAPI. В GitHub Security Advisory проблема зарегистрирована как CVE-2026-48710/GHSA-86qp-5c8j-p5mr; исправление вошло в Starlette 1.0.1, выпущенную 21 мая 2026 года.

Суть ошибки в том, что Starlette восстанавливал request.url из значения Host и реального пути запроса, не отбрасывая некорректные символы в заголовке. Из-за этого request.url.path, который видит middleware, мог отличаться от маршрута, по которому Starlette фактически вызывает endpoint. Если авторизация или фильтрация внутренних путей построена на request.url или request.url.path, атакующий без учетных данных может обойти такую проверку; X41 также указывает на возможные SSRF и отдельные цепочки до удаленного выполнения кода.

Риск важен не только для обычных веб-сервисов: Starlette лежит в основе FastAPI, а FastAPI широко используется в Python-инфраструктуре для LLM. OSTIF и Secwest отдельно называют среди потенциально затронутых стеков vLLM, LiteLLM, Text Generation Inference, MCP-серверы, агентные обвязки, панели управления моделями и OpenAI-совместимые прокси — при условии, что конкретная установка использует уязвимый шаблон middleware или выставлена напрямую без корректной проверки Host.

Практические меры: обновить зависимость до Starlette 1.0.1 или новее, пересобрать контейнеры и virtualenv с закрепленными зависимостями, заменить проверки по request.url.path на данные из request.scope["path"], а также поставить перед ASGI-приложением прокси, который отвергает некорректные Host-заголовки. Для быстрой проверки доступен онлайн-сканер BadHost, а X41 опубликовала PoC, Semgrep-правила и CodeQL-запросы.

Источник: x41-dsec.de

Связь с редакцией