Home/ Blog/ Security news/ Article
Blog · Security news

A Keycloak flaw lets a view-only admin read live client secrets from the vault (CVE-2026-17048)

CVE-2026-17048 lets a view-only Keycloak admin read resolved client secrets from the vault instead of the placeholder. Only rotated secrets leak; audit and

Row of sealed metal capsules with one clear glass capsule glowing inside

Putting a client secret in a vault is supposed to mean one thing: the people who administer your identity server can see that a secret exists, but never the secret itself. CVE-2026-17048, disclosed by Red Hat on 24 July 2026, breaks that promise for one specific case. A delegated administrator who holds only view-only rights can ask Keycloak's Admin REST API for a client's rotated secret and receive the real secret the vault resolves, rather than the masked placeholder they are meant to see.

The severity is moderate on paper (CVSS 5.5), and it is not a remote, unauthenticated takeover. It is quieter, and for a lot of shops more awkward: it turns an account you handed out precisely because it "cannot change anything" into a way to walk off with usable application credentials.

What the flaw actually does

Keycloak lets a confidential client store its secret in an external vault and reference it with a placeholder such as ${vault.rotated-secret}. The Admin REST API is meant to return that placeholder string to an administrator, never the resolved plaintext. According to Red Hat's tracking of the issue, the GET endpoint for a client's rotated secret resolves the placeholder and returns the underlying plaintext.

Two details keep this from being a five-alarm fire, and you should hold onto both. First, it affects only the rotated secret, the secondary value Keycloak keeps during a secret-rotation window. The primary client secret is not exposed through this path. Second, the caller needs an existing administrative account: specifically the view-clients permission, the built-in privilege that lets an account read client configuration. Red Hat's score reflects that with a high privileges-required rating.

The bug class is CWE-200, exposure of sensitive information, not a cryptographic weakness. That distinction shapes how you think about the fix: the vault did its job, the storage was fine, and the authorization check on the API is what failed. In ATT&CK terms this is credential access through unsecured credentials (T1552), and the payoff is a working client secret that an insider could use to impersonate that client (T1078).

Who is exposed

You are in scope only if three things are true at once: you run an affected Keycloak build, you back client secrets with a vault and use secret rotation, and you have handed the client-viewing role to accounts you do not fully trust with production credentials. Miss any one of those and this is not your emergency.

Red Hat lists the affected and unaffected products explicitly. As published:

  • Affected: Red Hat Build of Keycloak (the keycloak-services component), including the RHEL 9 container build.
  • Not affected: Red Hat Single Sign-On 7, Red Hat Data Grid 8, the EAP Expansion Pack, and the OpenShift container image of Red Hat Build of Keycloak.

If you run community Keycloak rather than the Red Hat build, treat the underlying keycloak-services code as the thing to watch and track the upstream project's security notes. Red Hat's record enumerates its own products, not every downstream distribution.

Exploitation status and the fix

There is no report of this being exploited, and no public exploit code, at the time of writing. That is the good news. The less good news: as of disclosure, Red Hat's tracker still lists the issue as newly filed, and no fixed errata or patched version was confirmed when this went out. So "upgrade to the fixed release" is not yet an instruction you can follow. Watch the Red Hat CVE page for the errata and apply it the moment it lands.

This is exactly the situation where the interesting work is not the patch. It is the two things the patch will not do for you.

Rotate the secrets, do not just wait for the patch

Reading a secret leaves no crash, no error, and no exploit noise. To the logs it looks like an administrator viewing a client, because that is literally what it is. A fix closes the hole going forward but tells you nothing about whether a view-only admin already pulled secrets during the exposure window. Assume they could have, and act on it:

  • Inventory who holds the client-viewing role. Delegated administration tends to grow quietly, and view-clients is a common grant for support, audit, and read-only operations staff precisely because it looks harmless. List every account and group that has it, directly or inherited.
  • Rotate any client secret that role could reach, and finish the rotation. If a rotated secret was exposed, the fix does not invalidate it. Complete the rotation so the old value retires, then confirm downstream applications hold only the new secret. A leaked client secret behaves like any other stolen credential: it stays valid until you kill it.
  • Go back through your admin events. Keycloak's administrative event log records API access to client resources. Look for view-only accounts reading client secret endpoints, especially any pattern of one account pulling many clients in a short window. That is your closest signal to whether the window was used.
  • Tighten the grant. Where a role only needs to know that clients exist, revisit whether it needs client-viewing at all, and scope delegated administration to the specific clients it manages rather than the whole set.

The wider point

Vault-backed secrets are a real improvement: they cut secret sprawl and keep plaintext out of your Keycloak database. But they move the trust boundary rather than remove it. The question stops being "where does the secret live" and becomes "who does the API hand the resolved value to." This is the same shape as Puppet handing back the passwords it was told to hide: the secret was managed correctly right up until an interface returned it in the clear. An authorization bug in one endpoint undoes the storage guarantee completely, and you would not catch it in a scan, a crash, or an alert. Read-only is a promise about writes. It was never a promise about reads, and CVE-2026-17048 is a clean reminder to check what your read-only roles can actually read.

Frequently asked questions

What is CVE-2026-17048?

CVE-2026-17048 is a medium-severity information-disclosure flaw in Keycloak's Admin REST API, disclosed by Red Hat on 24 July 2026. When a client's rotated secret is stored in a vault, the API returns the resolved plaintext value instead of the placeholder, exposing a usable credential.

What access does an attacker need to exploit it?

An attacker needs an existing administrative account that holds the view-clients permission, the built-in role that lets an account read client configuration. It is not remotely exploitable by an anonymous user, which is why Red Hat scores it as requiring high privileges.

Are all Keycloak client secrets exposed?

No. Only the rotated secret is exposed through this endpoint, and only when it is backed by a vault placeholder. The rotated secret is the secondary value Keycloak keeps during a rotation window. The primary client secret is not returned by this path.

Is CVE-2026-17048 being exploited, and is there a fix?

There is no report of exploitation and no public exploit code at the time of writing. As of disclosure Red Hat lists the issue as newly filed with no confirmed fixed version, so watch the Red Hat CVE page for errata and apply it once published.

Which Keycloak products are affected?

Red Hat lists Red Hat Build of Keycloak, including its RHEL 9 container image, as affected. It lists the OpenShift container build, Red Hat Data Grid 8, the JBoss EAP Expansion Pack, and Red Hat Single Sign-On 7 as not affected. Community Keycloak users should track upstream notes.

How do I tell if a delegated admin already read secrets?

Check Keycloak's administrative event log for view-only accounts accessing client secret endpoints. A single account reading many clients in a short window is the clearest signal. Because the read leaves no error, assume exposed secrets could have been taken and rotate them.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.