Secrets infrastructure · High, 7.6 of 10 (CVSS 4.0) · patched
The vault that let you spell your way past a deny rule
OpenBao is an open-source secrets manager, run under the OpenSSF. Its policies decide who may read which credential, and the strongest line in a policy is a deny: this token may never touch this one thing. In September a fix was meant to close the ways around those deny rules. It missed resources in four authentication plugins. A name the vault treated as one thing, the policy engine read as another, so asking for it in a different spelling walked past the deny. It is public as GHSA-736f-82w7-hj22, rated High, fixed in 2.7.2 and in the 0.2.0 LDAP and RADIUS plugins, with RIA Labs one of four credited reporters.
Read this part first
If you run OpenBao, read the advisory. The fix is in 2.7.2, released on 26 October 2026, and in version 0.2.0 of the LDAP and RADIUS auth plugins. A 2.6.5 release exists, but upstream no longer supports the 2.6 series, and the advisory says to move to 2.7.
Until you can, our own suggestion, not the advisory’s: find every policy that grants a wildcard and denies one name under it, on the AppRole, certificate, LDAP and RADIUS auth paths, and treat that deny as unreliable. If you use certificate revocation lists there, check that the revoked certificates are still revoked.
The rest of this is about the pattern. There is no policy text and no request below.
How bad it is
The record rates it High, 7.6 of 10, on CVSS 4.0: CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N. Network, low complexity, no click. Two conditions are built in, and this is our reading of them. The attacker already holds a token with some access (PR:L), and the target has a policy of the shape the first advisory describes, a broad grant with a specific deny under it (AT:P). The impact is high on confidentiality and integrity.
The record carries no CVSS 3.1 score. Our own report estimated 3.1 scores between 6.5 and 8.1, depending on how much privilege you think deleting a certificate revocation list needs. That is an estimate on a different scale, so we print the record’s number and not ours.
A deny is how operators carve an exception out of a broad grant: this team may issue credentials for every AppRole role except the production one. When the carve-out fails, the broad grant is all that is left. In a secrets manager, that is the part everyone relies on.
This is the sequel
The first case, GHSA-fg5x-7whg-6c28 (CVE-2026-104093), was published on 23 September and fixed in 2.7.0 and 2.6.3. Its text says several places in OpenBao allow access to a resource through a non-canonical name. For policies and workflows that includes names that are case-insensitive, whitespace-trimmed or path-simplified. For roles, users and PKI references, the names are case-insensitive. A policy checks the name in the request, the backend resolves it to another, and a deny on one spelling does not stop the other. The maintainers add that the flaw is original to HashiCorp Vault.
That advisory names certificate and Kubernetes roles, Userpass users, PKI references and policies. It does not name certificate revocation lists or AppRole. The record we are writing about adds those two, and adds LDAP and RADIUS.
Our report traced why those two were left out. The first fix works backend by backend. Each backend that changes a name before it looks the resource up has to say so, so the policy check can use the same name. Backends that were not changed kept answering to the name in the request. A fix that each backend must add by hand will miss some backends.
How we know
A description is not a finding. We ran OpenBao v2.7.1, a release that already carried the first fix, on local development servers with no outside network. The root token was used only to set things up and to check results.
For certificate revocation lists, a limited token had a deny on one list. The deny held for the name as written in the policy and failed for the same name spelled differently. With delete rights under the wildcard, that token removed the list. The revoked certificate logged in again and received its entry’s policies, which read a secret the limited token could not. The control: with the list put back, a delete under the denied name was refused, and so was the revoked certificate.
For AppRole, a delegated token could create credentials for every role but one. Through the other spelling it reached the denied role, created credentials for it, and logged in as that role. In our lab, its policy could read, change and delete one protected secret.
Our report covered those two of the four. We did not test LDAP or RADIUS. For AppRole we read the 2.6 source and ran nothing there. For revocation lists we did not check 2.6. We did not show an outage or a host compromise. The delegated AppRole token could not create or change roles. We filed it on 26 October through GitHub’s private reporting, the day the advisory went public. Three other reporters are credited with us, and a maintainer is credited separately for the remediation, so we claim neither first nor alone. The record carries no CVE identifier.
Three questions for anything that enforces access rules
None of this is specific to one product. If a policy engine sits in front of a set of backends, these are worth asking.
- Do the policy engine and the backend agree on what a name is? If the engine checks the name in the request and the backend resolves it to another, every deny rests on the two matching.
- Is the name made canonical once, at the door, or by each backend? A rule that each backend must remember will be forgotten by one of them, and the next backend written will not know it exists.
- When a fix covers a class, who checks the rest of the class? Search for every place a name is changed before it is stored. Each one is a candidate. Add a test that a deny on one name stops every spelling of it.
None of it needs exotic tooling. It needs the first fix read as a list of what it covered, and the rest of the list written down.
What it proves, and what it doesn’t
It proves that on v2.7.1, a release that carried the first fix, a limited token deleted a revocation list its policy denied. The revoked certificate then logged in again. In the control, with the list back, a delete under the denied name was refused, and so was the certificate.
We reported two of the four. We did not look at LDAP or RADIUS, and we cannot say we found either of our two first. The finding does not show anyone getting past a deny on a live deployment, or what any operator’s policies look like. It says nothing about how OpenBao compares with other secrets managers. The maintainers say the flaw is original to HashiCorp Vault. We did not test that.
If you build or run infrastructure that guards credentials, we’ll read it. Nominate a target and the first scan costs nothing.
Published 26 October 2026. GHSA-736f-82w7-hj22 · CVSS 4.0 base score 7.6 on the record (CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N) · CWE-863 (Incorrect Authorization), CWE-178 · RIA Labs credited as one of four reporters, published by the OpenBao maintainers. No CVE identifier. Status as of 27 October 2026. Corrections, or infrastructure you maintain and want looked at: info@ria-labs.com.
See what a scan turns up
Nominate a target. The first scan costs nothing, and we’ll walk you through it.