Bug 57563 - Некорректные ошибки при попытке чтения чужих списков секретов и самих секретов в Openbao UI
Summary: Некорректные ошибки при попытке чтения чужих списков секретов и самих секрето...
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: openbao (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: tulskijms@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2026-01-20 13:39 MSK by Olga
Modified: 2026-02-04 17:21 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Olga 2026-01-20 13:39:19 MSK
Версия программы:
=================
openbao-2.4.4-alt1

Стенды с ошибкой, обновлен. до Sisyphus:
========================================
Alt Workstation 11.1
Alt Workstation KDE 11.1.1
Alt Education XFCE 11
Alt Education KDE 11

Прекондишен:
============
1. Настроить Keycloak для oidc аутентификации с тест-пользователями: qa-user и dev-user, которые получают qa и dev роль соответственно после логина
2. Настроить Openbao кластер из трёх нод: bao-1, bao-2, bao-3
3. Включить метод аутентификации OIDC в Openbao кластере:
# bao auth enable oidc
4. Создать конфиг с дефолтной ролью default_role=oidc-login (предполагается, что вход в Openbao будет осуществляться без указания роли):
# bao write auth/oidc/config \
  oidc_discovery_url="https://<Keycloak IP>:8443/realms/test-bao" \
  oidc_client_id="bao-client" \
  oidc_client_secret="<Client Secret>" \  #Указать Client Secret полученный клиентом в Keycloak
  oidc_discovery_ca_pem="$(cat /tmp/keycloak.crt)" \
  default_role=oidc-login
5. Создать файл с настройками oidc-login.json для создания дефолтной роли:
# cat > oidc-login.json << 'EOF'
{
  "role_type": "oidc",
  "allowed_redirect_uris": [
    "https://bao.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback",
    "https://bao.altdomain.ru:8200/v1/auth/oidc/callback",
    "https://bao-1.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback",
    "https://bao-2.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback",
    "https://bao-3.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback",
    "http://localhost:8250/oidc/callback"
  ],
  "bound_audiences": [
    "bao-client"
  ],
  "groups_claim": "/resource_access/bao-client/roles",
  "token_policies": [
    "default"
  ],
  "token_max_ttl": "8h",
  "max_age": 0,
  "token_type": "default",
  "ttl": "30m",
  "user_claim": "sub"
}
EOF
6. Создать дефолтную роль oidc-login:
# bao write auth/oidc/role/oidc-login  -<oidc-login.json
7. Создать политику policy-dev и policy-qa
Политика policy-dev:
# bao policy write policy-dev - <<EOF
path "kv/dev/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}
path "kv/data/dev/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}
path "kv/metadata/dev/*" {
  capabilities = ["list", "read"]
}
path "auth/token/lookup-self" {
  capabilities = ["read"]
}
EOF
Политика policy-qa:
# bao policy write policy-qa - <<EOF
path "kv/qa/*" {
 capabilities = ["create", "read", "update", "delete", "list"]
}
path "kv/data/qa/*" {
 capabilities = ["create", "read", "update", "delete", "list"]
}
path "kv/metadata/qa/*" {
 capabilities = ["list", "read"]
}
path "auth/token/lookup-self" {
 capabilities = ["read"]
}
EOF
8. Создать группы: qa и dev:
# bao write identity/group name="qa" policies="policy-qa" type="external"
# bao write identity/group name="dev" policies="policy-dev" type="external"
9. Создать алиасы для групп qa и dev (имя алиасов должно соответствовать имени роли в Keycloak):
# ACCESSOR=$(bao auth list -format=json | jq -r '.["oidc/"].accessor')
# bao write identity/group-alias name="qa" mount_accessor="$ACCESSOR" canonical_id=$(bao read -field=id identity/group/name/qa)
# bao write identity/group-alias name="dev" mount_accessor="$ACCESSOR" canonical_id=$(bao read -field=id identity/group/name/dev)

10. Включить KV v2:
# bao secrets enable -path=kv kv-v2
11. Записать секрет в kv для групп qa и dev:
# bao kv put kv/qa/testdata username="test" password="test"
# bao kv put kv/dev/database dbname="myapp_db" username="app_user"

Шаги, приводящие к ошибке:
==========================
1. На клиенте зайти в Openbao UI пользователем dev-user
2. ЛКМ по secrets engine KV -> В Secret path ввести: dev/ -> View list => Отобразился список доступных секретов
3. ЛКМ по secrets engine KV -> В Secret path ввести: qa/testdata -> View Secret => Секрет не отображается. Выводится сообщение: "You do not have permission to read this secret. Your policies permit you to write a new version of this secret, but do not allow you to read its current contents."
4. ЛКМ по secrets engine KV -> В Secret path ввести: qa/ -> View list

Ожидаемый результат:
====================
Шаг 3. Отсутствует дополнение к ошибке при просмотре чужого секрета: "Your policies permit you to write a new version of this secret, but do not allow you to read its current contents."
Шаг 4.Список доступных секретов НЕ отобразился. Выводится сообщение, например: "You do not have permission to read list of secrets"

Фактический результат:
======================
Шаг 3. На самом деле пользователь dev-user не может создать новую версию секрета kv/qa/testdata.
Ошибка при попытке это сделать с помощью Openbao CLI:
Error writing data to kv/data/qa/testdata: Error making API request.

URL: PUT https://bao.altdomain.ru:8200/v1/kv/data/qa/testdata
Code: 403. Errors:

* 1 error occurred:
	* permission denied
Шаг 4. Список доступных секретов НЕ отобразился, пользователь остался на странице View secrets. Нет сообщения, что у пользователя нет разрешения смотреть список секретов.
Comment 1 tulskijms 2026-02-04 17:21:04 MSK
Проверил воспроизведение ошибки. Получил такой же результат.

Создал тикет в upstream - https://github.com/openbao/openbao/issues/2408