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

OpenTofu: provider install не следует symlink за working tree

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

Безопасная проверка OpenTofu provider installer по ghsa-wcmj-x466-56mm: применимость, обратимый опыт для границы «component-safe no-follow placement of provider package under intended install root», матрица результата и stop-rule без production-данных.

Отделите advisory от установки OpenTofu provider installer

Сначала отделите факт advisory от гипотезы о своей установке OpenTofu provider installer. Зафиксируйте package source, рабочая сборка version, build digest, feature/config reachability и роль, которая достигает ветви. GitHub Reviewed Advisory сообщает «OpenTofu: Provider cache installation follows root-module-controlled package directory symlink and writes outside the working tree», даты 2026-06-23/2026-06-23 и границы «github.com/opentofu/opentofu >= 1.11.0, < 1.11.7; first patched 1.11.7 | github.com/opentofu/opentofu < 1.10.10; first patched 1.10.10». Это само по себе не устанавливает affected code в конкретной сборке: fork и vendor backport требуют commit provenance. Пока provenance или reachability неизвестны, статус только unknown, без вывода об эксплуатации, популярности или ущербе.

Назовите отдельный защитный invariant

Опишите один узкий invariant: component-safe no-follow placement of provider package under intended install root. Отдельная боль пользователя: root-module-controlled symlink перенаправляет содержимое provider package за пределы рабочей директории. Укажите субъект, объект, trust boundary, решение policy и самый ранний чувствительный side effect. Pass-критерий задайте заранее: symlink destination отклоняется before write; normal directory получает только expected test files. Он отличается от общего «ошибки нет»: защита обязана сработать до read, send, execute, write, cache commit, credential issue или process exit. Решающий артефакт — path-component / object-type / canonical-root / would-write / marker-before-after; в нём нет имён, IP, содержимого файлов и персональных данных.

Проведите дифференциальный обратимый опыт

Создайте обратимый стенд: disposable tree, internal target marker и symlink inside provider path; package content is harmless bytes. Затем провести dry-run resolver и test installer с destination allowlist, затем сверить marker digest. Все значения синтетические, сеть отключена либо loopback-only, filesystem ограничен mkdtemp, persistence — in-memory или rollback transaction. Добавьте positive control и boundary case, одинаковый timeout и deterministic ordering. До проверки оставьте в отчёте input digest и expected row; после — result class, counters, final-state digest и cleanup proof. Нагрузочный или эксплуатационный вариант не нужен и запрещён.

Прочитайте матрицу до side effect

Заполните матрицу «path-component / object-type / canonical-root / would-write / marker-before-after» строка за строкой. Сопоставьте observed с правилом «symlink destination отклоняется before write; normal directory получает только expected test files», особой строкой отмечая stage решения и факт любого побочного эффекта. Positive control обязан пройти тот же код: иначе deny может означать сломанный стенд. Для гонки или cache/state темы изменяйте только детерминированный interleaving и повторяйте малое число раз. Green возможен, когда безопасный сценарий работает, пограничный отклонён раньше действия, а state digest соответствует ожидаемому.

Подтвердите механизм исправления

Проверьте patch provenance по смыслу: diff должен реализовать «component-safe no-follow placement of provider package under intended install root», а не просто изменить номер релиза. На одном лабораторный сценарий сравните текущую и candidate build и оставьте в отчёте «path-component / object-type / canonical-root / would-write / marker-before-after». Диапазон «github.com/opentofu/opentofu >= 1.11.0, < 1.11.7; first patched 1.11.7 | github.com/opentofu/opentofu < 1.10.10; first patched 1.10.10» используйте как фильтр, не как доказательство. Если update требует rollout, эта статья не разрешает production change: нужен отдельный контракт с backup, canary, readiness и rollback. Не обещайте, что один фикс закрывает весь класс риска или даёт поисковый итог.

Примените stop-rule и privacy boundary

Stop-rule: остановить опыт при пути вне mkdtemp, privileged owner или настоящем provider binary. Также примените stop-rule к опыт при внешнем адресе, real credential, privilege prompt, данных вне лабораторный сценарий, необратимой записи, росте ресурсов, отсутствии normal control или cleanup. Статус будет blocked, а не «почти прошёл». Для поддержки передайте ghsa-wcmj-x466-56mm, OpenTofu provider installer, version/build provenance, «github.com/opentofu/opentofu >= 1.11.0, < 1.11.7; first patched 1.11.7 | github.com/opentofu/opentofu < 1.10.10; first patched 1.10.10», sanitized «path-component / object-type / canonical-root / would-write / marker-before-after», expected/observed, stop reason и прямые source URLs. Не публикуйте payload, чужие логи, конфиги и приватные ссылки.

Завершите деревом решения

Дерево решения для OpenTofu provider installer: proven patched/non-affected build — not-applicable; недостижимая по документированной конфигурации ветвь — not-reachable; candidate build выполняет «symlink destination отклоняется before write; normal directory получает только expected test files» — ready-for-reviewed-update; наблюдается «root-module-controlled symlink перенаправляет содержимое provider package за пределы рабочей директории» — fail и эскалация владельцу. Иначе unknown. К каждому листу приложите один факт из «path-component / object-type / canonical-root / would-write / marker-before-after» и criterion «остановить опыт при пути вне mkdtemp, privileged owner или настоящем provider binary». Такой ответ самостоятельный: он решает конкретный intent через reversible test, matrix, red flags и минимальный support packet, а не размножает страницу заменой бренда.

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

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

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

Ответы

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

Ваш ответ

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

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

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