Защитная инструкция по K3s и ghsa-jxr7-mqhw-9p98: применимость, обратимый тест «удержание файлов ZIP-снимка etcd внутри каталога восстановления», измеримый результат, stop-rule и обезличенный пакет для поддержки.
Когда проверка применима к K3s
Эта инструкция решает одну узкую задачу: удержание файлов ZIP-снимка etcd внутри каталога восстановления. Сначала снимите версию реально запущенного компонента, способ установки, lockfile и digest сборки. Reviewed advisory задаёт пакетную границу «go:github.com/k3s-io/k3s >= 1.35.0-rc1, < 1.35.3 → fixed 1.35.3; go:github.com/k3s-io/k3s >= 1.34.0-rc1, < 1.34.6 → fixed 1.34.6; go:github.com/k3s-io/k3s < 1.33.10 → fixed 1.33.10», но одна запись в dependency-файле не доказывает, какой код исполняется сейчас. Отдельно установите, достижим ли затронутый путь в вашей конфигурации. Если runtime-версия, provenance или доступность функции не подтверждены, результат называется unknown, а не vulnerable и не safe. Такой порядок не переносит severity на конкретную систему.
Что подтверждено в ghsa-jxr7-mqhw-9p98
GitHub Reviewed Advisory опубликована 2026-07-14, обновлена 2026-07-14 и связывает K3s с механизмом: имя записи архива с переходом по каталогам может записать тестовый файл вне временного restore-root. В ней указана граница версий «go:github.com/k3s-io/k3s >= 1.35.0-rc1, < 1.35.3 → fixed 1.35.3; go:github.com/k3s-io/k3s >= 1.34.0-rc1, < 1.34.6 → fixed 1.34.6; go:github.com/k3s-io/k3s < 1.33.10 → fixed 1.33.10». Upstream-репозиторий подтверждает происхождение проекта; он не подтверждает версию вашей установки, факт эксплуатации или ущерб. Поэтому карточка отделяет факт advisory от локальной применимости. Новостной заголовок, форумная реплика и поисковый сниппет остаются только лидами и не используются как доказательство причины, массовости либо затронутости конкретного сервиса.
Обратимый стендовый опыт: удержание файлов ZIP-снимка etcd внутри каталога восстановления
Безопасный сценарий: в изолированном каталоге без данных кластера собрать ZIP с обычной записью и безвредной traversal-записью sentinel.txt, запустить только штатную проверку восстановления и сравнить дерево файлов до и после. До запуска зафиксируйте baseline, версию, digest артефакта, ограничения CPU, памяти, времени и файлов, а также точную команду cleanup. Ожидаемый результат: опасная запись отклоняется, обычная остаётся внутри restore-root, а за пределами каталога не появляется sentinel. Опыт проводится только с синтетическими данными и на loopback либо в закрытом одноразовом namespace. Нельзя переносить туда production-конфигурацию, токены, журналы, адреса, пользовательские документы или чужие endpoints. Один граничный пример и один normal control достаточны для решения; расширять нагрузку ради демонстрации не нужно.
Измеримый результат для K3s
Полезный артефакт этой темы — diff дерева путей, exit status и хэш обычного файла при доказанном отсутствии записи вне restore-root. Он позволяет различить четыре ветви. Passed означает, что граничный fixture дал ожидаемое защитное решение, normal control сохранил функцию, а все ресурсы вернулись к baseline. Failed означает одно воспроизводимое расхождение без увеличения масштаба. Not-applicable требует доказанной runtime-версии вне диапазона или недостижимого пути. Unknown сохраняют, если нельзя доказать provenance либо наблюдение неоднозначно. В отчёт входят числа, статусы и хэши, но не содержимое входных данных и не предположение о намерениях атакующего.
Развилка диагностики: удержание файлов ZIP-снимка etcd внутри каталога восстановления
Для snapshot ZIP проверяют не строку имени саму по себе, а canonical destination после join и clean. Каждая запись обязана иметь общий префикс с restore-root уже после нормализации. Контрольный sentinel создают заранее за пределами root и сверяют его inode, mtime и hash: отсутствие нового файла не должно маскировать перезапись существующего. Отчёт содержит только искусственные пути и не раскрывает структуру реального etcd snapshot.
Обновление, повтор и отрицательный контроль
Если runtime попадает в «go:github.com/k3s-io/k3s >= 1.35.0-rc1, < 1.35.3 → fixed 1.35.3; go:github.com/k3s-io/k3s >= 1.34.0-rc1, < 1.34.6 → fixed 1.34.6; go:github.com/k3s-io/k3s < 1.33.10 → fixed 1.33.10», обновление берут только из доверенного канала проекта и сверяют его provenance. После обновления запускают тот же fixture с теми же лимитами: замена сценария не доказывает исправление. Затем повторяют normal control, чтобы увидеть регрессию доступности или совместимости. Временное containment допустимо лишь как узкое, обратимое и измеримое ограничение затронутого пути; оно не переименовывается в исправление. Rollback заранее привязывают к конкретному признаку, а не к субъективному ощущению стабильности.
Stop-rule и минимальный пакет для поддержки
Жёсткое правило остановки: не запускать реальное восстановление и остановиться до записи, если инструмент требует production snapshot, credentials или системный каталог. Для поддержки достаточно версии runtime и dependency, digest сборки, точного режима функции, минимального synthetic fixture, expected/observed, resource limits, времени опыта и решения passed/failed/not-applicable/unknown. Перед передачей удалите credentials, cookies, IP-адреса, внутренние имена, абсолютные пути и любые пользовательские данные. Если обезличивание меняет результат, пакет не отправляют автоматически: его пересобирают в отдельной лабораторной среде. Статья не является инструкцией по эксплуатации и не обещает отсутствие риска.
Материал подготовлен редакцией VOne с помощью ИИ, затем вручную проверен по двум прямым HTTPS-источникам; факты, диапазоны версий, безопасный опыт и отсутствие рекламных обещаний сверены человеком.
Источники и проверка
- GitHub Reviewed Advisory ghsa-jxr7-mqhw-9p98 проверено 2026-08-30
- Upstream-репозиторий K3s проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.