Производитель аппаратных кошельков Coinkite опубликовал предупреждение по Coldcard Mk3. Из-за бага в прошивке злоумышленник вывел 594 BTC, около $38 миллионов, менее чем за полчаса. Компания полагает, что атакующий воспользовался искусственным интеллектом для поиска уязвимости в открытом коде, хотя собственная проверка тем же инструментом несколькими неделями ранее ничего подозрительного не показала.
Что случилось с кошельками Coldcard?
Advisory Coinkite опубликовала в четверг, а атаку зафиксировали уже утром в пятницу. По данным компании, из примерно 500 кошельков исчезло 594 BTC за 25 минут, и 562 из них злоумышленник успел свести на один адрес. Пострадали владельцы, которые сгенерировали ключ на устройстве после обновления прошивки до версии 4.0.1.
Сумма убытков касается средств людей, доверивших хранение Bitcoin аппаратному кошельку именно из-за уверенности в надёжной генерации ключей. Эта уверенность и оказалась ложной.
Как именно возникла уязвимость?
В прошивке существовали две функции с одинаковым назначением. Одну, аппаратный генератор, Coinkite писала сама, а другую, программный резерв, команда унаследовала от MicroPython. Проверка при сборке смотрела лишь на то, задан ли параметр вообще, а не на его значение, поэтому код собирался молча против резервной функции. Генерация ключей работала так с миграции в марте 2021 года.
- Двойная функция: аппаратный и программный генераторы имели одинаковые сигнатуры в коде
- Защитная проверка смотрела на факт определения параметра, а не на его реальное значение
- Баг оставался незамеченным больше четырёх лет, с марта 2021 года
- Эффективная энтропия ключей Mk3 упала примерно до 40 бит вместо заявленных 128
Для сравнения, Mk4, Q и Mk5 получают дополнительную энтропию от защищённых элементов внутри устройства, поэтому их показатель поднимается примерно до 72 бит. Это лучше, но всё равно ниже цели в 128 бит.
Почему ИИ оказался сразу по обе стороны?
Coinkite утверждает, что за несколько недель до атаки прогнала одну из лучших доступных моделей через собственный код и не получила ни одного серьёзного предупреждения. После инцидента команда была вынуждена признать, что кто-то другой, вероятно, проанализировал историю версий открытого кода тем же способом и нашёл то, что пропустила модель компании.
"Атакующие и защитники имеют одинаковые инструменты. На этот раз они не помогли нам, а лишь злоумышленникам."
- Coinkite, из технического разбора уязвимости, 30 июля 2026
Можно ли доверять автоматизированному аудиту кода, если он одинаково доступен и командам разработки, и злоумышленникам? Однозначного ответа компания не даёт. Она лишь признаёт, что на этот раз инструмент сработал не в её пользу.
Что делать владельцам кошельков?
Coinkite уже выпустила экстренный хотфикс, а именно версию 5.6.0 для Mk4 и Mk5 и версию 1.5.0Q для модели Q. Обновление прошивки само по себе не восстанавливает безопасность уже сгенерированного ключа. Владельцам нужен новый seed, созданный на пропатченном устройстве, и компания советует добавить надёжную BIP-39 passphrase или как минимум 99 бросков игральных костей для собственной энтропии.
Mk3 уже снят с поддержки, поэтому для него предусмотрен отдельный путь миграции средств. Слабый seed не исчезает даже после переноса на устройство другого производителя. Именно на этом настоял Trezor, заверив собственных пользователей, что инцидент их кошельков не коснулся.
Что это значит для рынка аппаратных кошельков?
Block, производитель кошелька Bitkey, опубликовал собственный независимый анализ и сообщил, что ни один из его продуктов уязвимости не имеет. Руководитель аппаратного направления компании публично призвал всех пострадавших перевести средства, как только это можно будет сделать безопасно.
История с Coldcard стала напоминанием, что надёжность аппаратных кошельков зависит не только от физического чипа, но и от строчки кода, которую никто вовремя не перечитал. Владельцам криптовалюты нужно проверять, из какой прошивки сгенерирован их ключ, и не полагаться на единственную проверку кода, даже если её проводил искусственный интеллект.




Комментарии
Ваш e-mail адрес не будет опубликован. Обязательные поля отмечены *