Критическая уязвимость в Bitcoin Core
20 сентября 2018 года
Опубликованы корректирующие выпуски пакета Bitcoin Core 0.14.3, 0.15.2 и 0.16.3, а также ответвления Bitcoin Knots 0.16.3, в которых устранена удалённая DoS-уязвимость (CVE-2018-17144), способная вызвать крах Bitcoin-клиентов bitcoind и Bitcoin-Qt (дополнение: при подготовке исправления в ветках 0.15 и 0.16 всплыла критическая инфляционная уязвимость, которая может привести к двойной трате средств). Проблема возникает при обработке полученного от майнера блока, включающего транзакцию, которая пытается дважды провести одни и те же входные данные.
Эксплуатация уязвимости достаточно затратна, так как приводящие к краху блоки являются некорректными и могут быть созданы только майнером, готовым пожертвовать доходом от создания блока как минимум на сумму 12.5 BTC (около 80 тысяч долларов). Кроме Bitcoin Core, проблема также проявляется в Litecoin и других ответвившихся от Bitcoin проектах. Потенциально уязвимость может быть использована для организации масштабной атаки на криптовалюты для массового вывода из строя узлов сети с целью достижения контроля за 51% мощности расчёта хэшей, необходимого для проведения атаки по двойной трате средств.
Дополнение:
Опубликованы новые подробности об уязвимости. В процессе создания исправления разработчики определили, что кроме отказа в обслуживании в ветках 0.15 и 0.16 проблема также имеет характер критической инфляционной уязвимости, которая может привести к двойной трате средств. После того как обладатели половины всех мощностей сети обновили версию Bitcoin Core и один из сторонних разработчиков независимо выявил новый вектор атаки, принято решение о раскрытии сведений о наличии и критической проблемы, информация о которой в примечании к новым выпускам Bitcoin Core была пропущена. Всем пользователям Bitcoin рекомендуется срочно установить обновление, чтобы блокировать попытки майнинга некорректных блоков и не допустить принятие недействительных транзакций.
Проблема изначально появилась в ветке Bitcoin Core 0.14 и была вызвана ошибкой в реализации оптимизации, позволяющей на этапе начальной обработки блока избавиться от ресурсоёмкой проверки на предмет вхождения в блок транзакций с повторяющимися операциями, тратящими одни средства дважды. Подобная проверка проводится при последующей обработке блока, но в случае выявления операций двойной траты, проводимых внутри блока в одной транзакции, генерируется исключение (assert), а не вызывается полноценный обработчик ошибок. В итоге в Bitcoin Core 0.14 при возникновении в блоке упомянутых транзакций происходит крах процесса.
В ветке Bitcoin Core 0.15 в процессе переработки логики отслеживания необработанных транзакций и устранении проблемы с безопасностью, которая приводила к чрезмерному расходованию ресурсов, код генерации исключения был немного изменён и вместо учёта ситуации, когда ранее неизрасходованные средства могут быть помечены потраченными, проверка ограничивалась определением самого факта существования транзакций с двойной тратой.
Таким образом, в Bitcoin Core 0.15 и 0.16 попытки проведения транзакций с двойной тратой средств в текущем блоке по-прежнему приводят к генерации исключения. Но если операция двойной траты включена в предыдущий блок исключение не генерируется, так как запись остаётся в структуре CCoin с флагом DIRTY и меткой о состоявшейся трате средств. Подобная особенность позволяет недобросовестному майнеру сформировать блок со средствами, потраченными дважды.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.