Представьте, что у вас есть защищенный эндпоинт /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 ранее никак не проверял .
Масштаб проблемы колоссален. Starlette еженедельно скачивают около 325 миллионов раз . Практически каждый крупный проект на Python, связанный с AI, так или иначе от него зависит. Под ударом оказались все версии Starlette от 0.8.3 до 1.0.1
.
Вот лишь некоторые из затронутых систем:
Вокруг официальной оценки этой уязвимости разгорелась нешуточная дискуссия. Разные организации дали ей совершенно разные уровни критичности:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N) предполагает лишь низкое воздействие на конфиденциальность и целостность, а также неизменную область действия 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Почему же эксперты не согласны с оценкой "Средняя"? На то есть три веские причины:
Исправление уже выпущено. Версия Starlette 1.0.1, увидевшая свет 22 мая 2026 года, закрывает уязвимость. Информация о патче отслеживается в рекомендациях GitHub (GHSA-86qp-5c8j-p5mr) и X41 (X41-2026-002) .
Разработчики реализовали два ключевых механизма защиты:
request.url scope["server"]). Это гарантирует, что request.url.path всегда будет соответствовать фактическому пути запроса Создатели FastAPI уже подтвердили эффективность исправления и настоятельно рекомендуют немедленно обновить starlette до версии 1.0.1 или выше .
Обновление пакета Starlette — это первый и самый важный, но не единственный шаг. Для надежной защиты рекомендуется комплексный подход:
pip install --upgrade starlettestarlette>=1.0.1 в ваших файлах requirements.txt, pyproject.toml, poetry.lock и им подобных. Проверьте все окружения командой pip list | grep starletterequest.url.path. Первопричина проблемы — несоответствие пути маршрутизации и request.url.path. Везде, где возможно, перепишите логику авторизации на использование request.scope["path"], который берется из исходных данных ASGI-соединения и не может быть отравлен через заголовок Host. X41 D-Sec вообще рекомендует по возможности внедрять аутентификацию, не основанную на пути запроса Если ваши серверы работают на Debian, уязвимость CVE-2026-48710 отслеживается в Debian Security Tracker с пометкой "важная" (important). Для затронутых версий дистрибутива уже доступны соответствующие пакеты с исправлениями. Просто примените корректирующую транзакцию apt из репозитория bullseye-security (или вашего аналога) и перезагрузите затронутые службы .
Comments
0 comments