Архитектурный изъян популярного Python-фреймворка Starlette превращает любую проверку доступа в иллюзию.
Популярный Python-фреймворк Starlette, на котором построен FastAPI, был затронут уязвимостью, позволяющую обходить защиту приложений, подменяя заголовок Host. Проблема затрагивает версии Starlette от 0.8.3 до 1.0.0 и уже получила оценку.
Специалисты X41 D-Sec выяснили , что Starlette неправильно восстанавливает адрес запроса. Фреймворк собирает URL из пути запроса и содержимого заголовка Host, но не проверяет корректность значения Host. Злоумышленник может добавить в заголовок дополнительные символы и фактически подменить путь запроса в обработчике приложения.
Проблема возникает из-за того, что маршрутизация Starlette использует реальный HTTP-путь, а часть защитных механизмов ориентируется на request.url.path, который строится из уже изменённого URL. В результате приложение может считать, что пользователь обращается к разрешённому разделу, хотя фактически запрос идёт к закрытому ресурсу.
В опубликованном примере специалисты показали, как защита панели администратора обходится с помощью специально сформированного заголовка Host. Обычный запрос к «/admin» возвращал ошибку 403, но добавление символа «?» в Host позволяло получить доступ к закрытому разделу и вернуть секретные данные.
По данным X41 D-Sec, специалисты автоматически проверили открытые проекты и выявили множество промежуточных обработчиков, которые используют request.url, чтобы проверять доступ к отдельным путям. Подобная ошибка позволяет злоумышленнику не только обойти аутентификацию , но и провести атаки SSRF , а в отдельных случаях – даже удалённо выполнить код.
Уязвимость затрагивает все популярные ASGI-серверы, включая Uvicorn, Hypercorn, Daphne и Granian, если приложения полагаются на request.url.path.
Разработчики Starlette выпустили исправление в версии 1.0.1. Прежде чем установить обновление, специалисты рекомендуют использовать request.scope["path"] вместо request.url.path, а также проверять заголовки Host на уровне обратного прокси-сервера – например nginx или Apache HTTP Server.
Проблему обнаружили 27 января 2026 года в ходе стороннего аудита исходного кода . Исправление публично выпустили 21 мая. Уязвимость получила идентификатор CVE-2026-48710 , и уже зарегистрирована в GitHub под номером GHSA-86qp-5c8j-p5mr . Оценка CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N — 6.5 Medium
Популярный Python-фреймворк Starlette, на котором построен FastAPI, был затронут уязвимостью, позволяющую обходить защиту приложений, подменяя заголовок Host. Проблема затрагивает версии Starlette от 0.8.3 до 1.0.0 и уже получила оценку.
Специалисты X41 D-Sec выяснили , что Starlette неправильно восстанавливает адрес запроса. Фреймворк собирает URL из пути запроса и содержимого заголовка Host, но не проверяет корректность значения Host. Злоумышленник может добавить в заголовок дополнительные символы и фактически подменить путь запроса в обработчике приложения.
Проблема возникает из-за того, что маршрутизация Starlette использует реальный HTTP-путь, а часть защитных механизмов ориентируется на request.url.path, который строится из уже изменённого URL. В результате приложение может считать, что пользователь обращается к разрешённому разделу, хотя фактически запрос идёт к закрытому ресурсу.
В опубликованном примере специалисты показали, как защита панели администратора обходится с помощью специально сформированного заголовка Host. Обычный запрос к «/admin» возвращал ошибку 403, но добавление символа «?» в Host позволяло получить доступ к закрытому разделу и вернуть секретные данные.
По данным X41 D-Sec, специалисты автоматически проверили открытые проекты и выявили множество промежуточных обработчиков, которые используют request.url, чтобы проверять доступ к отдельным путям. Подобная ошибка позволяет злоумышленнику не только обойти аутентификацию , но и провести атаки SSRF , а в отдельных случаях – даже удалённо выполнить код.
Уязвимость затрагивает все популярные ASGI-серверы, включая Uvicorn, Hypercorn, Daphne и Granian, если приложения полагаются на request.url.path.
Разработчики Starlette выпустили исправление в версии 1.0.1. Прежде чем установить обновление, специалисты рекомендуют использовать request.scope["path"] вместо request.url.path, а также проверять заголовки Host на уровне обратного прокси-сервера – например nginx или Apache HTTP Server.
Проблему обнаружили 27 января 2026 года в ходе стороннего аудита исходного кода . Исправление публично выпустили 21 мая. Уязвимость получила идентификатор CVE-2026-48710 , и уже зарегистрирована в GitHub под номером GHSA-86qp-5c8j-p5mr . Оценка CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N — 6.5 Medium
- Источник новости
- www.securitylab.ru