Защитная проверка Coder provisioner upload по ghsa-f962-qm93-mj4c: применимость, обратимый fixture для границы «верхняя граница client-supplied FileSize до make byte-slice независимо от wire-size сообщения», измеримый результат и stop-rule без production-данных.
Докажите применимость к Coder provisioner upload
Начните не с severity, а с доказательства применимости. Для Coder provisioner upload и границы «верхняя граница client-supplied FileSize до make byte-slice независимо от wire-size сообщения» зафиксируйте runtime version, package source, отпечаток бинарника, активный feature/config path и роль, которая достигает функции. Reviewed Advisory фиксирует «github.com/coder/coder/v2 >= 2.34.0, < 2.34.2; first patched 2.34.2 | github.com/coder/coder/v2 >= 2.33.0, < 2.33.8; first patched 2.33.8 | github.com/coder/coder/v2 >= 2.30.0, < 2.32.7; first patched 2.32.7 | github.com/coder/coder/v2 >= 2.24.0, < 2.29.17; first patched 2.29.17», публикацию 2026-07-06 и обновление 2026-07-06, но само по себе не устанавливает наличие у вас уязвимого бинарника, реальную эксплуатацию или спрос. Такой порядок не превращает advisory в утверждение о конкретной установке. Если версия собрана из fork или vendor patch, зафиксируйте commit/patch provenance отдельно: одна строка semver не отвечает, присутствует ли исправление.
Зафиксируйте отдельный защитный контракт
Выразите проверяемый инвариант своими словами: допустимые значения следуют контракту; превышение даёт typed error, allocator-call и allocated-bytes равны нулю. Исходная пользовательская боль здесь конкретна — короткое сообщение декларирует огромный размер и вызывает unrecoverable allocation раньше загрузки содержимого. Не смешивайте её с общими страницами про обновления, XSS, SSRF или отказ в обслуживании: механизм и ожидаемый ответ должны быть самостоятельными. До опыта укажите субъект, объект, доверенную границу, разрешённый побочный эффект и сигнал нарушения. Для этого материала артефакт решения — матрица declared-size / wire-size / validation-stage / allocator-calls / allocated-bytes / result. Он не содержит токены, IP, содержимое файлов или персональные данные; достаточно классов результата, счётчиков и digest тестового состояния.
Поставьте обратимый минимальный опыт
Разверните обратимый стенд: unit fixture DataUpload с boundary-1, boundary и boundary+1; allocator заменён счётчиком, байтовый payload пуст. Следующим шагом декодировать fixtures и фиксировать validation result до обращения к allocator, не запрашивая фактический большой буфер. Используйте минимальные синтетические значения, запрет внешней сети, отдельный temp root и положительный контроль, который проходит тот же код без пограничного условия. Перед опытом зафиксируйте digest fixture, версию и timeout, после — digest состояния и cleanup result. Не переносите пример на production и не увеличивайте нагрузку ради наглядности. Когда этот узел нельзя подменить или изолировать, ограничьтесь статической проверкой patch/release и отложите runtime-подтверждение.
Сведите наблюдения в матрицу решения
Исход разбирайте по заранее заданному правилу, а не по впечатлению от лога. Защитный исход: допустимые значения следуют контракту; превышение даёт typed error, allocator-call и allocated-bytes равны нулю. Для каждого ряда в «матрица declared-size / wire-size / validation-stage / allocator-calls / allocated-bytes / result» зафиксируйте expected и observed, а также точную стадию отказа: parse, validate, authorize, allocate, open, mutate или cleanup. Ошибка до опасного действия и ошибка после него — разные результаты. Normal-control обязан доказать, что тест не сломан целиком. Повторите fixture не менее двух раз только в пределах локального бюджета: одинаковый класс исхода важнее длинного stdout.
Остановитесь при первом выходе за границу
Примените stop-rule без торга: прекратить работу, если allocator нельзя подменить, если процесс начинает резервировать память или если cap не связан с серверным контрактом. Вторичные красные флаги — изменение объекта вне temp, неожиданный сетевой вызов, рост памяти, privilege prompt, необратимая запись, расхождение digest или отсутствие положительный контроль. При каждом таком флаге завершите процесс, зафиксируйте лишь обезличенную матрицу и верните стенд к исходному состоянию. Не публикуйте payload, реальные конфиги и подробности чужой системы. Severity не разрешает расширять тест: цель — подтвердить защитный контракт с минимальным воздействием.
Передайте поддержке минимальный пакет
Для владельца компонента подготовьте короткий пакет: ghsa-f962-qm93-mj4c, Coder provisioner upload, installed/build version, upstream commit, применимый диапазон «github.com/coder/coder/v2 >= 2.34.0, < 2.34.2; first patched 2.34.2 | github.com/coder/coder/v2 >= 2.33.0, < 2.33.8; first patched 2.33.8 | github.com/coder/coder/v2 >= 2.30.0, < 2.32.7; first patched 2.32.7 | github.com/coder/coder/v2 >= 2.24.0, < 2.29.17; first patched 2.29.17», описание fixture без чувствительных значений, матрица declared-size / wire-size / validation-stage / allocator-calls / allocated-bytes / result, положительный контроль, stop-rule, cleanup proof и ссылки на advisory/upstream. В отдельном поле отметьте unknown: reachability, vendor backport, runtime configuration и наличие compensating control. Решение может быть только одним из трёх: not-applicable с доказательством, update/test по утверждённому окну или blocked до безопасного стенда. Так поддержка получает минимальные данные для воспроизведения, а публичный материал не создаёт обещания индексацию, позиции, универсальную защищённость или результат на чужой инфраструктуре.
Свяжите исправление с механизмом Coder provisioner upload
Для Coder provisioner upload свяжите исправление именно с механизмом «верхняя граница client-supplied FileSize до make byte-slice независимо от wire-size сообщения», а не только с номером релиза. В changelog или diff найдите изменение, которое делает истинным результат «допустимые значения следуют контракту; превышение даёт typed error, allocator-call и allocated-bytes равны нулю», и сопоставьте его с диапазоном «github.com/coder/coder/v2 >= 2.34.0, < 2.34.2; first patched 2.34.2 | github.com/coder/coder/v2 >= 2.33.0, < 2.33.8; first patched 2.33.8 | github.com/coder/coder/v2 >= 2.30.0, < 2.32.7; first patched 2.32.7 | github.com/coder/coder/v2 >= 2.24.0, < 2.29.17; first patched 2.29.17». Следующим шагом повторите fixture «unit fixture DataUpload с boundary-1, boundary и boundary+1; allocator заменён счётчиком, байтовый payload пуст» на текущем и кандидатном артефакте в одинаковой изоляции; сравнивайте «матрица declared-size / wire-size / validation-stage / allocator-calls / allocated-bytes / result», а не произвольные строки лога. Если vendor backport меняет номер версии, зафиксируйте commit/diff provenance и сборочный digest. План возврата должен восстанавливать предыдущий тестовый артефакт, но не возвращать production к заведомо сомнительной версии. Критерий приёмки для этой отдельной боли — допустимые значения следуют контракту; превышение даёт typed error, allocator-call и allocated-bytes равны нулю; критерий прекращения — прекратить работу, если allocator нельзя подменить, если процесс начинает резервировать память или если cap не связан с серверным контрактом. Пока оба критерия не доказаны, статус обозначьте blocked или unknown, не подменяя результат предположением.
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые ссылки, безопасный опыт, privacy-ограничения и отсутствие рекламных обещаний затем перепроверены по первичным источникам.
Источники и проверка
- GitHub Reviewed Advisory ghsa-f962-qm93-mj4c проверено 2026-08-31
- Upstream-репозиторий Coder provisioner upload проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.