Bitcoin.com News
За підтримки

Індексатор Kasplex KRC-20 обходить систему підписів і виводить кошти з двох пулів токенів

Цього вікенду зловмисник вивів 186,4 млн ZEAL та 54,4 млрд NACHO з гаманця-містка Kaspa KRC-20, не маючи його приватного ключа, після чого перевів токени через мережі другого рівня (L2) і продав їх у пули ліквідності. Дивним є те, що сама Kaspa не була зламана. П’ять дійсних транзакцій змусили позаланцюговий індексатор визнати перекази, які насправді ніхто не підписував, внаслідок чого токени, що перебували на мості, залишилися без забезпечення, а деякі пули втратили аж 99,6% своєї вартості в KAS.

АВТОР
ПОДІЛИТИСЯ
Індексатор Kasplex KRC-20 обходить систему підписів і виводить кошти з двох пулів токенів

Основні висновки

  • Зловмисник перемістив 54,4 млрд NACHO, не маючи приватного ключа від мостового гаманця.
  • Пули Zealous Swap втратили від 94% до 99,6% своєї вартості в KAS після підроблених переказів.
  • Igra призупинила ключові виходи, оскільки оператори KRC-20 готуються виправити систему та провести її реіндексацію.

П’ять транзакцій без приватного ключа

Приватний ключ має бути межею між володінням криптовалютою та простою обізнаністю про те, де вона знаходиться. 20 вересня хтось знайшов спосіб обійти це припущення щодо токенів KRC-20, взагалі не порушуючи базову ланцюг Kaspa.

Зловмисник перевів 186 425 259 ZEAL та 54 397 983 246 NACHO з адреси зберігання мосту, хоча й не мав контролю над її приватним ключем. Потім ці токени були відправлені назад на ту саму адресу зберігання як звичайні депозити мосту, випущені на рівні EVM від Igra Labs та Kasplex L2, і скинуті в пули ліквідності Zealous Swap.

Коли ситуація врешті-решт стабілізувалася, баланси L2 ZEAL та NACHO зловмисника були порожніми, тоді як постраждалі пули втратили від 94% до 99,6% своєї вартості в KAS. Ось у чому підступ: перший рівень (L1) Kaspa працював саме так, як і мав.

Порожня підпис, яка все одно пройшла перевірку

Право власності на токени KRC-20 не забезпечується безпосередньо консенсусом Kaspa. Інструкції щодо токенів містяться в транзакціях Kaspa, тоді як позаланцюговий індексатор Kasplex зчитує ці інструкції та визначає, кому що належить. Зазвичай переказ KRC-20 містить відкритий ключ, інструкції щодо токенів та дійсний підпис. Зловмисник зберіг цю звичну структуру, але надав порожній підпис і додав OP_NOT після OP_ENDIF.

X screenshot
Джерело зображення: X

Порожній підпис змушує OP_CHECKSIG повертати значення false, а не відразу відхиляти транзакцію. Додатковий OP_NOT змінив цей результат на true, внаслідок чого Kaspa сприйняла транзакцію як дійсну. На рівні консенсусу все працювало як слід. Інша справа — індексатор. Він розпізнав конверт KRC-20, але не вимагав, щоб скрипт точно відповідав канонічному формату. Як наслідок, він визнав підроблений переказ законним. Навіть власний API Kasplex повернув opAccept: 1 для першої підробленої транзакції ZEAL.

Будь-хто міг створити підробку

Найгірше було те, що зловмиснику не потрібно було виявляти якісь приховані облікові дані. Стандартна адреса Kaspa відкриває доступ до відкритого ключа, необхідного для створення підробленої операції KRC-20. Це означає, що перенесення токенів на іншу адресу не вирішує основної проблеми. Доки індексатор не буде виправлений, а його історія — переіндексована, цю ж уразливість теоретично можна використовувати проти балансів KRC-20 в інших місцях.

П’ять транзакцій підробили перекази ZEAL та NACHO. Натомість дев’ять незначних виведень по одній одиниці були справді підписані кастодіальним гаманцем і, судячи з усього, були пробними операціями, що перевіряли, чи працює шлях виходу. Цікаво, що саме незначні транзакції були законними. Кастодіальний гаманець містив приблизно 50 інших токенів KRC-20. Зловмисник вибрав два.

Токени все ще на місці, але їхнього забезпечення немає

У неділю вранці Ігра повідомив, що всі запаси ZEAL і NACHO з депозитарного гаманця були викрадені, внаслідок чого в мережах Layer 2 залишилося 97 651 212 ZEAL і 42 570 879 908 NACHO без повного забезпечення на рівні L1. Ще 4,5 млрд NACHO залишилися у зловмисника на L1.

Igra призупинила виведення iKAS на Kaspa L1 та перекази через Hyperlane, а користувачів попередили про небезпеку мостування токенів KRC-20, купівлі ZEAL або NACHO на децентралізованих біржах (DEX) L2 або додавання ліквідності до постраждалих пулів. Нативні KAS, консенсус Kaspa та активи Igra, які не були перенесеними токенами KRC-20, були визнані незачепленими.

Саме лише виправлення програмного забезпечення не вирішить цю проблему. Zealous Swap зазначає, що операторам потрібно виправити індексатор та переіндексувати його історію, відхиляючи порожні підписи, неправильно сформовані теги та скрипти, що продовжуються за межі OP_ENDIF. Тим часом Nacho the Kat повідомляє, що спільнота має намір перейти на KCC-20 — стандарт, розроблений для вбудовування правил токенів у скрипти, виконання яких забезпечується самою мережею.

Ця проблема виникла на тлі низки експлойтів, багів, хакерських атак та витоків даних, що відбулися протягом останніх кількох тижнів. У суботу Blink Wallet, постачальник кастодіальних та некастодіальних інфраструктурних послуг для Lightning Network, повідомив, що було спустошено «кілька десятків» кастодіальних рахунків. Компанія з кібербезпеки DCENT також зафіксувала виведення коштів з гаманців DCENT App цього тижня. Це відбувається на тлі посилення кібератак, і деякі підозрюють, що штучний інтелект сприяє цій хвилі зловмисників.

Гаманець Blink став жертвою зловмисника, з «кількох десятків» кастодіальних рахунків викрадено кошти

Гаманець Blink став жертвою зловмисника, з «кількох десятків» кастодіальних рахунків викрадено кошти

Blink Wallet призупинив надання послуг після того, як зловмисник здійснив атаку на десятки кастодіальних рахунків; наразі триває розгортання виправлення, а користувачам обіцяно відшкодування коштів.

Цю статтю перекладено з англійської мови за допомогою штучного інтелекту. Оригінальна англомовна версія є авторитетним джерелом; автоматичні переклади можуть містити неточності, особливо в юридичній та нормативній термінології.