Искусственный интеллект · Информационная безопасность · Python · Node.js · Open source · Секьюрити · Зависимости29 сентября в 02:32 · 5 мин

Выдуманные пакеты ИИ: когда галлюцинация модели превращается в угрозу для цепочки поставок

Галлюцинации нейросетей при генерации кода обычно приводят лишь к ошибкам сборки, но существуют редкие случаи, когда вымышленные названия библиотек занимают реальные места в реестрах PyPI и npm. Исследование показало, что семь таких «призрачных» имён уже заняты чужими проектами, одним из которых является удалённый вредоносный пакет. Разработчикам следует быть осторожнее с прямыми командами установки, сгенерированными ИИ.

# Выдуманные пакеты ИИ: когда галлюцинация модели превращается в угрозу для цепочки поставок

В мире разработки программного обеспечения искусственный интеллект уже стал неотъемлемым инструментом. Однако, как и любые сложные системы, языковые модели подвержены ошибкам, известным как галлюцинации. Если нейросеть случайно выдумывает несуществующую функцию, программист обычно просто получает ошибку компиляции. Но что происходит, когда модель выдумывает название для библиотеки, которую нужно установить через пакетный менеджер? В отличие от синтаксической ошибки, свободное имя в публичном реестре может быть захвачено злоумышленниками, что превращает простую опечатку ИИ в серьезную угрозу безопасности, известную как slopsquatting.

Метод исследования: поиск совпадений между вымыслом и реальностью

Для оценки рисков исследователь провел масштабную проверку 139 названий пакетов, которые пять различных современных ИИ-моделей выдумывали одинаково. Список, опубликованный в апреле 2026 года, охватывал как экосистему Python (PyPI), так и JavaScript (npm). Автор исследования вручную проверил каждое имя против текущих реестров на 22 сентября того же года.

Эксперимент был интересен тем, что если имя выдумывают все модели, вероятность того, что оно свободно для регистрации, высока. Идея slopsquatting строится на том, что разработчик копирует команду установки, предложенную ИИ (например, pip install <имя>), не проверяя её вручную. Если имя свободно, злоумышленник может зарегистрировать его и загрузить вредоносный код, который выполнится на машине разработчика сразу при установке или первом импорте модуля. Это атака на цепочку поставок, так как вредоносный код проникает через чужой, якобы легитимный, компонент.

Результаты проверки: захваченные имена и случайный вредонос

По состоянию на сентябрь 2026 года из 139 выдуманных названий уже заняты семь. Большинство из них (шесть) были зарегистрированы до того, как список был опубликован в апреле. Однако есть один критический случай, который демонстрирует реальную опасность.

Одним из выдуманных пакетов стало имя metro-evaluator. Модели предложили его примерно 10 раз. 7 декабря 2025 года под этим именем в реестре npm появились четыре версии вредоносного программного обеспечения. Команда безопасности npm быстро среагировала: уже 12 декабря пакеты были удалены, а на их место установлена безопасная заглушка (версия 0.0.1-security). Тем не менее, до момента удаления вредоносный код там существовал более пяти дней. Исследователи не могут с уверенностью сказать, знал ли злоумышленник о том, что это выдуманное имя, или совпадение произошло случайно.

Остальные шесть занятых имён используются легитимными проектами: * lusid — клиент для самовнушения (self-hosted client iMessage); * odf — утилиты для работы с Open Data Framework; * weaviate — заглушка от владельца бренда (настоящий клиент называется weaviate-client); * usr — среда выполнения на C; * ssh-keys — утилита для работы с ключами SSH; * css-color-stop — пустышка (пустой пакет в 53 байта), зарегистрированная уже после раскрытия списка.

Особого внимания заслуживает случай с библиотекой odf. На PyPI уже существуют инструменты для работы с документами OpenDocument (пакет odfpy), но в коде часто используется импорт модуля import odf. ИИ может путать название модуля и название пакета. В результате разработчик, следуя совету нейросети, устанавливает чужой инструмент (odf на PyPI), который является утилитами для других целей, а не нужной библиотекой для документов.

Меры защиты: как предотвратить установку вымышленного кода

Риск Slopsquatting реален, особенно учитывая, что ИИ-агенты в автоматическом режиме могут выдавать команды установки без участия человека. Исследователи предлагают ряд мер защиты:

1. Утверждение команд установки: На уровне команды должно быть принято решение о том, разрешать ли ИИ-агентам самостоятельно устанавливать зависимости. Команда не должна выполнять команды install или npx без подтверждения человека. 2. Проверка перед установкой: Всегда проверяйте пакет, не скачивая его сразу. Для npm можно использовать команду npm view <имя> time, чтобы увидеть даты версий. Если у «старой» известной библиотеки вдруг появилась очень свежая дата (месяц назад), это повод насторожиться. 3. Отключение сценариев установки: Использование флага --ignore-scripts при установке с npm (npm install --ignore-scripts) предотвращает выполнение кода, который запускается непосредственно при установке, но не защищает от кода, запускаемого при импорте модуля. 4. Использование хэшей: Поддержание актуального lock-файла (например, requirements.txt или package-lock.json) с хэшами всех зависимостей. Команда pip install --require-hashes проверит, совпадает ли загруженный пакет с ожидаемым. Это защитит от подмены уже одобренного пакета, но не от первой установки выдуманного имени. 5. Прокси-реестры: Для командных проектов рекомендуется настройка прокси-реестра с белым списком допустимых пакетов. Установка по совету ИИ с неизвестным именем будет автоматически заблокирована.

Хотя риск Slopsquatting кажется экзотическим, он наглядно показывает, насколько хрупкой может быть цепочка поставок в эпоху ИИ. Даже если большинство выдуманных имён остаются свободными или занимают безопасные проекты, один случай с вредоносным кодом требует от разработчиков повышенной бдительности. Валидация ответов нейросети должна стать таким же естественным этапом работы, как и чтение кода, который она предлагает.

Первоисточники

Habr AI ↗
← Вернуться в эфир