Защитная проверка Coder по ghsa-5wg6-jmq2-53pw: применимость, обратимый fixture для границы «сопоставление username из hostname с владельцем workspace, найденного по UUID, до решения same-origin», измеримый результат и stop-rule без production-данных.
Докажите применимость к Coder
Соберите минимальный паспорт компонента до любого опыта. Для Coder и границы «сопоставление username из hostname с владельцем workspace, найденного по UUID, до решения same-origin» внесите в карточку runtime-сборку, package source, digest сборки, активный 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.29.17; first patched 2.29.17», публикацию 2026-07-06 и обновление 2026-07-06, но само по себе не устанавливает наличие у вас уязвимого бинарника, реальную эксплуатацию или спрос. Получившийся паспорт нужен и для воспроизводимости, и для отката решения. Если версия собрана из fork или vendor patch, оставьте в отчёте commit/patch provenance отдельно: одна строка semver не отвечает, присутствует ли исправление.
Зафиксируйте отдельный защитный контракт
Опишите проверяемый инвариант своими словами: allow возможен только при совпадении подтверждённого владельца и origin; подмена username при чужом UUID всегда deny. Исходная пользовательская боль здесь конкретна — UUID разрешает workspace, но неподтверждённое имя в поддомене ошибочно используется как доказательство общего владельца. Не смешивайте её с общими страницами про обновления, XSS, SSRF или отказ в обслуживании: механизм и ожидаемый ответ должны быть самостоятельными. До запуска укажите субъект, объект, доверенную границу, разрешённый побочный эффект и сигнал нарушения. Для этого материала артефакт решения — матрица host-user / workspace-id / resolved-owner / origin-owner / allow-deny / reason. Он не содержит токены, IP, содержимое файлов или персональные данные; достаточно классов результата, счётчиков и digest тестового состояния.
Поставьте обратимый минимальный опыт
Соберите обратимый стенд: чистая функция разбора hostname и таблица двух пользователей, двух workspace UUID и wildcard-domain; браузер и cookie не нужны. После этого перебрать корректные и подменённые комбинации username/UUID, записывая resolved owner и итог CORS без сетевых запросов. Используйте минимальные синтетические значения, запрет внешней сети, отдельный temp root и эталон штатного пути, который проходит тот же код без пограничного условия. Перед опытом внесите в карточку digest fixture, версию и timeout, после — digest состояния и cleanup result. Не переносите пример на production и не увеличивайте нагрузку ради наглядности. Если проверяемый модуль нельзя подменить или изолировать, ограничьтесь статической проверкой patch/release и отложите runtime-подтверждение.
Сведите наблюдения в матрицу решения
Итог определяйте по заранее заданному правилу, а не по впечатлению от лога. Защитный исход: allow возможен только при совпадении подтверждённого владельца и origin; подмена username при чужом UUID всегда deny. По каждому ряда в «матрица host-user / workspace-id / resolved-owner / origin-owner / allow-deny / reason» оставьте в отчёте expected и observed, а также точную стадию отказа: parse, validate, authorize, allocate, open, mutate или cleanup. Ошибка до опасного действия и ошибка после него — разные результаты. Normal-control обязан доказать, что тест не сломан целиком. Повторите fixture не менее двух раз только в пределах локального бюджета: одинаковый класс исхода важнее длинного stdout.
Остановитесь при первом выходе за границу
Примените stop-rule без торга: прекратить работу, если проверка требует сессионный cookie, живой wildcard DNS или данные реальных пользователей. Вторичные красные флаги — изменение объекта вне temp, неожиданный сетевой вызов, рост памяти, privilege prompt, необратимая запись, расхождение digest или отсутствие эталон штатного пути. Если обнаружен хотя бы один флаге завершите процесс, оставьте в отчёте лишь обезличенную матрицу и верните стенд к исходному состоянию. Не публикуйте payload, реальные конфиги и подробности чужой системы. Severity не разрешает расширять тест: цель — подтвердить защитный контракт с минимальным воздействием.
Передайте поддержке минимальный пакет
Для владельца компонента подготовьте короткий пакет: ghsa-5wg6-jmq2-53pw, Coder, 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.29.17; first patched 2.29.17», описание fixture без чувствительных значений, матрица host-user / workspace-id / resolved-owner / origin-owner / allow-deny / reason, эталон штатного пути, stop-rule, cleanup proof и ссылки на advisory/upstream. Особой строкой отметьте unknown: reachability, vendor backport, runtime configuration и наличие compensating control. Решение может быть только одним из трёх: not-applicable с доказательством, update/test по утверждённому окну или blocked до безопасного стенда. Так поддержка получает минимальные данные для воспроизведения, а публичный материал не обещает индексацию, позиции, универсальную защищённость или результат на чужой инфраструктуре.
Свяжите исправление с механизмом Coder
Для Coder свяжите исправление именно с механизмом «сопоставление username из hostname с владельцем workspace, найденного по UUID, до решения same-origin», а не только с номером релиза. В changelog или diff найдите изменение, которое делает истинным результат «allow возможен только при совпадении подтверждённого владельца и origin; подмена username при чужом UUID всегда deny», и сопоставьте его с диапазоном «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.29.17; first patched 2.29.17». После этого повторите fixture «чистая функция разбора hostname и таблица двух пользователей, двух workspace UUID и wildcard-domain; браузер и cookie не нужны» на текущем и кандидатном артефакте в одинаковой изоляции; сравнивайте «матрица host-user / workspace-id / resolved-owner / origin-owner / allow-deny / reason», а не произвольные строки лога. Если vendor backport меняет номер версии, оставьте в отчёте commit/diff provenance и сборочный digest. План возврата должен восстанавливать предыдущий тестовый артефакт, но не возвращать production к заведомо сомнительной версии. Критерий приёмки для этой отдельной боли — allow возможен только при совпадении подтверждённого владельца и origin; подмена username при чужом UUID всегда deny; критерий прекращения — прекратить работу, если проверка требует сессионный cookie, живой wildcard DNS или данные реальных пользователей. Пока оба критерия не доказаны, статус обозначьте blocked или unknown, не подменяя результат предположением.
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые ссылки, безопасный опыт, privacy-ограничения и отсутствие рекламных обещаний затем перепроверены по первичным источникам.
Источники и проверка
- GitHub Reviewed Advisory ghsa-5wg6-jmq2-53pw проверено 2026-08-31
- Upstream-репозиторий Coder проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.