Electrum закрыл критическую уязвимость: хакеры уже похитили биткоины
Команда Electrum выпустила версию 4.8.3, устраняющую критическую уязвимость биткоин-кошелька. Разработчики подтвердили, что вредоносные серверы использовали её для подмены платежей пользователей, и как минимум в одном случае средства были похищены. Об этом сообщает CoinDesk.
Уязвимы все версии Electrum до 4.8.3. О инцидентах заявили два пользователя, один из них потерял биткоины при попытке повысить комиссию за транзакцию. Общий размер потерь разработчики не раскрывают.
Согласно бюллетеню безопасности, опубликованному 24 октября, атакующие эксплуатировали особенности обработки Electrum неподтверждённых транзакций, чтобы заменить легитимные исходящие платежи мошенническими. Пользователь может невольно одобрить такую операцию при увеличении комиссии.
Electrum — лёгкий биткоин-кошелёк: он подключается к внешним серверам для получения истории транзакций, вещания платежей и другой сетевой информации. В отличие от полного узла Bitcoin, программа не обрабатывает самостоятельно все аспекты активности блокчейна. Подтверждённые транзакции проверяются по методу Simple Payment Verification (SPV), тогда как при отображении неподтверждённых кошелёк исторически доверял своему основному серверу.
Этим разрывом и воспользовались атакующие: вредоносный сервер перехватывал отправленные транзакции и изменял их до попадания в сеть Bitcoin. Заблокировав вещание легитимного платежа, злоумышленник отправляет кошельку альтернативную транзакцию с адресом получателя, который контролирует сам. Подписи в такой транзакции недействительны, но уязвимая версия Electrum не проверяет их перед показом в истории операций.
Опасность возникает, когда пользователь пытается повысить комиссию через Replace-by-Fee (RBF) — механизм Bitcoin, позволяющий заменить неподтверждённую транзакцию другой, с более высокой комиссией. Одобрив корректировку, пользователь может подписать действительную транзакцию в пользу атакующего.
Разработчики раскрыли два случая, о которых им сообщили приватно: уязвимость перестала быть чисто теоретической. 11 октября пользователь dannydeezy заметил, что транзакция в истории Electrum не совпадает с первоначально отправленным платежом. 18 октября другой пользователь, RajuK12, потерял средства при попытке повысить комиссию и обратился к разработчикам.
В обоих случаях адреса получения контролировались атакующими и были подобраны так, чтобы совпадать с последними четырьмя символами адреса целевого получателя. Во втором инциденте мошенническая транзакция имела нулевую комиссию — разработчики предполагают, что она должна была подтолкнуть жертву к операции по повышению комиссии. Первый случай касался мультиподписного кошелька 2-из-3 с двумя устройствами Trezor: легитимная транзакция включала 31 вход и один выход. Следователи установили, что все 62 подписи действительны для исходного платежа и недействительны для подменённой транзакции. Поддельная транзакция перевела почти все биткоины на похожий адрес, вернув в кошелёк лишь небольшую часть. Исходная транзакция остаётся действительной, но так и не попала в публичную сеть Bitcoin.
Electrum признаёт, что часть серверов действительно проводит эту атаку, но не раскрывает число задействованных серверов, сумму похищенного и наличие других пострадавших.
Исправление вошло в версию 4.8.3 от 23 октября, бинарные файлы стали доступны 24 октября. В коммите 90fe308 разработчик добавил проверку подписей для неподтверждённых транзакций, входы которых контролируются кошельком пользователя. Теперь Electrum проверяет подписи, прежде чем добавлять такие операции в локальную историю, и мошеннические исходящие платежи не отображаются как легитимные.
Обновление не превращает Electrum в полный узел Bitcoin: входящие неподтверждённые транзакции по-прежнему не охвачены новыми проверками, а для подтверждённых платежей действует прежний порядок верификации. Пользователям версий до 4.8.3 рекомендуют скачать обновление с официального сайта Electrum. Тем, кто не может обновиться сейчас, советуют перед подписанием сверять полный адрес получателя и сумму — в том числе для транзакций с заменой комиссии. Атака конкретного вредоносного сервера не затрагивает пользователей, которые подключаются только к доверенным серверам, включая собственные.
История атак на Electrum показывает, что риски, связанные с серверами, возникают регулярно. В декабре 2018 года crypto.news сообщал, что вредоносные серверы показывали пользователям поддельные уведомления об обновлении ПО; тогда потери оценивались почти в $1 млн. Очередная волна атак на серверы в 2019 году использовала фальшивые обновления кошелька и denial-of-service, чтобы подтолкнуть пользователей к загрузке скомпрометированного ПО. Те атаки опирались на обманчивые загрузки, а новая уязвимость связана с манипуляцией данными о незавершённых транзакциях внутри вполне легитимного кошелька. В статье 2020 года с интервью о серверах Electrum обсуждались компромиссы лёгких кошельков, включая их зависимость от внешней инфраструктуры для истории транзакций. Документация Electrum указывает: клиент обычно подключается примерно к десяти серверам, но выбирает один основной для получения истории и вещания транзакций; этому основному серверу доверяется информация о неподтверждённых транзакциях.