Критическая уязвимость в Bitcoin Core

Опубликованы корректирующие выпуски пакета 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 и меткой о состоявшейся трате средств. Подобная особенность позволяет недобросовестному майнеру сформировать блок со средствами, потраченными дважды.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.