Из сети Zilliqa увели 683 130 969,66 токена ZIL с 6772 адресов. Причина, установленная разбором инцидента, обидна до неприличия: приложение при формировании подписи копировало не те 32 байта — оставляло восемь байт нулевого дополнения и выбрасывало восемь байт настоящей случайности. Каждая подпись после этого протекала, и примерно пяти подписей хватало, чтобы восстановить приватный ключ на обычном компьютере.

Коротко: что произошло

Ошибка жила в приложении для аппаратного кошелька и затрагивала все версии, выпущенные с 2019 по 2026 год. Дефект ограничен путём подписи для «родных» транзакций сети; транзакции в EVM-совместимом режиме и официальные наборы разработчика не задеты.

Из-за неверного копирования каждое случайное число удовлетворяло условию, при котором старшие 64 бита заведомо известны. Известная часть превращает подпись в утечку: набрав около пяти таких подписей, атакующий вычисляет ключ.

Кражи шли с четвёртого марта 2026 года и оставались незамеченными примерно четыре с половиной месяца — пока атакующий не перешёл от разовых списаний к автоматическому сбору. Двадцатого июля «родные» транзакции отключили, закрыв возможность продолжать.

Масштаб инцидента

Показатель Значение
Украдено 683 130 969,66 ZIL
Затронутых адресов 6772
Начало краж 4 марта 2026 года
Оставалось незамеченным около 4,5 месяца
Затронутые версии все с 2019 по 2026 год
На один адрес биржи 550 558 587,25 ZIL — 80,6%

Подписи в EVM-режиме и официальные библиотеки разработчика уязвимости не содержали.

Почему опасен не алгоритм, а код вокруг него

Вот наблюдение, ради которого стоит посмотреть на класс ошибки, а не на сумму ущерба. Атака на смещённое случайное число в подписи — не открытие и не экзотика. Это описанный в учебниках способ: если часть случайной величины предсказуема, каждая подпись выдаёт кусок ключа, и достаточно нескольких подписей.

Сама криптография здесь не подвела. Подвело копирование байтов — восемь позиций сдвига в буфере. Между «схема стойкая» и «реализация стойкая» лежит расстояние, которое пользователю не видно вообще никак.

И вот что стоит зафиксировать отдельно: за месяц это второй случай одного класса. В июле мы писали, что кошелёк Cardano закрывался из-за бага в подписи, выдававшего ключи прямо из блокчейна, и разбирали саму математику такой атаки. Две независимые команды выпустили один и тот же дефект.

Аппаратный кошелёк хранит ключ надёжно. Но подпись формирует приложение — и его надёжность продаётся тем же обещанием, хотя это другой код.

Что из этого следует держателю

Первое: «холодное хранение» защищает от кражи ключа, но не от его вычисления по вашим же подписям. Это разные угрозы, и вторая не отменяется покупкой устройства.

Второе: срок жизни дефекта важнее его сложности. Семь лет в выпущенных версиях и четыре с половиной месяца незамеченных списаний — это про то, как трудно заметить утечку, которая не выглядит взломом.

Третье: концентрация выводов показательна — 80,6% украденного ушло на один адрес биржи. Общие правила самостоятельного хранения разобраны в материале про свои ключи, а про то, что обновление прошивки не всегда спасает, мы писали, когда разбирали случай Coldcard.

Чего в источниках нет

Не приводится долларовая оценка ущерба: сумма названа в токенах, курс на моменты списаний не раскрыт.

Не сообщается, будут ли пострадавшим возмещать потери и за чей счёт.

Не названа и биржа, на адрес которой пришлось 80,6% выведенного, а также не указано, заморожены ли эти средства.

Частые вопросы

Сколько украдено?

683 130 969,66 ZIL с 6772 адресов. Из них 550 558 587,25 токена — 80,6% — ушло на один адрес биржи.

В чём была ошибка?

При копировании в буфер брались не те 32 байта: оставались восемь байт нулевого дополнения и терялись восемь байт настоящей случайности.

Почему это позволяет украсть ключ?

Когда часть случайного числа предсказуема, каждая подпись выдаёт информацию о ключе. Около пяти подписей достаточно для его восстановления.

Какие версии затронуты?

Все выпущенные с 2019 по 2026 год, но только путь подписи «родных» транзакций. EVM-режим и официальные библиотеки не задеты.

Когда это прекратилось?

Двадцатого июля «родные» транзакции отключили, что закрыло возможность дальнейшей эксплуатации.

Защищает ли аппаратный кошелёк от такого?

Не в этом случае. Устройство защищает хранение ключа, а утечка происходила через подписи, которые формировало приложение.

Источники

Материал подготовлен на основе разбора инцидента самой Zilliqa, публикации CryptoSlate и сообщения The Crypto Times о раскрытии уязвимости.