'BadHost': Один неверный символ открывает доступ к миллионам AI-агентов
Один неверный символ, добавленный в HTTP заголовок Host, позволяет неаутентифицированному злоумышленнику обойти все проверки авторизации на основе пути во фреймворке Starlette. В то время как официальный рейтинг CVSS v3.1 оценивает уязвимость как среднюю с 6.5 баллами, исследователи из X41 D Sec и Secwest утверждают...
ОпубликовалОтредактировано с помощью DeepSeek-V4-ProИзображения созданы с помощью GPT Image 1.5
Один неверный символ, добавленный в HTTP заголовок Host, позволяет неаутентифицированному злоумышленнику обойти все проверки авторизации на основе пути во фреймворке Starlette.
В то время как официальный рейтинг CVSS v3.1 оценивает уязвимость как среднюю с 6.5 баллами, исследователи из X41 D Sec и Secwest утверждают, что это сильно преуменьшает реальную опасность, предоставляя злоумышленнику...
Исправление выпущено в версии Starlette 1.0.1, которая проводит валидацию заголовка Host в соответствии со стандартами RFC и предотвращает подмену пути.
What is the CVE-2026-48710 "BadHost" vulnerability in the Starlette web framework, how does it allow attackers to bypass path-based authorizAn abstract representation of a single malicious character bypassing digital security, illustrating the BadHost vulnerability at the network boundary of AI infrastructure.
Промпт ИИ
Create a landscape editorial hero image for this Studio Global article: What is the CVE-2026-48710 "BadHost" vulnerability in the Starlette web framework, how does it allow attackers to bypass path-based authoriz. Article summary: ## Overview. Topic tags: general, general web, user generated. Reference image context from search candidates: Reference image 1: visual subject "A critical vulnerability tracked as **CVE-2026-48710** and nicknamed "BadHost" was disclosed in the **Starlette** ASGI framework, affecting all versions prior to **1.0.1**, sources" source context "Starlette Vulnerability Exposes AI Agent Endpoints | Let's Data Science" Reference image 2: visual subject "# Critical 'BadHost' Flaw in Starlette Exposes Millions of AI Agent Deployments to Auth Bypass. * CVE-2026-48710 ('BadHost') allows unauthenticated attackers to bypass path-based a" source context "Critical 'BadHost'
openai.com
В основе современной Python-инфраструктуры для искусственного интеллекта лежит незаметный, но критически важный компонент — ASGI-фреймворк Starlette. На днях в нем была раскрыта уязвимость под идентификатором CVE-2026-48710, получившая звучное имя "BadHost". Ее опасность заключается в том, что она позволяет злоумышленнику обойти практически любую защиту, основанную на проверке пути (URL), просто добавив один специально подобранный символ в HTTP-заголовок Host.
Studio Global AI
Продолжайте свое исследование
На этой странице есть ответ, подтвержденный источником, который вы можете продолжить внутри Studio Global.
Каков краткий ответ на вопрос «'BadHost': Один неверный символ открывает доступ к миллионам AI-агентов»?
Один неверный символ, добавленный в HTTP заголовок Host, позволяет неаутентифицированному злоумышленнику обойти все проверки авторизации на основе пути во фреймворке Starlette.
Какие ключевые моменты необходимо проверить в первую очередь?
Один неверный символ, добавленный в HTTP заголовок Host, позволяет неаутентифицированному злоумышленнику обойти все проверки авторизации на основе пути во фреймворке Starlette. В то время как официальный рейтинг CVSS v3.1 оценивает уязвимость как среднюю с 6.5 баллами, исследователи из X41 D Sec и Secwest утверждают, что это сильно преуменьшает реальную опасность, предоставляя злоумышленнику...
Что мне делать дальше на практике?
Исправление выпущено в версии Starlette 1.0.1, которая проводит валидацию заголовка Host в соответствии со стандартами RFC и предотвращает подмену пути.
Учитывая, что Starlette лежит в основе таких гигантов, как FastAPI, vLLM, LiteLLM и MCP-серверы (Model Context Protocol), последствия этой уязвимости затрагивают миллионы AI-агентов, API-серверов и сред выполнения моделей по всему миру.
Как работает атака BadHost?
Корень проблемы кроется в опасном несоответствии логики маршрутизации и авторизации внутри Starlette. Когда сервер получает HTTP-запрос, его маршрутизатор абсолютно верно определяет, к какому обработчику его направить, основываясь на исходной строке запроса. Но затем, когда в дело вступает промежуточное ПО (middleware) для проверки прав доступа, оно часто использует объект request.url. Starlette же восстанавливает этот URL заново, беря за основу заголовок Host, который полностью контролируется атакующим .
Представьте, что у вас есть защищенный эндпоинт /admin/secure. Злоумышленник отправляет POST-запрос на этот адрес, но в заголовке Host указывает не просто домен, а, например:
Host: legitimate.com/health?x=
Что происходит дальше? Маршрутизатор направляет запрос в /admin/secure. Но когда система авторизации проверяет request.url.path, она видит не /admin/secure, а /health. А поскольку эндпоинт /health часто используется для проверки работоспособности и открыт всем, защита молча пропускает злоумышленника. Ни пароль, ни токен, ни ключ API для этого не нужны .
Как подчеркнули в компании X41 D-Sec, обнаружившей уязвимость, для обмана сервера "достаточно вставить всего один символ в заголовок HTTP Host" . Речь идет о символах вроде /, ? или #, которые Starlette ранее никак не проверял .
Масштабы угрозы для AI-инфраструктуры
Масштаб проблемы колоссален. Starlette еженедельно скачивают около 325 миллионов раз . Практически каждый крупный проект на Python, связанный с AI, так или иначе от него зависит. Под ударом оказались все версии Starlette от 0.8.3 до 1.0.1 .
Вот лишь некоторые из затронутых систем:
FastAPI: Самый популярный современный фреймворк для создания API, на котором построены бесчисленные AI-сервисы и агенты .
vLLM: Высокопроизводительный движок для инференса больших языковых моделей (LLM), который используется в продакшене крупными AI-провайдерами для быстрой и эффективной работы моделей .
LiteLLM: Прокси-сервер и слой оркестрации, который управляет API-ключами, лимитами и доступом к десяткам различных LLM-провайдеров .
MCP-серверы (Model Context Protocol): Инфраструктурный слой, обеспечивающий AI-агентам доступ к различным инструментам и данным. Их компрометация может привести к утечке чувствительных токенов и контекста выполнения .
Спор об опасности: почему 6.5 баллов — это не «средняя»
Вокруг официальной оценки этой уязвимости разгорелась нешуточная дискуссия. Разные организации дали ей совершенно разные уровни критичности:
Официальный рейтинг NVD CVSS v3.1: 6.5 (Средняя). Этот вектор (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N) предполагает лишь низкое воздействие на конфиденциальность и целостность, а также неизменную область действия .
Рейтинг X41 D-Sec CVSS v4.0: 7.0 (Высокая). Вектор (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N) указывает на измененную ("Changed") область действия и высокое дополнительное влияние, что лучше отражает выход атаки за пределы одного компонента .
Характеристика Secwest: Критическая. Исследовательская компания прямо заявляет, что официальная оценка "существенно преуменьшает реальные последствия" .
Почему же эксперты не согласны с оценкой "Средняя"? На то есть три веские причины:
Нарушение границ безопасности. Рейтинг v3.1 предполагает, что атака происходит в рамках одного домена безопасности. BadHost же позволяет полностью пересечь границу доверия: внешний субъект без прав получает доступ к внутренним, защищенным эндпоинтам, работающим с "мозгами" AI — весами моделей, агентскими инструментами и пайплайнами данных. Это классический случай расширения области действия (Scope Changed), который и фиксирует вектор v4.0 .
Воздействие не «низкое», а «высокое». Оценка "Low" (низкое) предполагает, что раскрывается лишь ограниченный объем данных. В реальности успешная атака BadHost открывает доступ ко всему, что скрывается за уязвимым путем: хранимым учетным данным MCP-серверов, истории чатов, мастер-ключам оркестрации и потенциально к командам управления .
Ярлык «Средняя» замедляет установку патчей. Компании обычно в первую очередь исправляют "Высокие" и "Критические" уязвимости, оставляя "Средние" на следующее плановое техобслуживание. Учитывая тривиальность эксплуатации BadHost и огромную поверхность для атаки, такая задержка недопустима .
Лекарство есть: срочное обновление до Starlette 1.0.1
Исправление уже выпущено. Версия Starlette 1.0.1, увидевшая свет 22 мая 2026 года, закрывает уязвимость. Информация о патче отслеживается в рекомендациях GitHub (GHSA-86qp-5c8j-p5mr) и X41 (X41-2026-002) .
Разработчики реализовали два ключевых механизма защиты:
Валидация заголовка Host: Теперь его значение проверяется на соответствие грамматике, описанной в стандартах RFC 9112 §3.2 и RFC 3986 §3.2.2, перед тем как использовать для построения request.url.
Безопасный fallback: Если заголовок Host имеет неверный формат, Starlette игнорирует его и использует данные из реального серверного соединения (scope["server"]). Это гарантирует, что request.url.path всегда будет соответствовать фактическому пути запроса .
Создатели FastAPI уже подтвердили эффективность исправления и настоятельно рекомендуют немедленно обновить starlette до версии 1.0.1 или выше .
План действий для защиты ваших систем
Обновление пакета Starlette — это первый и самый важный, но не единственный шаг. Для надежной защиты рекомендуется комплексный подход:
Немедленно установите патч. Во всех виртуальных окружениях, контейнерах и пайплайнах развертывания, где используется AI-инфраструктура, выполните команду pip install --upgrade starlette и перезапустите все связанные сервисы .
Проведите аудит и зафиксируйте зависимости. Такие фреймворки, как FastAPI, могут автоматически не подтянуть нужную версию. Необходимо явно указать starlette>=1.0.1 в ваших файлах requirements.txt, pyproject.toml, poetry.lock и им подобных. Проверьте все окружения командой pip list | grep starlette.
Просканируйте весь AI-стек. Под угрозой любой Python-сервис, принимающий HTTP-трафик: самописные FastAPI-приложения, эндпоинты инференса LLM, панели управления моделями и прокси-серверы. Проведите полную инвентаризацию инфраструктуры .
Усильте защиту на уровне обратных прокси и WAF. Настройте nginx, Envoy, HAProxy, Cloudflare или AWS ALB на отбрасывание или очистку некорректных заголовков Host до того, как трафик достигнет Python-приложения. Это создаст эшелонированную защиту, которая заблокирует атаку, даже если патч на приложении по какой-то причине задерживается .
Откажитесь от проверок на основе request.url.path. Первопричина проблемы — несоответствие пути маршрутизации и request.url.path. Везде, где возможно, перепишите логику авторизации на использование request.scope["path"], который берется из исходных данных ASGI-соединения и не может быть отравлен через заголовок Host. X41 D-Sec вообще рекомендует по возможности внедрять аутентификацию, не основанную на пути запроса .
Проверьте системы на уязвимость. Для проверки серверов уже выпущен онлайн-сканер . В сочетании с тщательным пентестом на границах аутентификации это поможет выявить все незащищенные участки.
Особенности для пользователей Debian
Если ваши серверы работают на Debian, уязвимость CVE-2026-48710 отслеживается в Debian Security Tracker с пометкой "важная" (important). Для затронутых версий дистрибутива уже доступны соответствующие пакеты с исправлениями. Просто примените корректирующую транзакцию apt из репозитория bullseye-security (или вашего аналога) и перезагрузите затронутые службы .