Статус материала

Архивный материал перенесён без переписывания. Цифры и утверждения требуют актуальной сверки по ссылкам из исходной публикации.

Фундамент Python для AI-агентов вчера утёк через один символ в HTTP-заголовке.

Немецкая X41 D-Sec в аудите vLLM по гранту OSTIF нашла в Starlette уязвимость BadHost, CVE-2026-48710. Starlette это микропакет, который скачивают 325 миллионов раз в неделю.

На нём держится FastAPI, vLLM, LiteLLM, большинство MCP-серверов и любые обвязки агентов с проверкой прав по URL-пути.

Атака простая: подменяешь Host в заголовке, Starlette склеивает Host и path заново без валидации, проверка прав на пути пропускает в админский периметр. Один символ. Без эксплойта.

Патч вышел 21 мая, версия Starlette 1.0.1. Публичное раскрытие 22 мая. Сейчас открыт сканер на badhost.org. Что делать сегодня, если в команде есть самописный MCP или agent-шлюз:

pip show starlette, увидеть текущую версию. Меньше 1.0.1? обновить. Перед ASGI поставить Nginx или Caddy с явной проверкой Host. Перестать опираться на request.url.path в проверках прав. В FastAPI использовать только Depends и Security. Прогнать badhost.org-сканер по своим публичным эндпоинтам.

15 июня Anthropic вводит счётчик кредитов на программные режимы. Часть бизнесов решит уходить из управляемого окружения в самописный MCP, чтобы контролировать расход. Это нормальный ход. Но переезжать на стек, который сейчас в патч-марафоне, без аудита, это менять подписку на счёт за инциденты. Сначала аудит, потом миграция.

Источники и след

  1. 01 badhost.org Ссылка из исходной публикации
  2. 02 Оригинал в канале Under the Hood Происхождение / Telegram / сообщение 290