GHSA-gpxg-fx2g-qxj2: XSS

Published May 6, 2026
·
Updated

### Summary The kanidmd web UI renders the WebAuthn passkey-registration challenge as raw JSON inside an inline `<script id="data">` element using the Askama `|safe` filter. The challenge embeds the account's `displayname`, which `serde_json` serialises without escaping `<`/`>`. A `displayname` containing `</script>` therefore terminates the script element early and injects arbitrary HTML into the credential-update page. Because the page is htmx-driven and the server's CSP allows `'unsafe-eval'`, injected `hx-*` attributes can issue authenticated same-origin API requests with the viewer's bearer cookie. ### Impact An authenticated attacker who is a member of `idm_people_admins` can write the `displayname` of any `Person` entry — including high-privilege persons — because `idm_acp_people_pii_manage` carries no high-privilege exclusion filter. When the targeted high-privilege user later opens **Add Passkey** on their own credential-update page (`/ui/reset`), the injected markup is swapped into the DOM and htmx fires attacker-chosen same-origin requests authenticated as the victim. This allows a helpdesk-tier operator to escalate to `idm_admins` (e.g. by POSTing themselves into the group) or otherwise act with the victim's session. The self-write path (`idm_people_self_name_write`) is self-XSS only and is not counted toward impact. Even without the htmx vector, the breakout permits `<meta http-equiv='refresh'>` open-redirect and arbitrary defacement of the credential page. ### Details - https://github.com/kanidm/kanidm/blob/master/server/core/templates/credential_update_add_passkey_partial.html#L3 — the `|safe` sink - https://github.com/kanidm/kanidm/blob/master/server/core/src/https/views/reset.rs#L506-L509 — `serde_json::to_string` of the challenge - https://github.com/kanidm/kanidm/blob/master/server/lib/src/idm/credupdatesession.rs#L2453-L2460 — `displayname` flows into `start_passkey_registration` ### Affected versions All releases shipping the htmx credential-update views

Affected Software

1 affected componentFixes available
rust/kanidm<=1.9.2
1.9.3

Event History

May 6, 2026
Advisory Published
via GitHub·11:34 PM
Data Sourced
via GitHub·11:34 PM
DescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of GHSA-gpxg-fx2g-qxj2?

The severity of GHSA-gpxg-fx2g-qxj2 is classified as critical due to potential Cross-Site Scripting (XSS) vulnerabilities.

2

How do I fix GHSA-gpxg-fx2g-qxj2?

To fix GHSA-gpxg-fx2g-qxj2, upgrade to kanidm version 1.9.3 or later.

3

What software is affected by GHSA-gpxg-fx2g-qxj2?

GHSA-gpxg-fx2g-qxj2 affects kanidm versions up to and including 1.9.2.

4

What vulnerabilities are associated with GHSA-gpxg-fx2g-qxj2?

GHSA-gpxg-fx2g-qxj2 is associated with vulnerabilities that allow untrusted JSON content to be executed as JavaScript.

5

Is GHSA-gpxg-fx2g-qxj2 specific to any browser?

GHSA-gpxg-fx2g-qxj2 is not specific to any browser; it can affect any environment rendering the vulnerable kanidm web UI.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203