Вредоносная версия программного инструмента, используемого разработчиками Injective, была создана для сбора закрытых ключей кошельков и мнемонических фраз, что вызвало обеспокоенность по поводу приложений, обрабатывающих конфиденциальную информацию кошельков через затронутый релиз. Хакеры взломали программный пакет, используемый разработчиками, создающими кошельки и приложения для блокчейна Injective, добавив код, способный тайно собирать учетные данные криптокошельков.
Компания по безопасности Socket обнаружила вредоносный код в версии 1.20.21 пакета @injectivelabs/sdk-ts, который помогает приложениям подключаться к Injective и управлять функциями, связанными с кошельками. Обычно пакет загружают около 50 000 раз в неделю, хотя эта цифра включает все версии и не отражает количество людей, пострадавших от инцидента.
Socket сообщила, что скомпрометированная версия была загружена около 310 раз. Однако загрузка не означает автоматически, что ключ кошелька был раскрыт. Опасный код должен был выполняться в момент, когда приложение обрабатывало закрытый ключ или мнемоническую фразу. Подтвержденное количество затронутых кошельков не опубликовано, и нет публичных доказательств кражи средств.
Инцидент не связан со взломом самого блокчейна Injective. Вместо этого злоумышленники атаковали доверенный программный компонент, используемый разработчиками, что обычно описывается как атака на цепочку поставок программного обеспечения.
Разработчики часто полагаются на готовые программные пакеты, а не пишут каждую часть приложения с нуля. Эти пакеты могут выполнять такие задачи, как подключение к блокчейну, создание кошельков и подписание транзакций. В данном случае вредоносный код был помещен внутрь официального пакета Injective и был предназначен для активации при обработке приложением конфиденциальной информации кошелька. Socket заявила, что он мог перехватывать закрытый ключ или мнемоническую фразу восстановления и пытаться отправить данные, маскируя активность под обычную техническую отчетность.
Закрытый ключ дает его владельцу контроль над соответствующим криптокошельком. Фразу восстановления можно использовать для восстановления того же кошелька на другом устройстве. В отличие от обычного пароля аккаунта, эти учетные данные нельзя просто сбросить после их раскрытия.
Компрометация закрытых ключей стала одной из самых разрушительных форм криптоатак, поскольку преступники могут получить прямой контроль над кошельками, не взламывая базовый блокчейн. Недавняя проверка безопасности показала, что инциденты с закрытыми ключами составили около 40% убытков, зафиксированных в изученном наборе данных. Инцидент с Injective также показывает, почему злоумышленники все чаще targeting программное обеспечение и платформы, которым пользователи уже доверяют. Знакомое имя пакета, устоявшаяся учетная запись разработчика или признанное приложение могут сделать вредоносную деятельность легитимной и снизить вероятность того, что пользователи будут подвергать ее сомнению.
Socket сообщила, что несанкционированные изменения были отправлены через GitHub-аккаунт разработчика с устойчивой историей участия в проекте Injective. Позже законный владелец аккаунта обнаружил активность и отменил изменения. Доступный отчет не идентифицирует злоумышленника и не объясняет, как был получен доступ к аккаунту.
Код для кражи кошельков находился в версии 1.20.21 основного пакета SDK Injective. Однако 17 других пакетов в коллекции npm Injective были выпущены со ссылками на ту же затронутую версию. Это означало, что некоторые разработчики могли получить скомпрометированное программное обеспечение косвенно. Приложение могло установить один пакет Injective, который автоматически подтянул затронутый SDK в фоновом режиме.
Поэтому инцидент не следует описывать как 18 отдельно зараженных пакетов. Доступные доказательства показывают, что основной SDK содержал вредоносный функционал, а 17 связанных пакетов зависели от этой версии напрямую или косвенно. Socket сообщила, что затронутый релиз был помечен как устаревший после обнаружения компрометации и публикации чистой версии. Однако на момент отчета Socket скомпрометированная версия не была полностью удалена из npm, а связанные материалы релиза оставались доступными через GitHub.
Сообщения также различаются относительно точной даты инцидента. Опубликованная временная шкала Socket указывает на 8 июня, в то время как некоторые вторичные отчеты относят активность к июлю. Поскольку месяц не был независимо подтвержден, точную дату следует атрибутировать источнику, а не указывать как неоспоримый факт.
Разработчикам, использовавшим версию 1.20.21, либо напрямую, либо через другой пакет Injective, рекомендуется исходить из того, что учетные данные кошельков, обработанные затронутым программным обеспечением, могли быть раскрыты.
Рекомендуемые действия включают:
Простое обновление пакета может не защитить кошелек, если его учетные данные уже были скопированы. Как только другая сторона получает закрытый ключ или фразу восстановления, старый кошелек больше не следует считать безопасным. Пользователи кошельков также должны проверить одобренные ими разрешения. В отдельном случае злоумышленник похитил около 92 000 $ в Tether Gold после того, как жертва подписала вредоносный запрос на разрешение, что показывает, что преступникам не всегда нужно напрямую получать мнемоническую фразу для кражи активов.
Хотя в том случае использовалась другая техника, он подчеркивает ту же более широкую проблему: безопасность криптовалют зависит не только от блокчейна, но и от программного обеспечения, одобрений и сервисов, окружающих кошелек. В настоящее время нет доказательств того, что блокчейн Injective был взломан, что каждый кошелек Injective оказался под угрозой или что была украдена подтвержденная сумма криптовалюты. Известная опасность ограничивается приложениями, которые установили скомпрометированный пакет и обрабатывали через него учетные данные кошельков.


