banner
Центр новостей
Наш онлайн-сервис доступен круглосуточно.

Уязвимость Lindell17, связанная с прерыванием работы [CVE

Nov 08, 2023

Эта уязвимость позволяет злоумышленнику извлечь полный закрытый ключ из кошелька, реализующего протокол Lindell17 2PC, извлекая один бит при каждой попытке подписи (всего 256). Coinbase WaaS, Zengo и другие библиотеки были исправлены.

Исследовательская группа Fireblocks обнаружила уязвимость в реальных развертываниях протокола Lindell17 порогового ECDSA. Уязвимость была обнаружена на интерфейсе между протоколом и более широкой инфраструктурой безопасности, и потенциально ей подвержены все продукты безопасности, основанные на Lindell17. Мы обнаружили несколько поставщиков кошельков как услуг, розничных кошельков и библиотек с открытым исходным кодом, которые были уязвимы для этой атаки с разной степенью возможности использования.

Эксплойт возник из-за того, что реализации Lindell17 отклоняются от спецификации научной статьи и игнорируют или неправильно обрабатывают прерывания в случае неудачных подписей. Предполагая привилегированный доступ со стороны злоумышленника, уязвимость может быть использована для кражи ключа примерно после 200 запросов на подпись. Уязвимость оказалась практичной и проверена на популярных библиотеках с открытым исходным кодом и некоторых реальных системах.

Практическая реализация протокола для кошельков часто сталкивается с трудной дилеммой: либо остановить операции после неудачной подписи, что потенциально может привести к блокировке средств, либо продолжить процесс подписи, тем самым рискуя раскрыть дополнительные ключевые биты с каждой подписью.

Уязвимость была первоначально обнаружена в кошельке ZenGo, а затем проверена в библиотеке Coinbase «Кошелек как услуга» (WaaS), при этом были затронуты дополнительные поставщики кошельков и библиотеки. Он также был проверен с помощью рабочего POC в общей реализации протокола с открытым исходным кодом (ссылка ниже). И Coinbase, и ZenGo оперативно устранили проблему в рамках нашего ответственного процесса раскрытия информации и заверили нас, что они проверили и ни один кошельк не был взломан.

Уязвимость обеспечивает полное извлечение закрытого ключа, что позволяет злоумышленникам украсть все средства из криптокошелька. Однако это асимметричная уязвимость, означающая, что злоумышленник должен подкупить конкретную сторону, чтобы организовать атаку (т. е. стороны не являются неразличимыми с точки зрения атаки).

Более подробно: протокол Lindell17 обычно используется для кошельков, в которых участвуют поставщик кошелька и конечный пользователь, при этом базовый секретный ключ распределяется между ними. Кроме того, существует две возможные конфигурации кошелька: либо поставщик кошелька (Сервис) завершает подпись, либо конечный пользователь (Клиент) делает это в конце протокола. Сторона, которой поручено завершить подпись, подвергается риску, и злоумышленник может воспользоваться этой уязвимостью, скомпрометировав контрагента.

Дело 1.Сервер завершает подпись

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

Таким образом, в зависимости от того, завершает ли Сервер подпись или нет (злоумышленник получает эту информацию либо потому, что подпись появляется или не появляется в блокчейне, либо сам Сервер уведомляет злоумышленника), злоумышленник получает часть доли Сервера. . В конечном итоге он сможет полностью восстановить ключ после 256 подписей.

Следует отметить, что описанную выше атаку можно было бы ускорить, если бы запросы на подпись можно было «быстро инициировать» (быстро инициировать один за другим), что обычно возможно, поскольку сервер обычно автоматизирован и существенно не ограничивает количество подписей.

Случай 2.Клиент завершает подпись

Во втором случае, скомпрометировав Сервер и выполнив описанную выше атаку в обратном порядке, злоумышленник может извлечь ключ аналогичным способом.