Как проверить, что custom API в SurrealDB не принимает чужие namespace и database из URL: версия, матрица ролей и безопасный двухконтурный тест.
Граница применимости: SurrealDB custom API
Карточка ограничивает affected-ветку версиями до 3.2.0: вошедший пользователь одной базы мог назвать другой namespace/database в HTTP route или api::invoke. Это не unauthenticated bypass и не относится к single-tenant с уже глобальной ролью. Исправление проверяет целевой scope против неизменяемого authenticated level до поиска и запуска endpoint и возвращает 403 для недопустимой границы. Сначала подтвердите именно эту комбинацию версии, компонента, роли и входа. Совпадение названия продукта либо один внешний симптом не доказывают достижимость, эксплуатацию или причину инцидента. Карточка GHSA-848m-r628-vrxw опубликована 4 сентября 2026 года; её дата служит сигналом для проверки, но состояние конкретной системы устанавливается только runtime-инвентаризацией.
Инвентаризация и артефакт
Соберите таблицу authenticated level × requested namespace × requested database × route kind × HTTP/result class. В исходный снимок входят фактический server binary hash, версию, включённость DEFINE API, классы ролей и наличие shared instance без имён клиентов. Поля заполняют значениями TRUE, FALSE или UNKNOWN и связывают с package/image/kernel digest. Версия из lockfile, репозитория или панели не заменяет фактически загруженный binary. Секреты, персональные данные, внутренние адреса, токены и полные журналы в таблицу не включают. Если компонент или entry point не найден, фиксируют NOT-REACHABLE для этой ветки, а не универсальный PASS продукта.
Ограниченный безопасный контроль
В disposable instance создайте два синтетических namespace с безвредными read-only endpoints. У роли первой базы запрос ко второй должен быть отклонён до вызова handler; собственный endpoint служит положительным контролем. Опыт выполняют только в disposable fixture с заранее нулевыми счётчиками filesystem, process, network, database и privileged operations, если они не являются самой измеряемой безопасной операцией. До старта сохраняют SHA-256 fixture, после результата выполняют явный cleanup и повторно проверяют baseline. Один изменяемый фактор отличает контроль от догадки; отсутствие crash или видимого эффекта без проверки внутреннего инварианта не считается доказательством исправления.
Критерии решения и обновление
Обновить SurrealDB до 3.2.0 или новее; при задержке отключить ненужный custom API route и считать отдельные deployments реальной tenant boundary. PASS допустим только когда runtime provenance подтверждён и выполняется правило: Свой scope отвечает ожидаемо, cross-scope даёт 403 и счётчик второго handler остаётся нулевым; root-control проверяют отдельно и не смешивают с database principal. UPDATE-REQUIRED означает affected build или отсутствие заявленного fix. NOT-REACHABLE относится лишь к проверенному entry point. UNKNOWN сохраняют при неподтверждённом backport, неясном runtime или расхождении источников. После штатного update повторяют тот же контроль и обычный smoke-test компонента; соседние настройки одновременно не меняют.
Красные линии проверки
Жёсткий stop-rule: Не переносить опыт на production tenants, не использовать реальные записи, не ослаблять PERMISSIONS и не считать PERMISSIONS WHERE восстановленной системной изоляцией. После срабатывания не увеличивают права, длительность, объём входа или сетевой охват и не ищут обход ограничения. Advisory описывает техническую возможность, а не подтверждённое событие в вашей инфраструктуре. Нельзя публиковать exploit details, рабочие credentials, memory dumps, пользовательский контент или данные других tenants. Если безопасного fixture недостаточно, вопрос передают владельцу продукта или поставщику с минимальным описанием, не превращая диагностику в атаку.
Минимальный пакет для сопровождения
Передайте только: версия и digest, тип principal, обезличенные scope A/B, route kind, status, handler-call counter и cleanup fixture. Добавьте Moscow timestamp, expected/actual, SHA-256 проверяемого артефакта, прямые ссылки на advisory и primary source, а также владельца rollback. Удалите абсолютные домашние пути, IP, usernames, session identifiers, cookies, request bodies, ключи и длинные raw logs. Такой пакет позволяет повторить именно выбранный boundary и принять решение об update. Он не обещает совместимость на иной платформе, отсутствие прошлой эксплуатации, массовость проблемы, поисковый спрос, индексацию или позиции страницы.
Предметный протокол: SurrealDB custom API
Шаг 1 — зафиксировать boundary именно для SurrealDB custom API: Исправление проверяет целевой scope против неизменяемого authenticated level до поиска и запуска endpoint и возвращает 403 для недопустимой границы. Шаг 2 — подтвердить runtime и собрать только фактический server binary hash, версию, включённость DEFINE API, классы ролей и наличие shared instance без имён клиентов. Шаг 3 — построить предметный артефакт «таблицу authenticated level × requested namespace × requested database × route kind × HTTP/result class», не заменяя его общим uptime или одним кодом ответа. Шаг 4 — выполнить отдельный контроль: В disposable instance создайте два синтетических namespace с безвредными read-only endpoints. У роли первой базы запрос ко второй должен быть отклонён до вызова handler; собственный endpoint служит положительным контролем. Шаг 5 — применить проверяемое правило результата: Свой scope отвечает ожидаемо, cross-scope даёт 403 и счётчик второго handler остаётся нулевым; root-control проверяют отдельно и не смешивают с database principal. Шаг 6 — остановиться при условии: Не переносить опыт на production tenants, не использовать реальные записи, не ослаблять PERMISSIONS и не считать PERMISSIONS WHERE восстановленной системной изоляцией. Шаг 7 — после cleanup передать только версия и digest, тип principal, обезличенные scope A/B, route kind, status, handler-call counter и cleanup fixture. Эта связка version boundary, собственного измерения, negative control, stop-line и минимального пакета относится к одной самостоятельной боли и не переносится механически на другой компонент.
Материал подготовлен редакцией VOne с помощью автоматизированного черновика. Факты и границы вывода сверены 4 сентября 2026 года по прямой advisory и первичному источнику. Текст написан самостоятельно; опасные действия и реальные пользовательские данные не использовались.
Источники и проверка
- GitHub Advisory GHSA-848m-r628-vrxw проверено 2026-09-04
- SurrealDB cross-scope fix commit проверено 2026-09-04
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.