Ad
Инциденты

В PyPI нашли вероятный троян Claude

Маша Даровская
By Маша Даровская , IT-редактор и автор
В PyPI нашли вероятный троян Claude
Обложка © Anonhaven

Исследователь Aikido Security Чарли Эриксен обнаружил в PyPI вредоносный пакет anthropickit, который может быть связан с недавним инцидентом во время испытаний Claude Mythos 5. Код собирал файлы из каталога .ssh, искал секреты в переменных окружения, сохранял результаты на диске и пытался отправить их на внешний адрес.

Название пакета, дата публикации и устройство похитителя совпадают с частью деталей, раскрытых Anthropic. Прямого доказательства связи пока нет: компания не назвала пакет, созданный Claude, и не опубликовала его контрольные суммы. Aikido обратилась за подтверждением, но к моменту выхода исследования ответа не получила.

Anthropic 30 июля раскрыла результаты проверки 141 006 запусков испытаний по кибербезопасности. Компания нашла три случая, когда модели Claude получили доступ к открытому интернету и проникли в настоящие системы трёх организаций.

Испытания проводились вместе с компанией Irregular в формате Capture the Flag, или CTF. Моделям поручали искать спрятанный секрет внутри вымышленной инфраструктуры. В системном задании было указано, что выхода в интернет нет, но из-за ошибки настройки он оставался доступен. Claude воспринимала найденные внешние ресурсы как элементы учебной среды.

Во втором инциденте Claude Mythos 5 обнаружила инструкцию для сотрудников вымышленной компании. В ней предлагалось установить Python-пакет, которого не существовало в PyPI.

Модель решила занять свободное имя и опубликовать собственную зависимость с вредоносным кодом. Для этого Claude нашла почтовый сервис, зарегистрировала учётную запись PyPI, собрала пакет и загрузила его в настоящий общедоступный репозиторий.

Пакет находился в PyPI около часа. За это время его скачали и запустили 15 реальных систем. Одна из них принадлежала компании по информационной безопасности, чей анализатор автоматически устанавливал новые пакеты для проверки. Вредоносный код передал учётные данные на подготовленную моделью точку сбора, после чего Claude использовала их для дальнейшего проникновения в инфраструктуру компании. Защита PyPI автоматически удалила пакет.

Эриксен проверил вредоносные пакеты, которые системы Aikido обнаружили в период, охваченный расследованием Anthropic. Его внимание привлёк anthropickit версии 999.9.9, опубликованный 14 июня 2026 года.

Название прямо отсылает к Anthropic, а дата попадает в промежуток между первыми инцидентами в апреле и началом внутренней проверки в июле. Назначение кода тоже совпадает с описанием атаки: пакет был рассчитан на кражу учётных данных с рабочей станции или сервера непрерывной интеграции.

База Open Source Vulnerabilities зарегистрировала образец как вредоносный ещё 14 июня. Запись MAL-2026-5755 подтверждает имя пакета, версию, контрольные суммы и попытку выгрузить SSH-файлы и переменные окружения. Это подтверждает вредоносность anthropickit, но ничего не говорит о его авторе.

Основная логика находилась в верхней части файла setup.py. При сборке исходного пакета этот код мог выполниться уже во время команды pip install anthropickit, до импорта библиотеки в пользовательскую программу.

Внутри самого модуля почти ничего не было. По данным OSV, файл __init__.py содержал только номер версии, а метаданные пакета оставались практически пустыми. Основная задача архива состояла в исполнении сценария установки.

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

После запуска сценарий определял имя компьютера и пользователя, затем перебирал обычные файлы в домашнем каталоге .ssh.

Код пропускал known_hosts, known_hosts.old и authorized_keys. Остальные файлы он пытался прочитать как текст. В выборку могли попасть закрытые SSH-ключи и файл config с именами пользователей, адресами серверов и параметрами подключений.

Зашифрованный закрытый ключ тоже мог попасть в выгрузку. Для его непосредственного использования злоумышленнику потребовалась бы парольная фраза, но сам факт утечки всё равно создаёт риск перебора и последующих атак.

Следом пакет перебирал переменные окружения. В сбор попадали значения, имена которых содержали KEY, SECRET, TOKEN, PASS, AUTH или API.

Такой фильтр мог захватить ключи облачных платформ, токены GitHub, пароли баз данных и секреты систем сборки. Он также собирал безобидные значения вроде адреса прикладного интерфейса, если название переменной содержало API.

Код не проверял, является ли найденная строка настоящим паролем или токеном. Логика строилась по принципу «собрать всё похожее, разобраться позднее».

Полученную информацию anthropickit формировал в структуру JSON и пытался отправить на жёстко заданный адрес Pipedream.

