Что нового?

Новости Notional Finance теряет $1.73 млн из-за бага, обнулившего долг

Новости

vitel59

Эксперт
Регистрация
15 Май 2026
Сообщения
744
Реакции
68
Coin
1,404
Децентрализованная кредитная платформа Notional Finance подверглась атаке 4 сентября, в результате которой потеряла около 1,73 миллиона долларов. Причиной инцидента стала ошибка переполнения целочисленного значения в смарт-контрактах первой версии протокола. Технический отчёт о произошедшем был опубликован компанией SlowMist, специализирующейся на анализе блокчейн-безопасности.

Уязвимость была обнаружена в Escrow-контракте, а именно в функции ExchangeRate._convertToETH, которая отвечает за конвертацию подписанных балансов в эквивалент в эфире. Проблема заключалась в способе обработки отрицательных значений при приведении к беззнаковому типу uint128. Если абсолютное значение отрицательного числа превышало максимально допустимое для uint128 (2^128 – 1), происходило обрезание, и результат становился равным нулю.

Злоумышленник использовал эту особенность следующим образом. Он открыл две позиции обязательств под одним плательщиком — на сумму 1 и на величину uint128.max. Сумма этих двух значений составила ровно 2^128. В системе проверки рисков обязательства учитываются как отрицательные числа, поэтому в функцию конвертации был передан аргумент -2^128. Поскольку контракт работает на версии Solidity 0.6.x, абсолютное значение этого числа при преобразовании в uint128 приводило к переполнению и обнулению, в результате чего крупное обязательство полностью исчезало из расчёта залога.

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

SlowMist характеризует произошедшее как математический баг на границе учётных операций. Механизм Notional предполагает, что позиции fCash чеканятся парами, фиксируя обязательство с одной стороны и требование с другой, а риск-фреймворк агрегирует все валютные балансы в единый эквивалент в эфире. Каждый этап процесса в итоге свёлся к одному переполнению на этапе конвертации.

Для реализации атаки злоумышленник предварительно развернул вспомогательные контракты, авторизовал их через вызов setApprovalForAll на ERC1155Trade и разделил две операции чеканки по bond-активам с различными датами погашения. Такое разделение было необходимо, чтобы обязательства не суммировались между собой и не вызывали реверт транзакции в механизмах SafeMath.

Убыток в размере 1,73 миллиона долларов напрямую затронул кредитный рынок платформы, безопасность которого напрямую зависит от корректности расчёта залогового обеспечения. Отчёт SlowMist акцентирует внимание на логике учёта именно в версии V1 протокола, подчёркивая, что проблема носит архитектурный характер и требует пересмотра подходов к обработке числовых значений в уязвимых участках кода.
 
Сверху Снизу