Уязвимость в Electrum позволила хакерам подменять транзакции и красть биткоины

Злоумышленники использовали особенность архитектуры биткоин-кошелька Electrum для подмены исходящих транзакций. Как минимум один пользователь потерял средства при попытке ускорить перевод.

Уязвимость в Electrum позволила хакерам подменять транзакции и красть биткоины
Фото: ForkLog

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

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

Управляющий сервером хакер мог перехватить исходящую транзакцию пользователя и не передать ее в блокчейн. Вместо нее сервер отправлял кошельку поддельную операцию, в которой адрес получателя заменялся на принадлежащий атакующему. Хотя подписи такого перевода были недействительными, Electrum отображал его в истории как неподтвержденный, а настоящая транзакция там не появлялась.

Далее злоумышленник рассчитывал, что пользователь попытается ускорить якобы зависший платеж с помощью механизма Replace-by-Fee (RBF). Эта функция позволяет заменить неподтвержденную транзакцию новой версией с более высокой комиссией. При использовании RBF Electrum мог создать и подписать действительный перевод на основе поддельной операции, и биткоины отправлялись злоумышленнику. В одном из известных случаев атакующий установил нулевую комиссию, предположительно чтобы побудить пользователя ускорить платеж. Для маскировки подмены злоумышленник также подбирал адреса, у которых последние четыре символа совпадали с адресом настоящего получателя.

Сама по себе подмена не приводила к потере средств. Атака не требовала доступа к приватным ключам: монеты уходили злоумышленнику, только если пользователь сам подписывал измененную операцию.

По словам разработчиков, первое сообщение об уязвимости поступило 11 октября от пользователя кошелька с мультиподписью «2 из 3» и двумя аппаратными устройствами Trezor. После проверки и отправки перевода он обнаружил в истории Electrum другую транзакцию — на неизвестный адрес. Исходный платеж при этом не попал в сеть биткоина. Пользователь не сообщил о потере средств. 18 октября команда кошелька получила второе обращение. Его автор рассказал, что увеличил комиссию подмененной транзакции и в результате лишился биткоинов. Сумму ущерба представители проекта не раскрыли. Также неизвестны личности злоумышленников, количество подконтрольных им серверов и общий масштаб атак.

24 октября команда Electrum публично раскрыла уязвимость и выпустила исправленную версию 4.8.3. Обновление добавило проверку подписей входов неподтвержденных транзакций, расходующих средства пользователя. Это предотвращает описанную подмену, но не означает полной проверки данных от сервера. Например, входящие транзакции по-прежнему не проверяются.

Разработчики призвали пользователей установить последнюю версию кошелька. Тем, кто пока не обновился, они рекомендовали внимательно проверять адреса получателей и суммы перед подписанием любых операций, включая увеличение комиссии. Пользователи, подключавшиеся только к доверенным серверам, например собственным, не подвергались описанной атаке.