Защитная диагностика Budibase GET /api/global/groups по ghsa-4qcj-m5wp-jmf4: применимость, ролевой in-memory control, момент deny, измеримый verdict, stop-rule и минимальный пакет для владельца.
Короткий ответ — Budibase groups API: проверка RBAC на чтение
Проверка отвечает на один вопрос: проверить, что Budibase groups API выдаёт метаданные групп только ролям с отдельным разрешением управления группами. Advisory ghsa-4qcj-m5wp-jmf4 — свежий inventory-сигнал, но не доказательство состояния вашей инсталляции. Сначала зафиксируйте package lock, image digest и фактически обслуживающий запрос worker. Затем сравните две роли на одном tenant fixture. Боль конкретна: пользователь с базовой ролью может получить перечень tenant-групп, role mappings и memberships без требуемого административного права. Нужен воспроизводимый результат «матрица actor role / middleware decision / repository calls / response fields / tenant id», а не вывод по названию роли или одному HTTP status.
Какая граница доступа проверяется
Путь решения: authenticated role → route middleware → groups permission → response projection. Для каждого перехода запишите владельца identity, источник роли, требуемую permission и момент первого обращения к repository. Инварианта: BASIC actor получает deny до чтения group store, а административный control видит только разрешённую tenant-проекцию. Здесь не проверяются mutation endpoints, login, лицензирование функций или права другого tenant. Если route не зарегистрирован, component отсутствует — это NOT_APPLICABLE; если неизвестны effective middleware или runtime digest — UNKNOWN, а не PASS.
Инвентаризация до ролевого теста
Сопоставьте SBOM и runtime readback с диапазоном «@budibase/server: introduced 0, last affected 3.38.1». Убедитесь, что запрос идёт в worker route Budibase GET /api/global/groups, а не в gateway-cache или fork. Сохраните список middleware в порядке выполнения и reason code: AFFECTED_PATH, PATCHED_PATH, COMPONENT_ABSENT либо PROVENANCE_UNKNOWN. Исправленный номер версии без проверки effective route недостаточен: backport, vendored bundle или старый container могут изменить применимость.
Безопасный локальный RBAC control
В локальном worker fixture создать одну обезличенную группу и два test principals, basic и admin, затем запросить endpoint через in-memory http client. Не используйте реальные имена, email, memberships или production token. Identity provider и repository замените fake-объектами, response body храните только как список названий полей и digest. Перед запросами обнулите counters. Сначала admin control подтверждает достижимость route, затем BASIC boundary-case меняет только роль. После каждой строки сбрасывайте fixture.
Что записать в матрицу
Сохраните матрица actor role / middleware decision / repository calls / response fields / tenant id, HTTP code, reason code и digest fixture. Admin control не доказывает безопасность BASIC пути: важен момент deny относительно repository read. Ожидается: BASIC actor получает deny до чтения group store, а административный control видит только разрешённую tenant-проекцию. Если response скрыт, но repository уже прочитан, отметьте частичный FAIL для принципа минимальных данных. Если fake repository или middleware recorder не подключён, результат UNKNOWN — увеличивать привилегии или переносить тест на production нельзя.
PASS, FAIL и UNKNOWN
PASS требует подтверждённого runtime, успешного admin control, deny для BASIC до repository read, минимальной admin-проекции и cleanup. FAIL фиксируется, если BASIC actor получил group metadata или repository counter вырос до deny. UNKNOWN означает нехватку digest, effective role mapping, route trace или надёжного recorder. Один 401/403 недостаточен без уверенности, что ответ дал нужный middleware; один пустой JSON также не доказывает отсутствие внутреннего чтения.
Stop-rule и восстановление
Немедленно остановитесь, если BASIC actor получил group metadata или repository counter вырос до deny. Не расширяйте тест на другие tenant, не перебирайте идентификаторы и не сохраняйте ответ с group metadata. Удалите тестовую группу и principals, сравните repository counters и state digest с baseline, закройте in-memory client. Любая оставшаяся запись или обращение к внешнему identity provider блокирует PASS. После обновления повторите ровно ту же двухстрочную матрицу.
Почему это отдельный intent
Проверяет read-authority и response projection одного каталожного endpoint, а не tenant scope БД, создание групп или общую аутентификацию. Передайте владельцу ghsa-4qcj-m5wp-jmf4, digest, effective route/middleware order, диапазон «@budibase/server: introduced 0, last affected 3.38.1», матрица actor role / middleware decision / repository calls / response fields / tenant id, verdict, stop reason и cleanup proof. Advisory опубликована 2026-07-24 и обновлена 2026-08-12. Эти даты подтверждают свежесть технического источника, но не поисковый спрос, эксплуатацию или применимость к конкретному deployment.
Материал подготовлен редакцией VOne с помощью автоматизированного черновика; даты, версии и ссылки сверены по GitHub Advisory Database и первичному upstream-материалу. Текст самостоятельный, не копирует источники, не содержит эксплуатационных последовательностей и предназначен для безопасной локальной проверки.
Источники и проверка
- GitHub Advisory Database — ghsa-4qcj-m5wp-jmf4 проверено 2026-09-03
- Первичный upstream-материал — Budibase GET /api/global/groups проверено 2026-09-03
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.