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

SeaweedFS S3: проверка границы bucket для Copy-Source

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

Защитная диагностика SeaweedFS по GHSA-56wq-x3wv-3ff4: version inventory, обратимый fixture, PASS/FAIL/Unknown, stop-rule и минимальный пакет доказательств без production-данных.

Что именно проверяет карточка SeaweedFS

Здесь не проводится общий аудит продукта и не пересказывается чужая публикация. Проверяется одна граница: нормализация X-Amz-Copy-Source может разрешить чтение объекта из другого bucket. Advisory GHSA-56wq-x3wv-3ff4 формулирует upstream-сигнал как «SeaweedFS: Path traversal in the S3 gateway X-Amz-Copy-Source header allows cross-bucket object read» и задаёт version inventory «github.com/seaweedfs/seaweedfs: < 0.0.0-20260612000715-b44cf51fe931; первая исправленная версия: 0.0.0-20260612000715-b44cf51fe931». Само совпадение версии означает только affected_candidate. Оно не подтверждает достижимость пути, наличие инцидента или ущерба. Для not_present нужен runtime/SBOM, для outside_range — resolved dependency, для patched_or_backported — release либо commit и повторяемый regression result. Если связать работающий artifact с revision нельзя, честный ответ — Unknown. Уникальная модель наблюдения для этой карточки связывает гарантию «источник копирования обязан канонизироваться и авторизоваться как отдельный объект до операции записи» с действием «в disposable S3-пространстве владелец bucket A копирует свой пустой объект, затем запрашивает маркер из недоступного bucket B без реальных данных». Она считается полной только вместе с колонками «principal | source bucket | canonical key | read decision | destination state» и отдельным аварийным условием «появление копии чужого маркера, изменение ACL или обращение к внешнему storage». Эти пять элементов образуют самостоятельную проверку именно SeaweedFS, а не заменяемый шаблон для соседнего продукта.

Дерево решения по версии и функции SeaweedFS

Соберите package manager, lock-файл, digest образа или бинарника, feature flag и фактическую точку вызова. Сначала установите, присутствует ли github.com/seaweedfs/seaweedfs в runtime, а не только в исходном manifest. Затем сравните доказанную версию с границей «github.com/seaweedfs/seaweedfs: < 0.0.0-20260612000715-b44cf51fe931; первая исправленная версия: 0.0.0-20260612000715-b44cf51fe931». Ветка not_present завершает проверку без запуска fixture; outside_range требует сохранённого вывода inventory; affected_candidate переходит к изолированному тесту; patched_or_backported требует ссылки на исправление и его test evidence. Не подменяйте эти состояния одним HTTP 200, названием контейнера, датой сборки или отсутствием жалоб.

Обратимый fixture для механизма GHSA-56wq-x3wv-3ff4

Целевая гарантия сформулирована так: источник копирования обязан канонизироваться и авторизоваться как отдельный объект до операции записи. Проверка: в disposable S3-пространстве владелец bucket A копирует свой пустой объект, затем запрашивает маркер из недоступного bucket B без реальных данных. Среда должна быть одноразовой, без production snapshot, персональных данных, токенов и открытого исходящего доступа. До boundary-case выполните benign control, чтобы доказать достижимость нужной ветки. Заранее установите таймаут, лимит CPU/RSS, разрешённое дерево temp и сетевой allowlist loopback. После каждого шага прочитайте состояние обратно и удалите созданные объекты. Не используйте опубликованные exploit payload или реальные идентификаторы.

Как заполнить таблицу «principal | source bucket | canonical key | read decision | destination state»

Записывайте по одной строке на benign control и boundary-case: principal | source bucket | canonical key | read decision | destination state. PASS означает, что control дошёл до нужной функции, граничный случай был управляемо отклонён, состояние и side effects не изменились. FAIL допустим только при работающем control и наблюдаемом нарушении заявленной гарантии. Unknown обязателен при недоказанной версии, недостижимой ветке, неполной телеметрии, раннем срабатывании limiter или неоднозначном readback. Такая матрица отделяет наблюдение от догадки и позволяет другому инженеру повторить проверку без доступа к исходной среде.

Исправление и безопасная последовательность rollout

Если получен affected_candidate или воспроизводимый FAIL, выберите поддерживаемую upstream-ветку с исправлением; ориентир inventory: github.com/seaweedfs/seaweedfs: < 0.0.0-20260612000715-b44cf51fe931; первая исправленная версия: 0.0.0-20260612000715-b44cf51fe931. Сначала сохраните lock/digest и fixture, затем измените только компонент, повторите benign и boundary cases, проверьте readback и лишь потом переходите к canary. Не смешивайте обновление с заменой proxy, прав, storage и формата данных: это разрушает причинность. Защитный фильтр может быть временной мерой, но не заменяет исправление. Stop-rule этого материала: появление копии чужого маркера, изменение ACL или обращение к внешнему storage. При его срабатывании тест немедленно прекращается, артефакты изолируются, production не меняется.

Пакет доказательств для владельца SeaweedFS

В handoff включите GHSA-56wq-x3wv-3ff4, границу «github.com/seaweedfs/seaweedfs: < 0.0.0-20260612000715-b44cf51fe931; первая исправленная версия: 0.0.0-20260612000715-b44cf51fe931», artifact digest, source revision, feature state, hash fixture, лимиты, результаты control и boundary-case, одну строку из таблицы «principal | source bucket | canonical key | read decision | destination state», итог PASS/FAIL/Unknown и точную причину Unknown. Добавьте ссылки на GitHub Advisory Database и upstream advisory/fix, но не копируйте длинные фрагменты. Отдельной строкой укажите, что проверялась боль «нормализация X-Amz-Copy-Source может разрешить чтение объекта из другого bucket», а не весь продукт. Уберите hostname, IP, usernames, cookies, tokens, конфиги и содержимое пользовательских объектов. Так evidence остаётся минимальным, проверяемым и пригодным для повторного решения. Для машиночитаемого журнала используйте независимые ключи `seaweedfs-copy-source-bucket-boundary-check-inventory-proof`, `seaweedfs-copy-source-bucket-boundary-check-benign-control`, `seaweedfs-copy-source-bucket-boundary-check-boundary-observation`, `seaweedfs-copy-source-bucket-boundary-check-state-readback`, `seaweedfs-copy-source-bucket-boundary-check-sideeffect-diff`, `seaweedfs-copy-source-bucket-boundary-check-stop-trigger`, `seaweedfs-copy-source-bucket-boundary-check-final-verdict` и `seaweedfs-copy-source-bucket-boundary-check-cleanup-proof`. Они не должны содержать значения секретов; это только имена полей, позволяющие не спутать доказательства этой проверки с соседними карточками.

Материал подготовлен редакцией VOne с помощью ИИ; даты, версии, первичные источники, обратимый fixture, stop-rule, privacy-ограничения и отсутствие рекламных обещаний перепроверены человеком.

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

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

Ответы

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

Ваш ответ

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

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

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