#electrum修复4.8.3前版本高危漏洞
Все 62 подписи прошли проверку, а адрес получателя — не ваш

📣 盘面异动群里喊

24 октября старейший биткоин-кошелёк Electrum выпустил обновление безопасности 4.8.3. В официальном объявлении уязвимость классифицировали как High: она затрагивает все версии до 4.8.3. Номер CVE ей не присвоили, но в объявлении есть серьёзная фраза: некоторые серверы уже делают это в реальных условиях 🦖

Вы обычно пользуетесь лёгким кошельком: не скачиваете весь блокчейн, а доверяете одному серверу, который сообщает вам баланс и данные о транзакциях. В официальной документации говорится, что это компромисс, заложенный в конструкцию. Проблема в том, что его превратили в оружие ⚠️

Злоумышленник контролирует сервер, к которому вы подключились. Вы нажимаете в кошельке кнопку отправки транзакции в сеть, но сервер перехватывает настоящую транзакцию — она даже не попадает в мемпул. Затем сервер подсовывает вашему кошельку поддельную транзакцию. У неё точно такие же входы, версия и время блокировки, как у только что созданной вами. Скрипты подписей всех 31 входа совпадают побайтно. Единственное отличие — адрес получателя заменён на адрес злоумышленника. А поддельный адрес многократно перебирали, чтобы последние 4 символа в точности совпадали с адресом, на который вы действительно хотели отправить средства.

Все подписи в поддельной транзакции недействительны, но лёгкий кошелёк не проверяет скрипты и не может этого обнаружить. Поэтому настоящая транзакция исчезает из истории, и остаётся только неподтверждённая поддельная. Сумма выглядит ровно как та, которую вы собирались отправить. Мошенник выставляет комиссию почти нулевой — и ждёт, пока вы заметите, что перевод завис, и вручную нажмёте кнопку повышения комиссии.

Как только вы повышаете комиссию, кошелёк подписывает именно поддельную транзакцию. Вы собственноручно подписываете перевод своих монет злоумышленнику 💥

В объявлении описаны два реальных случая. 11 октября первый пользователь сообщил о проблеме в частном порядке. У него была старая схема мультиподписи 2-of-3, два аппаратных кошелька Trezor, 31 вход и 1 выход. Перед отправкой он сверил адрес на экранах обоих устройств. Но в истории появилась неподтверждённая транзакция на незнакомый адрес. 18 октября о проблеме сообщил второй пользователь: он повысил комиссию, и деньги действительно пропали. От первого сообщения до присвоения уязвимости статуса High в версии 4.8.3 прошло всего 12 дней, а до публикации бинарного файла — 13 дней.

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

Исправленная версия 4.8.3 проверяет только входы, принадлежащие вашему собственному кошельку. Транзакции, которыми вам отправляют средства, по-прежнему не проверяются, потому что у лёгкого клиента нет полноценного механизма консенсуса. Сами разработчики признают: чтобы охватить и эту часть, пришлось бы рекурсивно проверять неподтверждённые родительские транзакции, а это слишком дорого.

Что можно сделать: немедленно обновиться до 4.8.3; перед повышением комиссии обязательно сверять адрес получателя и сумму; в долгосрочной перспективе — запустить собственный сервер. Разработчики прямо говорят, что пользователи, подключающиеся к собственному серверу, этой уязвимости не подвержены.

Вы обычно пользуетесь лёгким кошельком или запускаете собственную ноду? Обсудим в комментариях.

Нажмите на аватар, чтобы посмотреть прямой эфир.

Каждый день рассказываю о главных новостях безопасности биткоина: не просто о том, что произошло, но и о логике и возможностях, которые за этим стоят 👀🚀