Back to Blog

В Solana rBPF обнаружена новая ошибка переполнения целых чисел

Code Auditing
30 декабря 2021 г.
3 min read

Недавно наша система обнаружения уязвимостей выявила критическую проблему в rBPF Solana (т.е. в виртуальной машине, на которой работают все dApps Solana: https://github.com/solana-labs/rbpf). После тщательного расследования мы обнаружили, что это ошибка переполнения целого числа, которую можно использовать для вывода из строя всей сети Solana. Мы сообщили об этой ошибке команде безопасности Solana, и они немедленно приняли меры для подтверждения и исправления проблемы. На момент написания статьи почти все узлы валидаторов получили исправление и обновились до последней версии, что означает, что публикация информации об уязвимости безопасна.

eBPF и rBPF

Extended Berkeley Packet Filter (eBPF[1]) изначально был разработан для фильтрации пакетов в ядре. Благодаря безопасности, эффективности и масштабируемости eBPF, он теперь используется в различных областях, таких как сетевые технологии, трассировка, профилирование ит.д.[2]. Учитывая широкие возможности eBPF, Solana также выбрала его в качестве движка выполнения для смарт-контрактов. Чтобы создавать dApps на Solana, разработчикам необходимо писать свои смарт-контракты на Rust, которые будут компилироваться в байт-код eBPF.

Для хостинга dApps Solana требуется точная виртуальная машина для eBPF. В данном случае Solana использует rBPF — виртуальную машину для eBPF, написанную на языке Rust. Однако вопрос о том, является ли предложенная виртуальная машина (т.е. rBPF) надежной, безопасной и точной, остается открытым. Как только внутри rBPF возникают проблемы безопасности, это влияет на все валидаторы, использующие rBPF, что приводит к огромным потерям (например, DDoS-атака) для всей сети Solana.

Первопричина ошибки

Мы разработали инструмент для поиска ошибок в rBPF. Этот инструмент все еще находится в стадии активной разработки. В процессе работы в rBPF (версия 0.2.16) была выявлена одна серьезная проблема, которая может вывести из строя всю сеть.

В частности, функция «load» в файле «elf.rs» используется для синтаксического анализа и проверки ELF-файла (смарт-контракта). Сначала функция «load» считывает структуру ELF и вызывает функцию «relocate» для установки смещения вызываемого объекта. Однако в функции «relocate» атрибут «sym.st_value» извлекается напрямую из ELF-файла. Если значение «st_value» достаточно велико, при вычислении «addr» (которое является суммой «sym.st_value» и «refd_pa») может возникнуть переполнение целого числа.

В этом случае злоумышленник может создать вредоносный ELF-файл в качестве смарт-контракта, который вызовет переполнение целого числа. После этого каждый валидатор запустит целевой ELF-файл, и rBPF выдаст ошибку «add with overflow» (переполнение при сложении).

В этот момент rBPF зависнет, и поступающие транзакции не будут выполняться, что приведет к DoS-атаке. Мы можем наблюдать, как узел зависает на этапе «Finalizing transaction» (завершение транзакции), как показано ниже, из-за переполнения целого числа при загрузке ELF-файла.

Эта проблема была внесена в https://github.com/solana-labs/rbpf/pull/200, что означает, что rBPF был уязвим начиная с версии 0.2.14. Мы выявили проблему и сообщили о ней команде безопасности Solana 6 декабря 2021 года. Solana исправила проблему за несколько часов после нашего отчета, применив механизм safemath. Исправление доступно по ссылке: https://github.com/solana-labs/rbpf/pull/236. На момент написания статьи (30.12.2021) более 86% валидаторов обновились до самой новой версии.

[1] https://en.wikipedia.org/wiki/Berkeley_Packet_Filter

[2] https://ebpf.io/

Хронология

  • 06.12.2021: проблема была сообщена команде безопасности Solana
  • 06.12.2021: уязвимость была исправлена.
  • 30.12.2021: информация об этой уязвимости была опубликована
  • 28.01.2022: был присвоен номер CVE-2021–46102
Sign up for the latest updates
Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec
Security Insights

Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec

Этот еженедельный отчёт охватывает два инцидента безопасности в сетях Ethereum и BNB Chain за период 19.10.2026–25.10.2026. В нём рассматриваются захват управления X100 Freezer, профинансированный с помощью флеш-кредита, и ошибка при расчёте налога, затронувшая пул ликвидности токена NEM в сети BNB Chain. Оценочные потери в рамках отчёта составляют в общей сложности около 5,57 млн USD: ~4,75 млн USD по рассматриваемой транзакции X100 и ~820 тыс. USD в результате инцидента с пулом NEM. В эту сумму не входят отдельно опубликованные данные о последующих выводах средств из X100.

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec
Security Insights

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec

В этом еженедельном отчёте рассматриваются 3 инцидента безопасности за период 12.10.2026–18.10.2026. Общий оценочный ущерб составил около 3,87 млн USD. Ущерб Autheo Network от компрометации закрытого ключа составил примерно 1,76 млн USD, Qubic Wallet потерял примерно 1,30 млн USD из-за ненадёжной генерации seed, а ошибка учёта в контрактах Smart Token Vesting V2 сети UNCX Network на Ethereum, BNB Chain, Base и Robinhood Chain привела к ущербу примерно в 807 тыс. USD. В подробном анализе инцидента UNCX объясняется, как некорректный расчёт совокупного количества долей смешивал транши вестинга, созданные при разных соотношениях токенов и долей, и позволял выводить из общих пулов больше положенного.

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec
Security Insights

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec

В Ethereum за 05–11.10.2026 произошёл 1 инцидент; ущерб — около $542 тыс. Атакующий передал вредоносный адаптер функции MakerDaoBot без контроля доступа. Получив права на балансы MakerDAO, адаптер закрыл 4 аукциона ETH-A, конвертировал 200 ETH-A в WETH; атакующий вывел 200 ETH.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit