
Разработчик‑вайбкодер попросил ИИ‑агента Claude собрать зеркало проекта. Но вместо выполнения прямого указания на полное копирование рабочего решения нейросеть создала скрипт полной очистки и за полторы минуты удалила 48 218 рабочих файлов из дерева проекта в Windows и уничтожила хранилище объектов Git в репозитории. Восстановить данные полностью не удалось. После выполнения деструктивных действий ИИ-агент написал «Я что-то сломал».
Удаление, как утверждается, произошло всего за 103 секунды (в интервале с 22:10:31 до 22:12:14) после того, как ИИ-агенту было поручено пересоздать зеркало для задачи под номером «#873».
Согласно отчёту разработчика по этому инциденту, ИИ‑агент обнаружил, что скрипт build_mirror.py не может обновить зеркало «на месте», и поэтому создал на языке Python скрипт для удаления старой копии, хранившейся во временной директории. Это зеркало содержало 7 332 обычных файла и 614 символических ссылок на директории (junctions) в Windows, указывающих обратно на рабочее дерево проекта Dashboard.
Скрипт очистки использовал функцию os.walk(…, followlinks=False), вероятно, полагая, что это предотвратит переход по ссылкам в связанные директории. В среде Windows это предположение оказалось фатальным. В отчёте указано, что функция os.path.islink() возвращала значение false для таких ссылок, из‑за чего скрипт воспринимал директории, на которые они указывали, как обычные пути.
Хотя скрипт содержал механизм защиты для таких ссылок, он, как сообщается, защищал только файлы, расположенные непосредственно в корне ссылки; вложенные директории обходились и удалялись. Собственный лог скрипта зафиксировал 55 550 файлов, 614 ссылок и 1 808 директорий.
Вычтя 7 332 файла, которые должны были находиться в зеркале, автор отчёта подсчитал, что было удалено 48 218 рабочих файлов. Нанесённый ущерб затронул не только файлы приложения: директории.git/objects, refs и logs оказались пустыми, из‑за чего команда git log перестала находить коммиты. Индекс сохранился и по‑прежнему содержал список из 7 221 пути, но сами объекты (blob‑файлы) исчезли, что сделало невозможным восстановление данных средствами Git. Верификатор также насчитал 728 очищенных каталогов, в том числе 418 в каталоге Runners, в то время как корневые файлы, документация, резервные копии, записи чатов и файлы за пределами панели управления остались нетронутыми.
Инцидент выявил критическую уязвимость в рабочих процессах кодирования с использованием ИИ-агентов: разрешение на выполнение законной задачи обслуживания может превратиться в разрешение на выполнение небезопасной реализации.
В документации Anthropic говорится, что ручной режим запрашивает подтверждение для команд Bash и изменений файлов, в то время как bypassPermissions пропускает запросы и должен использоваться только внутри изолированных контейнеров или виртуальных машин. Функция контрольных точек Claude Code не обязательно решит эту проблему, поскольку изменения, внесенные с помощью команд Bash, включая удаления, не отслеживаются для отмены. Anthropic документирует установленные операционной системой границы файловой системы для Bash, PowerShell и дочерних процессов, превращая песочницу в необходимый элемент контроля, а не в дополнительную опцию.

Источник: habr.com