Атака по захвату кошельков Electrum через zero-day уязвимость в PyBitmessage
В PyBitmessage, эталонной реализации клиента для пересылки сообщений в децентрализованной p2p-сети Bitmessage, выявлена критическая уязвимость, позволяющая удаленно выполнить сторонний Python-код на стороне пользователя. Проблема устранена в выпуске 0.6.3.2, но имеются сведения об организации атаки по похищению файлов с кошельками Electrum, которая началась еще до публичного раскрытия сведений об уязвимости. Уязвимости подвержены только ветки 0.6.2 и 0.6.3, в 0.6.1 проблема отсутствует. Всем пользователям уязвимых версий PyBitmessage рекомендуется срочно перегенерировать ключи и сменить пароли.
Проблема была вызвана применением функции eval() в коде, в которой выполнялось содержимое составленное на основе внешних данных. Злоумышленник мог подготовить сообщение, приводящее к выполнению произвольного Python-кода. Уязвимость активно использовалась для копирования файлов с кошельками ("~/.electrum/wallets/") с системы пользователей.
В ходе атаки также запускался бэкдор (зафиксирован при атаке на пользователей Windows) для организации доступа извне, позволяющий получить доступ к любым другим файлам в системе. Атаке подвергся в том числе Peter &352;urda, создатель Bitmessage, ключи которого были скомпрометированы. Тем не менее, судя по всему, основной целью атаки стали распространители вредоносных шифровальщиков, которые в последнее время активно используют Bitmessage для организации каналов связи с жертвами.
Децентрализованная p2p-сеть Bitmessage использует похожие на Bitcoin принципы построения распределенной шифрованной цепочки блоков, но вместо хранения информации о денежных транзакциях, ориентирована на пересылку сообщений. Сообщения в Bitmessage рассылаются широковещательно, но только получатель может расшифровать адресованное ему сообщение. Адресат не указывается, поэтому каждый участник получает все сообщения в сети и пытается расшифровать каждое сообщение и если сообщение адресовано ему, то расшифровка удается и в хранилище сообщений добавляется подтверждение получения. Если сообщение не было расшифровано в течение двух дней, оно удаляется из распределенного хранилища.