Skip to main content

Kanidm CVE-2026-46689

| EUVDEUVD-2026-36133 HIGH
Uncaught Exception (CWE-248)
2026-06-10 GitHub_M GHSA-r5fr-9gmv-jggh
8.7
CVSS 4.0 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.5 HIGH

Single unauthenticated HTTP GET to a default-exposed SCIM endpoint crashes the daemon, giving AV:N/AC:L/PR:N/UI:N with only availability impact (A:H), no confidentiality or integrity loss, scope unchanged.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

3
Patch available
Jun 10, 2026 - 23:01 EUVD
Source Code Evidence Fetched
Jun 10, 2026 - 21:18 vuln.today
Analysis Generated
Jun 10, 2026 - 21:18 vuln.today

DescriptionCVE.org

Kanidm is an identity management platform. Prior to version 1.9.3, a single unauthenticated GET to any /scim/v1/... endpoint with a ?filter= query string of a few thousand nested parentheses (≈ 4-12 KB) drives the recursive-descent PEG parser past the worker thread's stack guard page. Rust responds to stack overflow with std::process::abort() - the entire kanidmd process exits. The parse runs inside axum's Query<ScimEntryGetQuery> extractor, before any handler body and therefore before any ACL check. This issue has been patched in version 1.9.3.

AnalysisAI

Unauthenticated remote denial-of-service in Kanidm identity management server versions prior to 1.9.3 allows any network attacker to crash the entire kanidmd daemon by sending a single GET request to any /scim/v1/* endpoint with a deeply nested parenthesised ?filter= query string. The recursive-descent PEG parser exhausts the worker thread's 2 MiB stack, triggering Rust's std::process::abort(). No public exploit identified at time of analysis, but technical details and root cause are fully disclosed in the upstream advisory.

Technical ContextAI

Kanidm is a Rust-based identity and access management platform exposing a SCIM v1 HTTP API via the axum web framework. The flaw lives in the scim_proto and kanidm_proto crates, where the SCIM filter grammar is parsed using a peg::parser! macro with two recursive productions for '(' e:parse() ')' and 'not (' e:parse() ')' that have no depth bound (proto/src/scim_v1/mod.rs:281,293). The vulnerability maps to CWE-248 (Uncaught Exception) - when the recursion depth exceeds the worker thread's stack guard page, Rust converts the stack overflow into an unrecoverable abort that terminates the whole process. Crucially, the parse executes inside axum's Query<ScimEntryGetQuery> extractor before the handler body, and the VerifiedClientInformation extractor unconditionally returns Ok, so the existing semantic depth cap (DEFAULT_LIMIT_FILTER_DEPTH_MAX = 12) and ACL checks never run. The affected CPE is cpe:2.3:a:kanidm:kanidm:*:*:*:*:*:*:*:*.

RemediationAI

Vendor-released patch: upgrade kanidmd and the scim_proto / kanidm_proto crates to 1.9.3 or later, which adds a depth bound to the PEG grammar (see https://github.com/kanidm/kanidm/releases/tag/v1.9.3 and advisory GHSA-r5fr-9gmv-jggh). If immediate patching is not possible, place Kanidm behind a reverse proxy (nginx, HAProxy, Caddy) and reject requests to /scim/v1/* whose query string exceeds a few hundred bytes or whose ?filter= value contains more than ~20 consecutive '(' characters; this blocks the trigger without altering SCIM semantics for normal clients but will break legitimate complex SCIM filter use cases. Lowering hyper's max_buf_size below the ~12 KB trigger threshold is not natively configurable in 1.9.2, so proxy filtering is the practical compensating control; restricting /scim/v1/* exposure to trusted management networks via firewall ACLs is also recommended and has no functional side effect for typical end-user authentication flows. The same 1.9.3 release also fixes a parallel LDAP filter stack-exhaustion DoS, so the upgrade closes both vectors.

Share

CVE-2026-46689 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy