По данным исследователей безопасности из Neodyme, из-за ошибки в библиотеке протокола Solana (Solana Protocol Library (SPL)) — наборе справочных документов для проектов Solana, злоумышленники могли украсть деньги из нескольких проектов Solana, со скоростью 27 миллионов долларов в час.
Затронутые проекты включают агрегатор доходности Tulip Protocol и протоколы кредитования Solend и Larix. В настоящее время на эти проекты приходится 1,7 миллиарда долларов (хотя до сегодняшнего краха рынка это было значительно больше).
Обнаружение ошибки на миллиард долларов
В своем сообщении в блоге Neodyme объяснил, что ошибка была впервые публично раскрыта одним из аудиторов Neodyme, известным как Simon, на платформе обмена файлами GitHub в июне. В то время исследователи безопасности не знали, можно ли его использовать и насколько велико его влияние. Ошибка осталась незамеченной.
1 декабря Simon увидел, что проблема все еще открыта и ошибка не исправлена. Из-за его опасений исследователи безопасности в Neodyme начали тестирование, чтобы увидеть, можно ли использовать ошибку, и оценить, насколько она серьезна. По словам Neodyme, это была «на первый взгляд безобидная ошибка округления», но они быстро обнаружили, что она может украсть целое состояние — миллионами крошечных кусочков.
Баг работал следующим образом. Проще говоря, для приложений Solana есть механизм, когда вы кладете и снимаете средства. Если протокол соответствовал справочным документам SPL, то в момент вывода средства округлялись бы до ближайшего целого числа. Это могло бы произойти только в том случае, если бы пользователю была задолженность по части наименьшей контрольной единицы, известной как Lamport (это похоже на сатоши, наименьшее количество биткойнов).
Теперь это работало в обоих направлениях. Некоторые люди в конечном итоге получат дополнительную долю своих жетонов. Другие люди в конечном итоге получат немного меньше, чем им причитается. Но это будет мизерная сумма на человека, и в среднем будет примерно равна.
Но есть ли кто-нибудь, чтобы обыгрывать систему, задавались вопросом исследователи, наверняка они могли бы в конечном итоге взять крошечные дополнительные суммы? И если бы они делали это снова и снова, возможно, они могли бы заработать значительные суммы денег.
Исследователи проверили свою теорию на практике на копии блокчейна. Они отправили транзакцию, предназначенную для использования ошибки, и ей удалось украсть 0,000001 BTC (0,047 доллара США) из-за ошибки округления.
Исследователи подсчитали, что они могут выполнить эту ошибку 150-200 раз за одну транзакцию и поместить многие из этих транзакций в один блок. Они посчитали, что такой эксплойт может украсть средства со скоростью 7500 долларов в секунду или 27 миллионов долларов в час.
С точки зрения того, сколько всего может быть украдено, остается открытым вопрос, как долго этот вид эксплойта мог существовать, прежде чем он был замечен и были приняты меры защиты. Это будет зависеть от того, насколько неприкрыты были нападающие и насколько быстро они атаковали. Но исследователи знали, что риску грозит более миллиарда долларов.
Исследователи быстро связались с несколькими проектами Solana, которые, по их мнению, были затронуты этой ошибкой. Поскольку многие проекты Solana имеют закрытый исходный код, это была гораздо более сложная задача и они ошибочно определили пару проектов. Но им удалось связаться с Solend, Tulip и Larix, которые исправили ошибку.
После того, как ошибка была обнаружена, Solana Labs также исправила справочные документы, чтобы гарантировать, что новые проекты, следующие ее инструкциям, не будут вводить ее снова.