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