---
title: "Livewire 4.4.8 закриває обхід #[Authorize], а NativePHP Mobile - сім вразливостей"
url: https://laravelukraine.com/blog/livewire-448-zakrivaje-obxid-authorize-a-nativephp-mobile-sim-vrazlivostei
date: 2026-10-27
---

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

Livewire 4.4.8, що вийшов 21 жовтня, закриває вразливість [GHSA-mhf7-xp6r-6qrc](https://github.com/livewire/livewire/security/advisories/GHSA-mhf7-xp6r-6qrc): атрибут `#[Authorize]` можна було обійти, і користувач міг виконати захищену дію над записом, на який не має прав. Оцінка CVSS - 6.5, серйозність середня. Того ж тижня NativePHP опублікувала свої перші попередження безпеки - одразу сім для NativePHP for Mobile. Обидва випадки не критичні, але в обох є що зробити вже сьогодні.

### Що не так з #[Authorize] у Livewire

Атрибут `#[Authorize]` з'явився в Livewire 4.3 і швидко став зручною заміною ручному `$this->authorize()`: політику вказуєш над методом, а не першим рядком у ньому. Саме ця частина й виявилася вразливою. Попередження описує три проблеми:

- **Переставлені ключі параметрів дії.** `#[Authorize]` знаходив модель-параметр за ключем масиву, а сама дія отримувала параметри позиційно. Запит, що передає параметри об'єктом із переставленими цілими ключами (на кшталт `{"1": 2, "0": 1}`), проходив перевірку зі «своїм» записом, а дія отримувала інший.
- **Те саме для слухачів подій.** Методи з `#[On]` і `#[Authorize]`, що приймають модель, були вразливі так само - через виклик `__dispatch`.
- **Методи з `#[Json]` виконувалися до авторизації.** Відповідь приходила з кодом 403, але побічні ефекти, як-от записи в базу даних, уже відбулися.

Типовий вразливий метод виглядає цілком безневинно:

```php
use Livewire\Attributes\Authorize;

#[Authorize('delete', 'comment')]
public function deleteComment(Comment $comment)
{
    $comment->delete();
}
```

До 4.4.8 у такому методі користувач міг видалити чужий коментар.

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

- Livewire від 4.3.0 до 4.4.7 включно.
- Лише застосунки, що використовують `#[Authorize]`: на методах із параметрами-моделями (перші дві проблеми) або на методах з `#[Json]` (третя).
- Livewire 3.x не зачеплено.
- Авторизацію всередині методу через `$this->authorize(...)` не зачеплено.

Вразливість знайшов і повідомив Yousef Aman.

### Що робити

Оновіться до 4.4.8:

```bash
composer update livewire/livewire
```

Після оновлення параметри виклику дії чи події мають бути списком або мати рядкові ключі - інакше запит відхиляється. Методи з `#[Json]` тепер авторизуються до виконання.

Якщо оновитися прямо зараз не можна, перенесіть перевірку всередину методу:

```php
public function deleteComment(Comment $comment)
{
    $this->authorize('delete', $comment);

    $comment->delete();
}
```

Так перевіряється саме той запис, з яким працюватиме дія. Коли оновитеся, можна повернути атрибут.

### NativePHP for Mobile: сім попереджень

NativePHP [опублікувала](https://nativephp.com/blog/our-first-security-advisories-and-this-weeks-php-cves) свої перші попередження безпеки - сім для NativePHP for Mobile ([огляд на Laravel News](https://laravel-news.com/nativephp-mobile-security-advisories)). Виправлення - в `nativephp/mobile` 4.6.1 і 3.3.11 та в плагіні `nativephp/mobile-file` 1.0.3.

Більшість проблем походять із внутрішніх маршрутів `/_native/api/*`, через які web view спілкується з нативною частиною: на них не було жодного `middleware`, а частина функцій мосту приймала вхідні дані без перевірок. Для більшості атак зловмисникові вже потрібен JavaScript, що виконується у web view застосунку: XSS або скомпрометований сторонній скрипт.

| Попередження | Серйозність | Суть | Виправлено в |
|---|---|---|---|
| [GHSA-9884-fw9c-mq85](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-9884-fw9c-mq85) | High, 8.1 | ін'єкція коду через ідентифікатор асинхронного завдання (4.5.0+) | 4.6.1 |
| [GHSA-83jv-8h7x-287p](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-83jv-8h7x-287p) | High, 7.7 | `/_native/api/events` створював об'єкт будь-якого класу з запиту | 4.6.1, 3.3.11 |
| [GHSA-3w4w-cchh-qvrw](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-3w4w-cchh-qvrw) | High, 7.7 | `File.Move` і `File.Copy` приймали будь-який шлях у пісочниці | 4.6.1 |
| [GHSA-7927-vv5p-fv4f](https://github.com/NativePHP/mobile-file/security/advisories/GHSA-7927-vv5p-fv4f) | High, 7.7 | те саме в плагіні `mobile-file` | 1.0.3 |
| [GHSA-9g37-88p8-75j2](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-9g37-88p8-75j2) | High, 7.4 | `unserialize()` даних асинхронних завдань без автентифікації (4.5.0+) | 4.6.1 |
| [GHSA-76px-r497-93p9](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-76px-r497-93p9) | Medium, 5.9 | обхід шляху в `/_assets`: читання файлів поза `public/`, зокрема бази SQLite | 4.6.1, 3.3.11 |
| [GHSA-27jx-7m9x-fx5c](https://github.com/NativePHP/mobile-air/security/advisories/GHSA-27jx-7m9x-fx5c) | Medium, 4.1 | Android-збірки писали сесійну cookie і XSRF-токен у logcat | 4.6.1, 3.3.11 |

Дві зміни можуть вплинути на поведінку застосунку. Події, які відправляють через `/_native/api/events`, тепер мають реалізовувати інтерфейс `Native\Mobile\Events\Contracts\DispatchableFromNative` - це стосується авторів плагінів із власними подіями. А дані асинхронних завдань тепер шифруються ключем застосунку, тож без `APP_KEY` асинхронні завдання не запускаються.

### Мобільний застосунок треба перезібрати

Тут головна відмінність від звичайного вебзастосунку: `composer update` нікого не захищає. Частина виправлень - у нативному коді Swift, Kotlin і C, який генерується в проєкт застосунку, і до користувачів він дійде лише з новою збіркою. Порядок дій:

1. Оновіть `nativephp/mobile` до 4.6.1 (на гілці 3.x - до 3.3.11).
2. На 4.x видаліть плагін `nativephp/mobile-file`: ядро має власні, вже обмежені `File.Move` і `File.Copy`, а плагін може їх перекрити й повернути вразливість. На 3.x оновіть плагін до 1.0.3.
3. Перегенеруйте нативний проєкт командою `php artisan native:install --force` і перезберіть застосунок.
4. Відправте нову збірку в App Store і Google Play. Доки користувачі її не встановлять, вони вразливі.

Версії 1.x і 2.x більше не підтримуються і виправлень не отримають - команда радить переходити на 4.x.

Є й друга причина перезібрати застосунок: NativePHP везе всередині власну копію PHP. Після [критичних релізів PHP 21 жовтня](https://laravelukraine.com/blog/kriticni-rce-vrazlivosti-v-php-shho-stalosia-i-shho-zrobiti-zaraz) команда перезібрала всі бінарники PHP, які розповсюджує, на 8.5.12, 8.4.27 і 8.3.36, але у ваш застосунок вони потраплять тим самим шляхом: оновлення, `native:install --force`, нова збірка, реліз.

### Наостанок

Не варто перебільшувати масштаб: Livewire - це середня серйозність і лише застосунки з `#[Authorize]` на конкретних методах, NativePHP - здебільшого атаки, яким уже потрібен чужий JavaScript у web view. Але обидва виправлення дешеві.

Для Livewire пошукайте в проєкті `#[Authorize]` - якщо знайшлося, оновлення до 4.4.8 стоїть першим у черзі. Для NativePHP закладіть у план не лише оновлення пакета, а й цикл перевірки в магазинах застосунків: від `composer update` до захищених користувачів тут минають дні, а не хвилини. І заразом перевірте, які сторонні скрипти завантажує ваш web view - більшість цих атак починається саме звідти.
