Electrum 4.8.3 исправляет атаку вредоносных серверов, использовавшую повышение комиссий Bitcoin
Ключевые выводы
- •Electrum версии 4.8.3, выпущенная 23 октября и сопровождаемая публичным уведомлением 24 октября, исправляет уязвимость, позволявшую вредоносным серверам отображать в истории кошелька поддельные исходящие транзакции с недействительными подписями.
- •Атака использовала replace-by-fee: когда пользователь повышал комиссию подброшенной транзакции с нулевой комиссией, новая подпись подтверждала изменённый платёж на адрес, контролируемый злоумышленником.
- •Поступило два сообщения от пользователей; один, повысивший комиссию в поддельной транзакции 18 октября, потерял нераскрытую сумму средств.
- •Исправление проверяет подписи неподтверждённых транзакций, расходующих монеты с собственных адресов кошелька, тогда как входящие неподтверждённые транзакции остаются непроверенными, поскольку Electrum lacks полноценного консенсус-движка.
- •Пользователям версий ранее 4.8.3 следует обновиться или вручную подтверждать адреса получателей и суммы на экране подписания перед одобрением любой транзакции, включая повышение комиссии.

Уязвимость высокой степени опасности в Bitcoin-кошельке Electrum устранена в версии 4.8.3 после того, как злоумышленники нашли способ превратить механизм replace-by-fee в канал хищения подписанных транзакций. Разработчик Electrum SomberNight раскрыл проблему в security-уведомлении от 24 октября, указав, что некоторые серверы проводили атаку в реальных условиях. Поступило два сообщения от пользователей; один потерял средства.
Атаке нужна подпись владельца
Вредоносный сервер сам по себе не может потратить чужой Bitcoin. Подсунутая им поддельная транзакция содержит недействительные подписи, поэтому сеть её отклонит. Злоумышленнику нужна действительная подпись владельца кошелька, и ловушка устроена так, чтобы получить её через повышение комиссии.
Replace-by-fee (RBF) ускоряет ожидающий Bitcoin-платёж, заменяя его новой версией с более высокой комиссией. Для пользователя это похоже на изменение настройки. Для сети это совершенно новая транзакция, и её подписание разрешает каждый адрес получателя и сумму внутри неё. Если «заменяемая» транзакция уже была изменена, новая подпись утверждает изменённую версию.
Приманкой служит платёж, который выглядит зависшим. В случае с потерей средств сервер создал подделку с нулевой комиссией — разработчики полагают, это должно было спровоцировать повышение комиссии. Транзакция без комиссии остаётся неподтверждённой, и повышение комиссии — стандартная реакция.
Как вредоносный сервер устроил ловушку
Electrum — лёгкий кошелёк: он не загружает и не проверяет весь блокчейн самостоятельно. Согласно его документации, кошелёк обычно подключается примерно к десяти серверам, но полагается на один основной сервер для истории транзакций и их трансляции. Остальные в основном предоставляют заголовки блоков и оценки комиссий. В уведомлении отмечается, что доверие к основному серверу в отношении неподтверждённых транзакций — часть задокументированной архитектуры Electrum. Новым стало практическое превращение этого доверия в кражу. Этот компромисс и есть контекст атаки: передача проверки сторонним узлам делает лёгкий кошелёк лёгким, но это также означает, что история, которую видит пользователь, надёжна лишь настолько, насколькоёжен основной сервер — а до 4.8.3 исходящая запись с недействительными подписями могла появиться в этой истории как настоящая.
До этапа подписания ничего не потеряно. Действительная цифровая подпись может подтвердить неправильный платёж, если транзакция, представленная для подписания, была изменена — и именно это обеспечивает повышение комиссии.
Что видели двое пострадавших
Первое сообщение поступило от пользователя dannydeezy 11 октября. Платёж был отправлен с мультисигнатурного кошелька со схемой 2-из-3, защищённого двумя аппаратными устройствами Trezor, объединяя 31 вход в один выход. Пользователь проверил адрес получателя на обоих Trezor, а затем выполнил трансляцию. После этого история Electrum показала всю сумму, не подтверждённую, уходящую на неизвестный адрес, прежде чем запись сменилась на «Local». В мемпул ничего не попало.
Подделка была тщательно построена. Она использовала те же входы и побайтово скопировала данные подписей реальной транзакции, поэтому все 62 подписи совпадали с настоящим платежом и ни одна не совпадала с поддельным. Почти всё было отправлено на адрес, оканчивающийся на «GyQ3» — те же четыре символа, что и у настоящего адреса получателя, — а небольшая сумма возвращалась на один из собственных адресов кошелька, имитируя обычную сдачу. Комиссия была почти нулевой. Поскольку пользователь повторно не подписывал, реальная транзакция оставалась действительной и не транслированной, и деньги не были потеряны.
Разработчики не выявили вектор через повышение комиссии, пока второй пользователь, Raju-K12, не сообщил 18 октября, что потерял средства после повышения комиссии в поддельной транзакции. Сумма не раскрывается.
- 11 октября: Первое личное сообщение, без упоминания повышения комиссии
- 18 октября: Второе сообщение, после потери средств из-за повышения комиссии
- 23 октября: Выпущена версия 4.8.3 с исправлением
- 24 октября: Опубликованы бинарные файлы и security-уведомление
Что исправляет 4.8.3, а что нет
Исправление заставляет Electrum проверять подписи любой неподтверждённой транзакции, расходующей монеты с собственных адресов кошелька, прежде чем добавлять её в историю. Поддельный исходящий платёж с недействительными подписями теперь отклоняется, а не отображается, что закрывает этот вектор атаки.
Проверка намеренно узкая. Входящие неподтверждённые транзакции по-прежнему не проверяются, и уведомление объясняет почему: в Electrum нет полноценного консенсус-движка, а проверка чужих входов означала бы отслеживание их неподтверждённых родительских транзакций вплоть до уже добытых. Подтверждённые транзакции уже проверялись через упрощённую верификацию платежей (SPV), которая сверяет их с заголовками блоков.
Пользователи, подключающиеся только к доверенным серверам, например к собственным, не пострадали. Это исключение не распространяется на любой публичный сервер, который кошелёк выберет в качестве основного подключения.
Прежде чем подписывать что-либо снова
-
Обновитесь до 4.8.3. Скачайте её с официального сайта Electrum и проверьте подпис файла по инструкциям на сайте.
-
Проверьте полный адрес. Сравните его с исходным счётом или запросом платежа, а не с историей кошелька, которой управляет злоумышленник.
-
Подтвердите на экране устройства. Проверяйте суммы и комиссию при каждом новом подписании. Руководства Trezor по RBF и по отправке средств предписывают пользователям сверять обновлённые данные на устройстве.
-
Зависло или изменено? Остановитесь. Найдите исходный ID транзакции в независимом блокчейн-обозревателе, прежде чем что-либо повышать. В первом случае реальный платёж так и не достиг сети.
У кого нет возможности обновиться, есть обходной путь из уведомления: при подписании любой транзакции, с повышением комиссии или без, проверяйте, что адреса получателей и суммы в точности соответствуют ожидаемым. Версии ранее 4.8.3 не выполняют новую проверку подписей, поэтому для тех, кто остаётся на старом релизе, ручная проверка — единственная защита от этого вектора. Патч закрывает конкретно этот маршрут, но Electrum по-прежнему полагается на основной сервер для неподтверждённых данных, поэтому экран, на котором одобряется платёж, остаётся последней проверкой.
Эта статья предоставлена исключительно в информационных целях и не является финансовой или инвестиционной рекомендацией.
Источник: Coindoo