Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 27 жовтня 2026

Критична вразливість у TokenGuard: обхід автентифікації в Laravel

Laravel опублікував критичне попередження GHSA-f9x3-7vq9-cph6 (CVE-2026-114509, CVSS v4.0 9.2). Вбудований TokenGuard на MySQL і MariaDB дозволяв неавтентифікованому зловмиснику увійти як будь-який наявний користувач, не знаючи його API-токена. Того ж дня вийшло друге попередження, про JSON:API Resources. Обидві вразливості знайшов Христіян Манасієв (Hristijan Manasijev).

Найважливіше одразу: виправлення є в Laravel 13.29.0 і 12.68.0, які вийшли ще 25 серпня. Якщо ви оновлювали фреймворк після цієї дати, ви вже захищені. Попередження просто опублікували пізніше, щоб дати час оновитися.

Хто вразливий

Йдеться про Illuminate\Auth\TokenGuard - найпростіший API guard у Laravel, який шукає користувача за значенням стовпця api_token. Ваш застосунок його використовує, якщо в config/auth.php є guard на кшталт такого:

'guards' => [
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

Швидко перевірити всі проєкти можна так:

grep -rn "'driver' => 'token'" config/
composer show laravel/framework | grep versions

Нові застосунки такий guard зазвичай не використовують, але він досі живе в старих і внутрішніх API, які колись збудували "на швидку руку" і відтоді не чіпали. Саме їх варто перевірити першими, особливо якщо база - MySQL чи MariaDB.

Sanctum і Passport реєструють власні драйвери guard, і в попередження вони не входять. Як зазначає Laravel News, уражений лише драйвер token.

Наслідки, за словами попередження, - захоплення будь-якого облікового запису на маршрутах, захищених цим guard. Без жодного токена.

Що було не так і як це виправили

Попередження описує механізм стримано: зловмисник передає облікові дані не рядком, а значенням іншого типу, guard обробляє його неправильно, і на MySQL/MariaDB запит до бази знаходить не того користувача замість того, щоб відмовити в автентифікації.

До виправлення guard перевіряв лише те, що токен не порожній. Фікс додає перевірку типу в обидва місця, де токен потрапляє до провайдера користувачів, - у user() і validate():

// user()
if (is_string($token) && ! empty($token)) {
    $user = $this->provider->retrieveByCredentials([
        $this->storageKey => $this->hash ? hash('sha256', $token) : $token,
    ]);
}

// validate()
if (! is_string($credentials[$this->inputKey] ?? null) || empty($credentials[$this->inputKey])) {
    return false;
}

Тести в тому самому коміті перевіряють, що з масивом замість рядка guard навіть не звертається до провайдера. Урок, корисний і поза цим випадком: дані з HTTP-запиту не обов'язково рядок, і порівнювати їх з базою без перевірки типу небезпечно.

Друга вразливість: JSON:API Resources

GHSA-5wcm-3v2w-8362 (CVE-2026-114508) має оцінку CVSS v3.1 6.5. Вона стосується JSON:API Resources, які з'явилися в Laravel 12.45 і стали частиною Laravel 13. Помилка - в обробці зв'язків, які клієнт просить включити у відповідь: за певних умов запит до ендпоінта лише для читання міг запустити руйнівну операцію над пов'язаною таблицею, аж до її повного очищення. Тобто користувач із правом лише на читання міг безповоротно знищити дані.

Вразливі версії 12.45.0-12.67.x і 13.x до 13.27.0. Виправлення змінює те, як JSON:API-ресурси завантажують запитані зв'язки, і вийшло в 12.68.0 та 13.27.0.

Що зробити

  • Оновіть фреймворк: мінімум 13.29.0 або 12.68.0, а краще - до актуальної 13.x (на момент написання це 13.38.0):
composer update laravel/framework
composer audit
  • composer audit порівнює встановлені пакети з опублікованими попередженнями. Якщо його ще немає у вашому CI, це гарний привід додати.
  • Перевірте config/auth.php у всіх проєктах, включно з внутрішніми сервісами й адмінками. Пріоритет - ті, що працюють на MySQL або MariaDB.
  • Виправлення TokenGuard випущені лише для гілок 12.x і 13.x. Якщо проєкт на Laravel 11 чи старішому і використовує драйвер token, оновлення фреймворку - єдиний офіційний шлях. Доки ви його плануєте, варто подумати про перехід цього API на Sanctum.
  • Якщо використовуєте JSON:API Resources, перегляньте логи на предмет несподіваних видалень у пов'язаних таблицях за період, коли працювала вразлива версія.

Обидві вразливості закриті вже два місяці, тож для тих, хто регулярно оновлює залежності, ця новина - нагадування, а не тривога. Для решти - привід зробити composer update сьогодні.

17

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Новини 27 жовтня 2026

Filament v5.11.0: поля й віджети на React, Vue і Svelte та жорсткіший захист Livewire

Filament v5.11.0 дозволяє писати власні поля форм, компоненти схем і віджети на React, Vue, Svelte або чистому JavaScript. Паралельно v5.11.0 і v4.16.0 закривають для клієнта внутрішні Livewire-методи та стан і додають опційні ліміти для репітерів і пагінації таблиць.

2
Новини 27 жовтня 2026

Livewire 4.4.8 закриває обхід #[Authorize], а NativePHP Mobile - сім вразливостей

Livewire 4.4.8 виправляє GHSA-mhf7-xp6r-6qrc (CVSS 6.5): атрибут #[Authorize] можна було обійти й виконати дію над чужим записом. Того ж тижня NativePHP опублікувала сім попереджень для NativePHP for Mobile - виправлення в nativephp/mobile 4.6.1 і 3.3.11, але до користувачів вони дійдуть лише з новою збіркою застосунку.

1

Вакансії за темою

Middle Backend Engineer PHP/Laravel

Розробка бекенду для нової платформи запису й редагування відео з AI: REST API для керування контентом (S3-завантаження, метадані, мініатюри, планування), оркестрація задач обробки відео на AI-воркерах RunPod, інтеграції з платежами, аналітикою та AI-сервісами, WebSocket-синхронізація з клієнтами та фонові черги. Потрібен досвід із бекенд-фреймворками, проєктуванням баз даних, автентифікацією й безпекою API, роботою з вебхуками та Docker, Git і CI/CD.

Senior/Middle PHP Developer

Підтримка та розвиток великих веб-сайтів компанії (понад 1 млн відвідувань на місяць) на Laravel та OctoberCMS, інтеграція з внутрішніми системами та платіжними шлюзами (Приват24, Portmone, EasyPay, LiqPay), оптимізація продуктивності та робота з великим legacy-кодом без ризику для продакшену. Потрібен досвід PHP від 4 років, впевнена робота з Laravel і OctoberCMS, знання HTML5, CSS3 та JavaScript, вища освіта.

SoftHouseGroup Нова
2 дні тому

PHP Software Engineer

Розробник буде частиною full-stack команди, яка розвиває велику складну систему у страховому домені з багатьма модулями та інтеграціями з платіжними провайдерами. Щодня потрібні розробка нових модулів, підтримка існуючих, виправлення багів та перевірка коду, згенерованого AI. Ключові вимоги: понад 4 роки досвіду PHP, Laravel або Yii2, знання ООП і патернів проєктування, MySQL, REST API, фронтенд (HTML, CSS, JavaScript, jQuery, Vue.js), Git і англійська на рівні Pre-Intermediate для читання.

Пакети за темою

Kalimera

welldigit/kalimera

Interactive installer that scaffolds Laravel applications the Well Digit way.

v1.0.0 15

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,269 v2.5.0 13 26