Защитная проверка uutils chmod по ghsa-4x34-chg5-mwjj: применимость, обратимый fixture для границы «монотонное накопление ошибки по всему обходу вместо перезаписи результатом последнего файла», измеримый результат и stop-rule без production-данных.
Докажите применимость к uutils chmod
Соберите минимальный паспорт компонента до любого опыта. Для uutils chmod и границы «монотонное накопление ошибки по всему обходу вместо перезаписи результатом последнего файла» внесите в карточку версию runtime, package source, build digest, активный feature/config path и роль, которая достигает функции. Reviewed Advisory фиксирует «uu_chmod < 0.6.0; first patched 0.6.0», публикацию 2026-07-06 и обновление 2026-07-06, но не подтверждает наличие у вас уязвимого бинарника, реальную эксплуатацию или спрос. Получившийся паспорт нужен и для воспроизводимости, и для отката решения. Если версия собрана из fork или vendor patch, сохраните commit/patch provenance отдельно: одна строка semver не отвечает, присутствует ли исправление.
Зафиксируйте отдельный защитный контракт
Опишите проверяемый инвариант своими словами: любой отказ даёт nonzero независимо от порядка; all-success даёт zero; список failed entries остаётся доступен. Исходная пользовательская боль здесь конкретна — ранний отказ теряется, если последняя запись успешна, и вызывающий скрипт принимает неполный chmod за полный успех. Не смешивайте её с общими страницами про обновления, XSS, SSRF или отказ в обслуживании: механизм и ожидаемый ответ должны быть самостоятельными. Перед стартом укажите субъект, объект, доверенную границу, разрешённый побочный эффект и сигнал нарушения. Для этого материала артефакт решения — матрица traversal-order / entry-results / first-failure / last-result / aggregate-exit / failed-count. Он не содержит токены, IP, содержимое файлов или персональные данные; достаточно классов результата, счётчиков и digest тестового состояния.
Поставьте обратимый минимальный опыт
Разверните обратимый стенд: fake tree walker с последовательностями success/failure/success и success-only; права реальных файлов не меняются. Далее прогнать разные позиции отказа, собрать per-entry result и итоговый exit, затем переставить порядок для проверки инварианта. Используйте минимальные синтетические значения, запрет внешней сети, отдельный temp root и положительный контроль, который проходит тот же код без пограничного условия. Перед опытом внесите в карточку digest fixture, версию и timeout, после — digest состояния и cleanup result. Не переносите пример на production и не увеличивайте нагрузку ради наглядности. Если проверяемый модуль нельзя подменить или изолировать, ограничьтесь статической проверкой patch/release и отложите runtime-подтверждение.
Сведите наблюдения в матрицу решения
Результат оценивайте по заранее заданному правилу, а не по впечатлению от лога. Защитный исход: любой отказ даёт nonzero независимо от порядка; all-success даёт zero; список failed entries остаётся доступен. В каждой строке для ряда в «матрица traversal-order / entry-results / first-failure / last-result / aggregate-exit / failed-count» сохраните expected и observed, а также точную стадию отказа: parse, validate, authorize, allocate, open, mutate или cleanup. Ошибка до опасного действия и ошибка после него — разные результаты. Normal-control обязан доказать, что тест не сломан целиком. Повторите fixture не менее двух раз только в пределах локального бюджета: одинаковый result class важнее длинного stdout.
Остановитесь при первом выходе за границу
Примените stop-rule без торга: сразу завершить проверку до рекурсивного chmod на диске; отсутствие списка результатов или order-dependent exit считать блокером. Ещё одни красные флаги — изменение объекта вне temp, неожиданный сетевой вызов, рост памяти, privilege prompt, необратимая запись, расхождение digest или отсутствие положительный контроль. При первом таком флаге завершите процесс, сохраните лишь обезличенную матрицу и верните стенд к исходному состоянию. Не публикуйте payload, реальные конфиги и подробности чужой системы. Severity не разрешает расширять тест: цель — подтвердить защитный контракт с минимальным воздействием.
Передайте поддержке минимальный пакет
Для владельца компонента подготовьте короткий пакет: ghsa-4x34-chg5-mwjj, uutils chmod, installed/build version, upstream commit, применимый диапазон «uu_chmod < 0.6.0; first patched 0.6.0», описание fixture без чувствительных значений, матрица traversal-order / entry-results / first-failure / last-result / aggregate-exit / failed-count, положительный контроль, stop-rule, cleanup proof и ссылки на advisory/upstream. Особой строкой отметьте unknown: reachability, vendor backport, runtime configuration и наличие compensating control. Решение может быть только одним из трёх: not-applicable с доказательством, update/test по утверждённому окну или blocked до безопасного стенда. Так поддержка получает минимальные данные для воспроизведения, а публичный материал не создаёт обещания индексацию, позиции, универсальную защищённость или результат на чужой инфраструктуре.
Свяжите исправление с механизмом uutils chmod
Для uutils chmod свяжите исправление именно с механизмом «монотонное накопление ошибки по всему обходу вместо перезаписи результатом последнего файла», а не только с номером релиза. В changelog или diff найдите изменение, которое делает истинным результат «любой отказ даёт nonzero независимо от порядка; all-success даёт zero; список failed entries остаётся доступен», и сопоставьте его с диапазоном «uu_chmod < 0.6.0; first patched 0.6.0». Далее повторите fixture «fake tree walker с последовательностями success/failure/success и success-only; права реальных файлов не меняются» на текущем и кандидатном артефакте в одинаковой изоляции; сравнивайте «матрица traversal-order / entry-results / first-failure / last-result / aggregate-exit / failed-count», а не произвольные строки лога. Если vendor backport меняет номер версии, сохраните commit/diff provenance и сборочный digest. План возврата должен восстанавливать предыдущий тестовый артефакт, но не возвращать production к заведомо сомнительной версии. Критерий приёмки для этой отдельной боли — любой отказ даёт nonzero независимо от порядка; all-success даёт zero; список failed entries остаётся доступен; критерий прекращения — сразу завершить проверку до рекурсивного chmod на диске; отсутствие списка результатов или order-dependent exit считать блокером. Пока оба критерия не доказаны, статус обозначьте blocked или unknown, не подменяя результат предположением.
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые ссылки, безопасный опыт, privacy-ограничения и отсутствие рекламных обещаний затем перепроверены по первичным источникам.
Источники и проверка
- GitHub Reviewed Advisory ghsa-4x34-chg5-mwjj проверено 2026-08-31
- Upstream-репозиторий uutils chmod проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.