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.