CVE-2026-44174: Kirby: unsafe reflection allows privilege escalation

GHSA-86rh-h242-j8xp HIGH
Published May 26, 2026
CISO Take

Kirby CMS's REST API collection endpoints fail to validate model attribute names before invoking them, allowing any authenticated Panel user to call arbitrary PHP model methods — including password() to extract credential hashes, loginPasswordless() to instantly escalate to any user account without knowing their password, and delete() to bulk-destroy entire content collections. While exploitation requires an existing Panel credential, the step from low-privilege editor to full admin is a single crafted API call, requiring no advanced tooling. With 469 downstream dependents and 6 prior CVEs in this package, organizations using Kirby as a data management layer for AI training corpora or RAG document pipelines carry compounded exposure. No public exploit or CISA KEV listing exists at time of analysis; patch to Kirby 4.9.1 (v4.x) or 5.4.1 (v5.x) immediately, audit Panel accounts for unauthorized users, and review API logs for collection queries referencing method names such as password, root, loginPasswordless, or delete.

Sources: GitHub Advisory NVD OpenSSF ATLAS

What is the risk?

Exploitability requires authenticated Panel access, which reduces opportunistic risk but elevates insider threat and post-compromise pivot scenarios. Once that bar is cleared, exploitation is trivial: the attacker only needs to name a sensitive method in a filter query parameter — no memory corruption, no shellcode. Impact is high across three dimensions: credential exfiltration (password hashes for all Panel users), account takeover via passwordless login, and irreversible mass deletion of content. For AI-adjacent deployments where Kirby manages training data or pipeline inputs, a compromised editor account becomes a foothold for full pipeline sabotage. Package OpenSSF score of 7.1/10 is acceptable but 6 prior CVEs indicate recurring input-validation weaknesses.

Attack Kill Chain

Initial Access
Attacker authenticates to the Kirby Panel using a compromised or legitimately held low-privilege editor account.
AML.T0012
API Exploitation
Crafts a REST API collection query against /api/users or similar endpoints, supplying a sensitive model method name (e.g., 'password', 'loginPasswordless') as the filter attribute value.
AML.T0049
Credential Harvesting
Kirby invokes the named model method without validation, returning password hashes for all queried user models in the API response.
AML.T0106
Privilege Escalation and Impact
Attacker invokes loginPasswordless() to escalate to admin, then exfiltrates or mass-deletes AI pipeline content collections via delete(), disrupting downstream ML workflows.
AML.T0025

What systems are affected?

Package Ecosystem Vulnerable Range Patched
getkirby/cms composer <= 4.9.0 4.9.1
5.7K OpenSSF 7.1 469 dependents Pushed 3d ago 86% patched ~0d to patch Full package profile →

Do you use getkirby/cms? You're affected.

Severity & Risk

CVSS 3.1
N/A
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Trivial

What should I do?

5 steps
  1. Update getkirby/cms to 4.9.1 (v4.x branch) or 5.4.1 (v5.x branch) — these releases add a method blocklist for collection operations and restrict affected API endpoint query options to search and pagination only.

  2. Immediately audit Panel user accounts: revoke unnecessary accounts, enforce unique strong passwords, and enable MFA where supported.

  3. Review server-side API access logs for collection queries containing attribute names: password, root, loginPasswordless, delete, or kirbytext.

  4. Restrict Panel and REST API access to trusted IP ranges at the network/firewall level pending patching.

  5. If emergency patching is not immediately possible, consider disabling or rate-limiting the REST API collection endpoints as a temporary control.

Classification

Compliance Impact

This CVE is relevant to:

EU AI Act
Article 15(4) - Accuracy, robustness and cybersecurity
ISO 42001
6.1 - Actions to address risks and opportunities
NIST AI RMF
MANAGE 2.2 - Mechanisms are in place to minimize negative AI impact
OWASP LLM Top 10
LLM06 - Sensitive Information Disclosure

Frequently Asked Questions

What is CVE-2026-44174?

Kirby CMS's REST API collection endpoints fail to validate model attribute names before invoking them, allowing any authenticated Panel user to call arbitrary PHP model methods — including password() to extract credential hashes, loginPasswordless() to instantly escalate to any user account without knowing their password, and delete() to bulk-destroy entire content collections. While exploitation requires an existing Panel credential, the step from low-privilege editor to full admin is a single crafted API call, requiring no advanced tooling. With 469 downstream dependents and 6 prior CVEs in this package, organizations using Kirby as a data management layer for AI training corpora or RAG document pipelines carry compounded exposure. No public exploit or CISA KEV listing exists at time of analysis; patch to Kirby 4.9.1 (v4.x) or 5.4.1 (v5.x) immediately, audit Panel accounts for unauthorized users, and review API logs for collection queries referencing method names such as password, root, loginPasswordless, or delete.

