---
id: "GHSA-mhf7-xp6r-6qrc"
kind: "vulnerability"
aliases: ["GHSA-mhf7-xp6r-6qrc"]
title: "Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order"
severity: "medium"
cvss: 6.5
epss: null
exploited: false
status: "open"
category: "package"
products: [{"name": "livewire/livewire", "fixed": ["4.4.8"], "affected": ">= 4.3.0, < 4.4.8", "ecosystem": "composer"}]
ecosystems: ["composer"]
tags: ["cwe-863", "laravel", "livewire", "package", "php"]
not_affected_if: ["authorize-inside-method", "livewire-3", "no-authorize-attribute"]
published_at: "2026-10-23T20:51:30+00:00"
first_seen_at: "2026-10-23T20:59:05+00:00"
updated_at: "2026-10-23T21:00:20+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-mhf7-xp6r-6qrc", "first_seen_at": "2026-10-23T20:59:05+00:00"}]
---

# Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order

Livewire's #[Authorize] attribute checked the wrong record when request parameters were sent with reordered keys, and #[Json] methods ran their body before the authorization check. An authenticated user can make a Livewire action operate on a record they do not own, such as deleting another user's comment, and side effects of #[Json] methods happen even when the response is a 403.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- composer:livewire/livewire affected >= 4.3.0, < 4.4.8 fixed 4.4.8

## How to check

Run: composer show livewire/livewire and confirm the version is >= 4.3.0 and < 4.4.8.
Search app code for '#[Authorize' on methods that take model parameters or on #[Json] methods.

## Fix

Upgrade livewire/livewire to 4.4.8 or later.
If you cannot upgrade, call $this->authorize(...) inside affected methods instead of relying on #[Authorize].

## Timeline

- 2026-10-23T20:59:05+00:00 ghsa https://github.com/advisories/GHSA-mhf7-xp6r-6qrc

## From the sources

### Impact

Three issues allowed actions protected by the `#[Authorize]` attribute to run against records the current user is not authorized for:

1. **Out-of-order parameter keys on actions.** `#[Authorize]` resolved a model parameter by its array key, while the action itself received parameters positionally. A request sending params as an object with reordered integer keys (e.g. `{"1": 2, "0": 1}`) could pass authorization with a record the user owns while the action received a different record. With `#[Authorize('delete', 'comment')]` on `deleteComment(Comment $comment)`, a user could delete another user's comment.
2. **The same issue on event listeners.** Methods using both `#[On]` and `#[Authorize]` with a model parameter were affected in the same way through the `__dispatch` call.
3. **`#[Json]` methods ran before authorization.** When a method had both `#[Json]` and `#[Authorize]`, the method body executed before the authorization check. The response was still a 403, but any side effects (such as database writes) had already happened.

Only applications using the `#[Authorize]` attribute are affected: on methods that take model parameters (issues 1 and 2), or on `#[Json]` methods (issue 3). Authorization performed inside the method (e.g. `$this->authorize(...)`) is not affected. Livewire 3.x is not affected.

### Patches

Fixed in **v4.4.8**. Call and event parameters must now be a list or use named (string) keys, otherwise the request is rejected, and `#[Json]` methods are authorized before they run.

### Workarounds

Upgrade to v4.4.8. If you can't upgrade right away, call `$this->authorize(...)` inside affected methods instead of relying on the `#[Authorize]` attribute.

### Credits

Reported by Yousef Aman ([@yousef-aman](https://github.com/yousef-aman)).

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
