Зловмисники скомпрометували офіційний GitHub-репозиторій проєкту Injective Labs і опублікували в реєстрі npm шкідливу версію SDK-пакета @injectivelabs/[email protected], призначену для викрадення приватних ключів і мнемонічних фраз криптовалютних гаманців. За даними дослідників із Socket, OX Security та StepSecurity, атака загалом зачепила 18 пакетів у scope @injectivelabs. Усі розробники, які використовують ці бібліотеки, мають негайно оновитися до версії 1.20.23 і вважати всі ключі, оброблені через скомпрометовану версію, розкритими.
Механізм атаки та технічні деталі
Скомпрометована версія 1.20.21 була опублікована 8 липня 2026 року. Як повідомляють дослідники з Socket, шкідливий код було внесено до офіційного репозиторію через коміти від акаунта розробника зі сталою історією контрибуцій у проєкт. За даними StepSecurity, публікація шкідливого релізу була здійснена через власний довірений пайплайн репозиторію на основі OIDC (trusted-publisher), що дозволило обійти стандартні механізми контролю.
Бекдор було реалізовано через модифікацію легітимних функцій генерації приватних ключів. У код було впроваджено функцію trackKeyDerivation(), замасковану під збір анонімізованої телеметрії для оптимізації SDK. Згідно з описом у коді, функція нібито «відстежувала методи деривації ключів і патерни таймінгу для виявлення вузьких місць продуктивності». Насправді до неї передавався маркер методу генерації ключа і сам чутливий матеріал — дані, достатні для повного відновлення приватного ключа на боці зловмисника.
Принципова особливість шкідливого коду — відмова від використання npm lifecycle-скриптів. Код не активувався на етапі встановлення пакета, а спрацьовував лише під час безпосереднього використання функціональності бібліотеки розробником. Як зазначили в OX Security, шкідлива логіка перехоплювала мнемонічні фрази щоразу, коли легітимний користувач створював гаманець або звертався до функцій читання мнемонік.
Механізм ексфільтрації
Щоб зменшити кількість вихідних запитів і знизити ймовірність виявлення, шкідливий код накопичував перехоплені дані деривації ключів у чергу протягом двосекундного вікна, після чого надсилав їх одним HTTPS POST-запитом на зовнішній сервер. Домен для ексфільтрації було підібрано так, щоб імітувати легітимну інфраструктуру Injective:
- Домен ексфільтрації: testnet.archival.chain.grpc-web.injective[.]network
Масштаб компрометації
Атака не обмежилася основним SDK-пакетом. За даними дослідників, зловмисник опублікував версію 1.20.21 для ще 17 додаткових пакетів у scope @injectivelabs, які залежали від шкідливої версії SDK і жорстко фіксували її версію. Це створило загрозу транзитивної компрометації — розробники, які не встановлювали основний SDK напряму, могли отримати шкідливий код через залежності. Уражені пакети:
- @injectivelabs/utils
- @injectivelabs/networks
- @injectivelabs/ts-types
- @injectivelabs/exceptions
- @injectivelabs/wallet-base
- @injectivelabs/wallet-core
- @injectivelabs/wallet-cosmos
- @injectivelabs/wallet-private-key
- @injectivelabs/wallet-evm
- @injectivelabs/wallet-trezor
- @injectivelabs/wallet-cosmostation
- @injectivelabs/wallet-ledger
- @injectivelabs/wallet-wallet-connect
- @injectivelabs/wallet-magic
- @injectivelabs/wallet-strategy
- @injectivelabs/wallet-turnkey
- @injectivelabs/wallet-cosmos-strategy
Версія 1.20.21 основного пакета була позначена як deprecated у реєстрі npm. Втім, на момент публікації досліджень артефакти релізу залишалися доступними для завантаження на GitHub.
Оцінка впливу
Цей інцидент становить високий ступінь небезпеки з кількох причин. По-перше, атака була спрямована на ланцюг постачання криптовалютного проєкту, де компрометація приватних ключів призводить до прямих і незворотних фінансових втрат. По-друге, використання довіреного пайплайна публікації та акаунта з легітимною історією контрибуцій суттєво ускладнювало виявлення. По-третє, охоплення 18 пакетів із транзитивними залежностями багаторазово розширювало поверхню атаки.
Найбільшому ризику піддаються розробники децентралізованих застосунків на базі Injective Protocol, а також будь-які проєкти, що використовують перелічені пакети у своїх залежностях. Варто зауважити, що на момент підготовки матеріалу формальний звіт про інцидент від Injective Labs або офіційний бюлетень безпеки npm не були опубліковані — інформація ґрунтується на аналізі незалежних дослідницьких команд.
Рекомендації щодо реагування
- Негайно оновіть усі пакети @injectivelabs до версії 1.20.23 або новішої.
- Перевірте транзитивні залежності: виконайте аудит дерева залежностей вашого проєкту на наявність будь-якого з 18 скомпрометованих пакетів версії 1.20.21.
- Ротація ключів: будь-який приватний ключ або мнемонічна фраза, які були згенеровані чи оброблені через скомпрометовану версію, мають вважатися розкритими. Переведіть кошти на нові гаманці з заново згенерованими ключами.
- Перевірте мережеву активність: проаналізуйте журнали на предмет вихідних HTTPS-з’єднань до домену testnet.archival.chain.grpc-web.injective[.]network.
- Зафіксуйте версії залежностей за допомогою lock-файлів і розгляньте впровадження інструментів моніторингу ланцюга постачання, таких як Socket або StepSecurity, для виявлення аномальних змін у пакетах.
Цей інцидент демонструє зростаючу ефективність атак на ланцюг постачання через компрометацію довірених пайплайнів публікації. Розробникам, які працюють із криптовалютною інфраструктурою, слід пріоритизувати перевірку залежностей на версію 1.20.21 будь-якого з 18 уражених пакетів @injectivelabs, виконати ротацію всіх потенційно скомпрометованих ключів і перевести кошти до того, як зловмисники скористаються викраденим матеріалом.