НовостиКриптовалютыРостовые серверы Electrum подменяли отправленные платежи фальшивыми биткоин-транзакциями с нулевой комиссией; исправление выпущено в 4.8.3

Ростовые серверы Electrum подменяли отправленные платежи фальшивыми биткоин-транзакциями с нулевой комиссией; исправление выпущено в 4.8.3

Автор: Cryptopolitan·

Ключевые выводы

  • •Electrum выпустила версию 4.8.3 для устранения уязвимости высокой степени опасности, связанной с подменой отправленных платежей вредоносными серверами; майнтейнер SomberNight опубликовал 24 октября рекомендации GHSA-6jp4-8v48-cc5v и призвал пользователей обновиться.
  • •Атака работала потому, что старые версии не проверяли подписи транзакций в mempool: поддельная транзакция с нулевой комиссией отображалась как ожидающая, а повышение комиссии через Replace-By-Fee заставляло кошелек жертвы подписать версию злоумышленника с действительной подписью.
  • •Задокументированная жертва с конфигурацией 2-of-3 legacy P2SH multisig и двумя Trezor получила поддельную транзакцию с побайтово идентичными scriptSigs на 31 входе, адрес назначения которой имитировал последние четыре символы настоящего адреса и оканчивался на GyQ3.
  • •Исправление, внесенное в коммите 90fe308, проверяет подписи на входах, принадлежащих кошельку, перед добавлением транзакций из mempool в локальную историю, однако неподтвержденные входящие платежи по-прежнему нельзя полностью проверить до подтверждения в блокчейне.
  • •Electrum советует пользователям, которые не могут обновиться, проверять адреса и суммы выходов перед подписанием чего-либо, включая повышение комиссии; пользователи, подключавшиеся только к собственным серверам, не пострадали.
Ростовые серверы Electrum подменяли отправленные платежи фальшивыми биткоин-транзакциями с нулевой комиссией; исправление выпущено в 4.8.3

Вредоносные серверы Electrum подменяли только что отправленные пользователями биткоин-платежи фальшивыми транзакциями с нулевой комиссией, переводящими средства на похожие адреса, рассчитывая, что жертвы повысят комиссию и подпишут версию злоумышленника. Electrum выпустила версию 4.8.3 24 октября для устранения уязвимости высокой степени опасности. В тот же день майнтейнер SomberNight опубликовал рекомендации GHSA-6jp4-8v48-cc5v и призвал пользователей обновиться.

Как работает атака

Electrum — это легкий клиент: он не запускает полный биткоин-узел и полагается на свой сервер в получении информации о неподтвержденных транзакциях в mempool, как объясняется в документации проекта. Когда пользователь подписывает и отправляет транзакцию (tx1), вредоносный сервер может остановить ее и передать кошельку другую транзакцию (tx2), которая отправляет средства на адрес злоумышленника.

Tx2 содержит недействительные подписи. Старые версии Electrum не проверяли подписи транзакций в mempool, поэтому кошелек отображал tx2 как ожидающую, а tx1 скрывал. Replace-By-Fee (RBF) позволяет отправителю повторно транслировать неподтвержденную транзакцию с более высокой комиссией. Если комиссия поддельной транзакции повышается, кошелек подписывает версию злоумышленника с действительной подписью. Это превращает рутинный шаг — повышение комиссии по платежу, который будто бы завис, — в момент, когда кошелек самой жертвы подписывает транзакцию атакующего.

Поддельный адрес совпадал с настоящим адресом назначения окончанием GyQ3

Одна из жертв, известная как dannydeezy, задокументировала атаку. Конфигурация представляла собой legacy P2SH multisig со схемой 2-of-3, двумя устройствами Trezor, 31 входом и одним выходом. Пользователь проверил выход на обоих Trezor, а затем выполнил трансляцию. Trezor проверили подлинную транзакцию до того, как она покинула кошелек; версия злоумышленника появилась уже после — ее передал вредоносный сервер, поэтому проверки на устройствах ее не видели. История кошелька затем показала всю сумму как неподтвержденную, уходящую на неизвестный адрес, а запись позже сменилась на «Local». В Electrum статус «Local» означает, что транзакция известна только кошельку и не видна в сети.

Подделка повторяла входы, версию и locktime реальной транзакции с побайтово идентичными scriptSigs на всех 31 входах. Все 62 подписи сходились с реальной транзакцией; ни одна не сходилась с подделкой. Почти средства ушли на похожий адрес, а небольшая сумма была возвращена на один из ранее использованных адресов самого кошелька.

Поддельный адрес оканчивался на GyQ3 — как и настоящий адрес назначения. Злоумышленник подобрал адрес, совпадающий с последними четырьмя символами правильного адреса. ZachXBT также указывал на похожую схему «отравления адресов», затрагивающую пользователей кошелька Phantom; поддельные адреса создаются так, чтобы обмануть беглую проверку первых и последних символов.

Версия 4.8.3 проверяет подписи только на входах, принадлежащих кошельку

Другой пользователь, Raju-K12, в приватном порядке сообщил 18 октября, что повысил комиссию поддельной транзакции и потерял средства. По словам майнтейнеров, некоторые серверы проводят атаку в реальных условиях.

Коммит 90fe308 добавляет проверку подписей на входах «is_mine», принадлежащих кошельку, перед добавлением транзакции из mempool в локальную историю. Версия 4.8.3 получила git-тег 23 октября, а бинарные файлы были выпущены на следующий день.

Electrum по-прежнему проверяет только входы, контролируемые кошельком, поэтому неподтвержденные входящие транзакции остаются непроверенными, так как клиент не имеет полноценного интерпретатора скриптов. Для получателей это означает, что ожидающий входящий платеж не может быть полностью проверен самим кошельком до подтверждения в блокчейне. Обходное решение Electrum для тех, кто не может обновиться, — проверять адреса и суммы выходов перед подписанием чего-либо, включая повышение комиссии. Пользователи, подключавшиеся только к собственным серверам, не пострадали.

Electrum и раньше выпускала экстренные исправления. В январе 2018 года она закрыла интерфейс JSON RPC, который оставался открытым около двух лет, после того как исследователь Google Tavis Ormandy обнаружил, что веб-сайт может обнаружить порт и опустошить средства. Cryptopolitan сообщала, что предупреждение об ошибке генерации seed в Coldcard поступило в июле — в тот же день примерно 594 BTC, около 38 млн долларов, были выведены примерно с 500 кошельков.