Новая уязвимость в DeFi
Ноль дней без инцидентов в мире DeFi. На этот раз уязвимость была обнаружена в широко используемой «эллиптической библиотеке». Усугубляет ситуацию то, что ее эксплуатация может привести к тому, что хакеры получат контроль над личными ключами пользователей и смогут опустошить кошельки. Все это происходит через простое мошенническое сообщение, подписанное пользователем.
Является ли это критической проблемой?
Первое, что следует учитывать: библиотеки, такие как elliptic, предоставляют разработчикам готовые компоненты кода. Это означает, что вместо написания кода с нуля и проверки его по мере создания, разработчики могут заимствовать необходимые элементы. Несмотря на то, что это считается более безопасной практикой из-за постоянного тестирования этих библиотек, это также увеличивает риски, если одна из уязвимостей проскользнет.
Библиотека elliptic широко используется в экосистеме JavaScript и обеспечивает криптографическими функциями многие известные проекты блокчейна, веб-приложения и системы безопасности. Согласно статистике NPM, пакет с ошибкой скачивается примерно 12-13 миллионов раз в неделю, и более 3000 проектов напрямую указывают его как зависимость. Это широкое использование подразумевает, что уязвимость потенциально затрагивает огромное количество приложений, особенно криптовалютные кошельки, узлы блокчейна и системы электронных подписей, а также любые сервисы, полагающиеся на ECDSA-подписи через библиотеку elliptic, особенно при обработке внешних данных.
Серьезность уязвимости
Эта уязвимость позволяет удаленным хакерам полностью скомпрометировать конфиденциальные данные без надлежащей авторизации. Вот почему проблема получила крайне высокую оценку серьезности — примерно девять из десяти по шкале CVSS.
Важно отметить, что для эксплуатации этой уязвимости требуется очень специфическая последовательность действий: жертва должна подписать произвольные данные, предоставленные злоумышленником. Это означает, что некоторые проекты могут оставаться в безопасности, например, если приложение подписывает только заранее определенные внутренние сообщения. Тем не менее, многие пользователи не обращают столь пристального внимания на подписание сообщений через криптовалютные кошельки, как на подписание транзакции.
Когда веб-сайт 3.0 просит пользователей подписать условия обслуживания, многие игнорируют их, не читая. Аналогично, пользователи могут быстро подписать сообщение для airdrop, не осознавая всех последствий.
Технические детали
Проблема возникает из-за неправильной обработки ошибок при создании ECDSA (алгоритма цифровой подписи на эллиптической кривой) подписей. ECDSA используется для подтверждения подлинности сообщений, таких как транзакции блокчейна. Чтобы создать подпись, вам нужен секретный ключ, который известен только владельцу, и уникальное случайное число, называемое «nonce». Если одно и то же значение nonce используется более одного раза для различных сообщений, кто-то может выяснить секретный ключ, используя математические методы.
Обычно злоумышленники не могут вычислить приватный ключ из одной или двух подписей, так как каждая из них использует уникальное случайное число. Однако у библиотеки elliptic есть недостаток: если она получает необычный тип ввода (например, специальную строку вместо ожидаемого формата), она может создать две подписи с одинаковым значением nonce для различных сообщений. Эта ошибка может раскрыть приватный ключ, что никогда не должно происходить при правильном использовании ECDSA.
Чтобы воспользоваться этой уязвимостью, злоумышленнику понадобятся две такие подписи, что позволит вычислить приватный ключ пользователя и получить полный доступ ко всем его средствам и действиям, связанным с ними. Подробная информация доступна в GitHub Security Advisory.
Сценарии эксплуатации
Злоумышленники могут использовать эту уязвимость различными способами, включая следующие: общее равнодушие пользователей к подписанию сообщений по сравнению с транзакциями. Криптопроекты часто просят пользователей подписывать условия обслуживания или сообщения о участии в airdrop, что потенциально облегчает эксплуатацию.
Подумайте об этом: подписались бы вы на сообщение, чтобы получить бесплатные токены? Что, если бы эта подпись могла стоить вам всего вашего крипто-баланса?
Рекомендации
Пользователи должны незамедлительно обновить все приложения и кошельки, которые используют библиотеку elliptic для подписей, до последней безопасной версии. Будьте осторожны при подписании сообщений, особенно от незнакомых или подозрительных источников. Разработчики кошельков и приложений должны проверить версию своей библиотеки elliptic. Если какие-либо пользователи могут быть затронуты уязвимой версией, разработчики обязаны уведомить их о необходимости обновления.