Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order
### 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
- Products
- livewire/livewire
- Affected versions
- v4.3.0, v4.3.1, v4.3.2, v4.3.3, v4.3.4, v4.3.5, v4.4.0, v4.4.1, v4.4.2, v4.4.3, v4.4.4, v4.4.5, v4.4.6, v4.4.7
- Fixed versions
- 4.4.8
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 03:12 UTC · Revision 1
Source evidence
Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order
core-osv · Original sourcePublished 23 Oct 2026, 20:51 UTC
### 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
osv:GHSA-mhf7-xp6r-6qrc
livewire/livewire
Fixed versions: 4.4.8
Complete source record
{
"id": "e24615b449b7cfc8b6849c806a2d141e4250fc82e51ed5905559538a65622f24",
"url": "https://osv.dev/vulnerability/GHSA-mhf7-xp6r-6qrc",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order",
"summary": "### 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",
"evidence": "osv:GHSA-mhf7-xp6r-6qrc",
"products": [
{
"name": {
"value": "livewire/livewire",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "4.4.8",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "v4.3.0",
"evidence": "/affected/0/versions"
},
{
"value": "v4.3.1",
"evidence": "/affected/0/versions"
},
{
"value": "v4.3.2",
"evidence": "/affected/0/versions"
},
{
"value": "v4.3.3",
"evidence": "/affected/0/versions"
},
{
"value": "v4.3.4",
"evidence": "/affected/0/versions"
},
{
"value": "v4.3.5",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.0",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.1",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.2",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.3",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.4",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.5",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.6",
"evidence": "/affected/0/versions"
},
{
"value": "v4.4.7",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "medium",
"structured": {
"id": "GHSA-mhf7-xp6r-6qrc",
"aliases": [
"GHSA-mhf7-xp6r-6qrc"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.3.0"
},
{
"fixed": "4.4.8"
}
]
}
],
"package": {
"name": "livewire/livewire",
"purl": "pkg:composer/livewire/livewire",
"ecosystem": "Packagist"
},
"versions": [
"v4.3.0",
"v4.3.1",
"v4.3.2",
"v4.3.3",
"v4.3.4",
"v4.3.5",
"v4.4.0",
"v4.4.1",
"v4.4.2",
"v4.4.3",
"v4.4.4",
"v4.4.5",
"v4.4.6",
"v4.4.7"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-mhf7-xp6r-6qrc/GHSA-mhf7-xp6r-6qrc.json"
}
}
],
"modified": "2026-10-23T21:00:04.354707498Z",
"provider": "osv",
"references": [
"https://github.com/livewire/livewire/security/advisories/GHSA-mhf7-xp6r-6qrc",
"https://github.com/livewire/livewire/commit/822a4fa9b1e1123691133a2e2eb379a3dab11191",
"https://github.com/livewire/livewire",
"https://github.com/livewire/livewire/releases/tag/v4.4.8"
],
"provider_metadata": {
"cwe_ids": [
"CWE-863"
],
"severity": "MODERATE",
"github_reviewed": true,
"nvd_published_at": null,
"github_reviewed_at": "2026-10-23T20:51:30Z"
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 427021,
"published_at": "2026-10-23T20:51:30+00:00"
}