В минувшие выходные злоумышленник похитил 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.
К тому моменту, как ситуация успокоилась, балансы ZEAL и NACHO злоумышленника на L2 оказались пустыми, в то время как пострадавшие пулы потеряли от 94% до 99,6% своей стоимости со стороны KAS. Вот в чём загвоздка: первый уровень (L1) Kaspa сработал именно так, как и должен был.
Пустая подпись, которая всё же прошла
Право собственности на токены KRC-20 не обеспечивается напрямую консенсусом Kaspa. Инструкции по токенам передаются внутри транзакций Kaspa, а внецепочечный индексатор Kasplex считывает эти инструкции и определяет, кому что принадлежит. Обычно транзакция KRC-20 содержит открытый ключ, инструкции токена и действительную подпись. Злоумышленник сохранил эту привычную структуру, но предоставил пустую подпись и добавил OP_NOT после OP_ENDIF.

Пустая подпись приводит к тому, что 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 из кошелька хранения были похищены, в результате чего в сетях второго уровня осталось 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. Это происходит на фоне усиления кибератак, и некоторые подозревают, что искусственный интеллект способствует этой волне злоумышленников.
Эта статья была переведена с английского языка с помощью искусственного интеллекта. Оригинальная версия на английском языке является авторитетным источником; автоматические переводы могут содержать неточности, особенно в юридической и нормативной терминологии.











