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

skillctl: copy и delete не следуют за symlink

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

Как безопасно проверить skillctl: copy и delete не следуют за symlink: точная версия, reachability, обратимый fixture, измеримые PASS/FAIL/Unknown и stop-rule без production-данных.

Граница проблемы: skillctl: copy и delete не следуют за symlink

Самостоятельная пользовательская боль: skill entry symlink указывает за project/library root и попадает в copy/push или recursive delete. Защитное правило для проверки сформулировано заранее: «как безопасно проверить что операции работают через lstat openat like policy не следуют links и подтверждают containment перед copy delete в skillctl library filesystem operations без production данных». GitHub Reviewed Advisory ghsa-wx3m-whqv-xv47 описывает: «skillctl: Path traversal and symlink-follow in skillctl allow arbitrary file disclosure and deletion»; запись опубликована 2026-06-05 и обновлена 2026-06-05. Эти сведения подтверждают технический сигнал и upstream-контекст, но не доказывают наличие затронутой версии, достижимость пути, эксплуатацию конкретной системы или популярность запроса. Поэтому итог по локальной среде начинается как Unknown и меняется только после inventory, reachability и изолированного теста.

Сверьте версии и достижимость для skillctl-symlink-safe-copy-delete-root

Проверка начинается с точной версии, runtime-mode и включённого surface. Boundary из reviewed record и прямого upstream-источника: «rust/skillctl < 0.1.2; first patched 0.1.2». Разнесите состояния в таблице: компонента нет; версия вне диапазона; исправление backported; функция выключена; путь недостижим; provenance неясен; нужен fixture. Рабочий набор полей именно для этой темы: entry type, lexical path, canonical target, root containment, copied bytes, deleted paths. Banner, lockfile без resolved tree или совпадение имени пакета не являются доказательством. Если схема версий форка не сопоставима с upstream, оставьте Unknown и запросите build provenance вместо категоричного PASS.

Обратимый тест без production-данных: entry type

Безопасный fixture: TemporaryDirectory содержит regular files, relative/absolute symlinks и dummy outside sentinel; push remote заменён recording sink. До запуска запишите expected invariant, лимиты времени и памяти, допустимые side effects и способ полной очистки. Добавьте положительный control для штатного пути и отрицательный case, который меняет только одну проверяемую границу. Используйте фиктивные identifiers и временное состояние; токены, реальные адреса, пользовательские данные, рабочие конфиги и внешние цели исключены. После каждого case удалите temp-state и повторите малый control: он подтверждает, что отказ относится к механизму, а не к сломанному harness.

Зафиксируйте доказательство по полям deleted paths

Артефакт проверки хранит только минимизированные поля: entry type, lexical path, canonical target, root containment, copied bytes, deleted paths. Для каждого поля отметьте источник: configuration, измерение, parser output или решение policy. Критерий PASS определён до запуска: symlink cases rejected, sink получает 0 outside bytes, sentinel остаётся неизменным. FAIL допустим только если запрещённый эффект наблюдается в изоляции, boundary и runtime-mode совпали, а оба controls дают ожидаемый результат. Во всех остальных случаях ставьте Unknown или Inconclusive. Не прикладывайте сырые логи: достаточно hash fixture, версии, обезличенной матрицы, результата controls и времени проверки.

Проверьте причинность вывода о как безопасно проверить что операции работают через lstat openat like policy не следуют li

Рецензент должен связать наблюдение «skill entry symlink указывает за project/library root и попадает в copy/push или recursive delete» с конкретной границей «как безопасно проверить что операции работают через lstat openat like policy не следуют links и подтверждают containment перед copy delete в skillctl library filesystem operations без production данных», а не с похожим внешним симптомом. Попросите показать, где в resolved build применяется boundary «rust/skillctl < 0.1.2; first patched 0.1.2», почему операция «TemporaryDirectory содержит regular files, relative/absolute symlinks и dummy outside sentinel; push remote заменён recording sink» обратима и какие значения entry type, lexical path, canonical target, root containment, copied bytes, deleted paths получены измерением. Затем отдельно объясните, почему результат «symlink cases rejected, sink получает 0 outside bytes, sentinel остаётся неизменным» проверяет и отказ, и штатный control. Если хотя бы одно звено отсутствует, вывод возвращается в Unknown; severity advisory нельзя переносить на локальную установку автоматически.

Особенность механизма skillctl-symlink-safe-copy-delete-root

Безопасная граница skillctl определяется canonical target и root containment, а не только лексическим путём. TemporaryDirectory содержит относительный и абсолютный symlink на sentinel вне root; copy sink и delete recorder не должны получить этот target. Обычный файл внутри root остаётся positive control. После fixture sentinel неизменен, а список удалений не выходит за корень — без обращения к домашней директории или настоящей библиотеке skills.

Обновление, повторная проверка и граница остановки

Предпочтительное действие — перейти на исправленную upstream-ветку из boundary «rust/skillctl < 0.1.2; first patched 0.1.2», затем повторить тот же fixture и штатный control. Временная мера допустима только если разрывает описанный механизм, имеет владельца, срок действия, наблюдаемый сигнал и проверяемый rollback. Обязательный stop-rule: не запускать против домашней директории и не использовать настоящую skills library.. При его срабатывании эксперимент прекращают, не расширяя доступ и не повышая нагрузку. В обращение к maintainer включите provenance, feature state, матрицу полей и ссылки на reviewed advisory и прямой upstream-источник; эксплуатационные инструкции и данные реальной среды исключите.

Минимальный пакет для поддержки по skillctl-symlink-safe-copy-delete-root

Соберите короткую причинную карточку: боль — «skill entry symlink указывает за project/library root и попадает в copy/push или recursive delete»; invariant — «как безопасно проверить что операции работают через lstat openat like policy не следуют links и подтверждают containment перед copy delete в skillctl library filesystem operations без production данных»; версия — «rust/skillctl < 0.1.2; first patched 0.1.2»; операция — «TemporaryDirectory содержит regular files, relative/absolute symlinks и dummy outside sentinel; push remote заменён recording sink»; поля — entry type, lexical path, canonical target, root containment, copied bytes, deleted paths; PASS — «symlink cases rejected, sink получает 0 outside bytes, sentinel остаётся неизменным». Добавьте hash теста, результат positive/negative controls, cleanup result и причину, по которой тест не касается внешней системы. Не включайте IP, токены, реальные имена, ключи, содержимое документов или полные логи. Если direct source подтверждает только release context, так и укажите: он не является доказательством локальной уязвимости. Граница остановки остаётся неизменной: не запускать против домашней директории и не использовать настоящую skills library..

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

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

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

Ответы

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

Ваш ответ

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

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

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