Is CVE-2026-44174 actively exploited?

No confirmed active exploitation of CVE-2026-44174 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-44174?

1. Update getkirby/cms to 4.9.1 (v4.x branch) or 5.4.1 (v5.x branch) — these releases add a method blocklist for collection operations and restrict affected API endpoint query options to search and pagination only. 2. Immediately audit Panel user accounts: revoke unnecessary accounts, enforce unique strong passwords, and enable MFA where supported. 3. Review server-side API access logs for collection queries containing attribute names: password, root, loginPasswordless, delete, or kirbytext. 4. Restrict Panel and REST API access to trusted IP ranges at the network/firewall level pending patching. 5. If emergency patching is not immediately possible, consider disabling or rate-limiting the REST API collection endpoints as a temporary control.

What systems are affected by CVE-2026-44174?

This vulnerability affects the following AI/ML architecture patterns: CMS-backed RAG document pipelines, AI training data management interfaces, Content-driven AI application backends, ML workflow data ingestion systems.

What is the CVSS score for CVE-2026-44174?

No CVSS score has been assigned yet.

AI Security Impact

Affected AI Architectures

CMS-backed RAG document pipelinesAI training data management interfacesContent-driven AI application backendsML workflow data ingestion systems

MITRE ATLAS Techniques

AML.T0012 Valid Accounts
AML.T0049 Exploit Public-Facing Application
AML.T0106 Exploitation for Credential Access

Compliance Controls Affected

EU AI Act: Article 15(4)
ISO 42001: 6.1
NIST AI RMF: MANAGE 2.2
OWASP LLM Top 10: LLM06

Technical Details

Original Advisory

### TL;DR This vulnerability affects all Kirby sites that might have potential attackers in the group of authenticated Panel users. **This vulnerability is of high severity for affected sites and has a high real-world impact.** ---- ### Introduction Arbitrary method call is a type of arbitrary code execution. It is a vulnerability that allows attackers to run any commands or code of the attacker's choice on a target machine or in a target process. Depending on the set of accessible methods, this can lead to disclosure of sensitive information or to unintended and malicious write actions. ### Affected components Kirby's data model is made up of model objects that are contained in collection objects. These collections can be queried with methods such as `$collection->filter()`, `$collection->sort()`, `$collection->group()`, `$collection->pluck()` and `$collection->findBy()`. Each of these methods allows to query the models contained in the collection by any accessible model attribute (field or method). Kirby also provides endpoints in its REST API that allow to search through users or through children and files of the site or of a particular page. These endpoints allow the `search`, `not`, `filter` and `sort` queries as well as options to paginate the result. The same kind of queries can also be provided to API collections such as `/<site|page|user>/blueprints`, `/<site|page>/children`, `/<model>/files`, `/languages`, `/roles`, `/translations`, `/users` and `/<user>/roles`. ### Impact In affected releases, Kirby did not validate the model attributes that were used in the collection queries. This allowed attackers to include arbitrary model methods in their queries. This includes methods with sensitive data such as `password()` (disclosing the password hash) or `root()` (disclosing the absolute filesystem path on the server) as well as methods that perform impactful actions such as `loginPasswordless()` (causing a privilege escalation to another user) or `delete()` (deleting all queried models in one go if the authenticated user has appropriate permissions). ### Patches The problem has been patched in [Kirby 4.9.1](https://github.com/getkirby/kirby/releases/tag/4.9.1) and [Kirby 5.4.1](https://github.com/getkirby/kirby/releases/tag/5.4.1). Please update to one of these or a [later version](https://github.com/getkirby/kirby/releases) to fix the vulnerability. In all of the mentioned releases, Kirby has added a blocklist of sensitive model methods that should not be called during collection operations and limited the query options for the affected endpoints to search and pagination. ### Credits Kirby thanks @mojamojam for responsibly reporting the identified issue.

Exploitation Scenario

An attacker holding a low-privilege Kirby Panel editor account — obtained via phishing, credential stuffing, or a malicious insider — sends a crafted GET request to the /api/users endpoint with a filter query parameter set to the attribute name 'password'. Kirby's collection query engine invokes the password() method on each user model without validation, returning plaintext-accessible password hashes for every Panel user in the JSON response. Rather than waiting to crack hashes, the attacker immediately follows with a second request invoking loginPasswordless() as the filter attribute on the target admin user, triggering a direct session elevation to admin without requiring knowledge of the admin password. From that admin position, the attacker accesses AI training datasets managed in Kirby, exfiltrates content, or invokes delete() via another collection query to irreversibly destroy document collections relied upon by downstream RAG or ML pipelines.

Timeline

Published
May 26, 2026
Last Modified
May 26, 2026
First Seen
May 27, 2026

Related Vulnerabilities