К обсуждениям

SurrealDB 3.2.0: проверяем границу custom API между namespace

Редакция VOne Технологии

Как проверить, что 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 и первичному источнику. Текст написан самостоятельно; опасные действия и реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.