Pipedream — законная платформа для соединения веб-сервисов и автоматизации процессов. Она позволяет создавать адреса, принимающие HTTP-запросы, поэтому атакующему не требуется разворачивать собственный сервер.

Перед отправкой пакет сохранял ту же информацию в /tmp/runner_exfil.json. Файл форматировался с отступами и оставался удобным для чтения человеком.

Наличие кода отправки не доказывает, что данные с каких-либо реальных машин действительно дошли до владельца адреса. Запрос мог завершиться ошибкой из-за отсутствующей библиотеки, сетевой блокировки или уже отключённой точки Pipedream.

Успешная кража учётных данных подтверждена для пакета из отчёта Anthropic. Пока авторство anthropickit не установлено, переносить этот результат на найденный Aikido образец нельзя.

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

На сервере непрерывной интеграции такая строка оказалась бы в журнале сборки. Скрытное вредоносное ПО обычно избегает подобного поведения, поскольку оно облегчает обнаружение.

Эриксен предположил, что локальный JSON-файл и сообщение в консоли служили отчётом о выполнении учебного задания. Участник CTF мог открыть файл или журнал и сразу проверить, удалось ли получить секреты. Это объяснение выглядит правдоподобно, но остаётся интерпретацией исследователя.

Обычный злоумышленник тоже мог оставить такие следы из-за небрежности или использовать пакет как демонстрационный образец.

В начале setup.py импортировалась библиотека requests, через которую пакет отправлял HTTP-запрос. Она не входит в стандартную библиотеку Python и не была указана среди зависимостей anthropickit.

В рабочей системе или крупном образе для сборки requests могла уже присутствовать. В изолированной среде современного pip её могло не оказаться. Тогда импорт завершался ошибкой до чтения .ssh, создания JSON-файла и отправки данных. Успех зависел от наличия requests, прав доступа, операционной системы и возможности соединиться с внешним адресом.

Код явно ориентировался на Unix-подобные системы и серверы сборки: он использовал переменную USER, каталог .ssh и путь /tmp/runner_exfil.json.

Пакет получил заведомо высокий номер версии 999.9.9. Такой приём применяется при подмене зависимостей: менеджер пакетов может выбрать публичную версию с большим номером вместо внутренней.

OSV относит номер к признакам атаки через путаницу зависимостей. В конкретном сценарии Anthropic пакет из инструкции вообще отсутствовал в PyPI, поэтому Claude не требовалось обгонять уже существующую публичную версию.

Версию anthropickit 999.9.9 следует считать вредоносной независимо от того, кто её создал.

Удаления пакета недостаточно. Нужно проверить наличие /tmp/runner_exfil.json, журналы установки и исходящие соединения с Pipedream. Все SSH-ключи, токены и пароли, доступные процессу установки, безопаснее заменить.

Отдельной проверки требует история использования учётных данных. Украденный токен может открыть доступ к репозиториям, облачным платформам, системам сборки и другим хранилищам пакетов.

Отсутствие runner_exfil.json не доказывает безопасность системы: файл мог быть удалён, а установка могла происходить в контейнере или временном окружении.

Вопросы и ответы

anthropickit точно создала Claude?

Нет. Aikido считает пакет вероятным кандидатом, но Anthropic не подтвердила связь.

Вредоносность anthropickit доказана?

Да. Код пакета и запись MAL-2026-5755 подтверждают попытку кражи SSH-файлов и переменных окружения.

Этот пакет запустили на 15 системах?

Неизвестно. Anthropic сообщила о 15 системах, запустивших неназванный пакет Claude. Доказательств, что это был anthropickit, пока нет.

anthropickit успешно украл данные?

Код пытался их собрать и отправить. Публичных подтверждений успешной выгрузки именно этим пакетом нет.

Что он собирал?

Файлы из каталога .ssh, кроме known_hosts, known_hosts.old и authorized_keys, а также переменные окружения с признаками ключей, токенов, паролей и других секретов.

Когда выполнялся код?

Он находился в setup.py и мог запускаться во время сборки и установки пакета.

Куда уходили данные?

Пакет пытался отправить JSON на адрес Pipedream и сохранял локальную копию в /tmp/runner_exfil.json.

Почему requests могла помешать атаке?

Пакет импортировал requests, но не объявлял её как зависимость. В чистой изолированной среде библиотека могла отсутствовать, а установка — завершиться ошибкой до запуска похитителя.

Для чего использовалась версия 999.9.9?

Высокий номер похож на приём из атак через подмену зависимостей. Сам по себе он не доказывает авторство Claude.

Что делать после установки?

Заменить доступные процессу SSH-ключи, токены и пароли, проверить журналы и выяснить, использовались ли эти учётные данные после установки.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.