Laravel выпустила критическое обновление безопасности для своего токен-драйвера аутентификации API. В MySQL и MariaDB неаутентифицированный злоумышленник мог войти в систему под видом существующего пользователя, не зная его API-токен. Християн Манасиев (Hristijan Manasijev) сообщил об этой уязвимости, а исправление вошло в версии Laravel 12.68.0 и 13.29.0.
Это критическое бюллетень безопасности (GHSA-f9x3-7vq9-cph6) с оценкой 9.2 по шкале CVSS (Common Vulnerability Scoring System). Вам следует обновиться как можно скорее.
Манасиев сообщил об обходе аутентификации в X:
Я обнаружил КРИТИЧЕСКИЙ обход аутентификации в Laravel 🚨 (9.2/10)
В MySQL/MariaDB токен-драйвер API в Laravel позволяет неаутентифицированному злоумышленнику войти в систему под учетной записью существующей жертвы.
Исправлено в 12.68.0 и 13.29.0.
Манасиев также сообщил о второй уязвимости, опубликованной в тот же день, которая позволяла запросам только для чтения удалять данные через ресурсы JSON:API.
#Что произошло
Ошибка кроется в Illuminate\Auth\TokenGuard — классе, лежащем в основе драйвера guard token . Ваше приложение использует его, если guard в config/auth.php выглядит следующим образом:
'guards' => [
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
Из рекомендаций по безопасности:
При определенных конфигурациях базы данных (MySQL/MariaDB) злоумышленник может передать специально сформированное нестроковое значение учетных данных, которое некорректно обрабатывается при поиске для аутентификации. Это приводит к тому, что выполняемый запрос совпадает с непредназначенной записью пользователя, вместо того чтобы завершить аутентификацию ошибкой, как ожидалось.
Злоумышленник, воспользовавшийся этим, мог захватить любой аккаунт на маршрутах, защищенных этим guard. Бюллетень безопасности затрагивает только драйвер token . Sanctum и Passport регистрируют собственные драйверы guard и в нем не указаны.
#Как это исправили
До исправления guard проверял лишь то, что токен из запроса не пустой, прежде чем передать его провайдеру пользователей. Исправление добавляет проверку is_string() как в user() , так и в validate() . Теперь guard отклоняет массивы и другие нестроковые значения до отправки запроса к базе данных:
if (is_string($token) && ! empty($token)) {
#Уничтожение данных через ресурсы JSON:API
Второй бюллетень, GHSA-5wcm-3v2w-8362, имеет оценку CVSS v3.1 6.5 (средняя). Она затрагивает ресурсы JSON:API, добавленные в Laravel 12.45. Из бюллетеня:
При определенных условиях запрос к эндпоинту только для чтения может быть сформирован так, чтобы инициировать деструктивную операцию с базой данных в связанной таблице, а не просто получить данные.
Пользователь только с правами чтения мог очистить связанную таблицу. Исправление меняет то, как ресурсы JSON:API загружают связи, запрошенные в параметрах включения.
#Затронутые версии
| Уязвимость | Уровень опасности | Затронутые версии | Исправлено в |
|---|---|---|---|
| Обход аутентификации Token guard | Критический (9.2) | Ниже 12.68.0, ниже 13.29.0 | 12.68.0, 13.29.0 |
| Уничтожение данных через JSON:API | Средний (6.5) | От 12.45.0 до 12.68.0, ниже 13.27.0 | 12.68.0, 13.27.0 |
Laravel 12.68.0 и 13.29.0 были выпущены 25 августа 2026 года, поэтому приложения, обновленные после этой даты, уже содержат оба исправления. В бюллетене по обходу аутентификации все версии ниже 12.68.0 указаны как уязвимые, а патчи выпущены только для ветки 12.x и 13.x.
#Что вам нужно сделать
- Обновите
laravel/frameworkдо версии 12.68.0, 13.29.0 или выше с помощьюcomposer update laravel/framework - Проверьте
config/auth.phpна наличие guard, использующих драйверtoken, и сделайте такие приложения приоритетными для обновления, если они работают на MySQL или МарияDB - Запустите
composer audit, чтобы сравнить установленные пакеты с опубликованными бюллетенями безопасности
Оба бюллетеня доступны на странице безопасности laravel/framework.
Комментарии (0)
Пока нет комментариев — будьте первым.