Эксплуатация SuperRare на $730 тыс. была легко предотвратима, — считают эксперты

NFT-торговая платформа SuperRare понесла убытки на $730,000 в понедельник из-за простой ошибки в смарт-контракте, которую, по мнению экспертов, можно было легко предотвратить с помощью стандартных практик тестирования.

Контракт стейкинга SuperRare (RARE) был взломан в понедельник, в результате чего было украдено около $731,000 в токенах RARE, сообщает крипто-кибербезопасная компания Cyvers.

Уязвимость связана с функцией, предназначенной для разрешения изменения корневого хэша Merkle только определенным адресам. Корневой хэш Merkle — критическая структура данных, определяющая балансы стейкинга пользователей. Однако логика была ошибочно написана так, чтобы любой адрес мог взаимодействовать с этой функцией.

0xAw, ведущий разработчик децентрализованной биржи Base Alien Base, отметил, что ошибка была настолько очевидной, что ее мог обнаружить ChatGPT. Cointelegraph независимо подтвердил, что модель o3 от OpenAI успешно идентифицировала недостаток при тестировании.

Security, Hackers, Cybersecurity, Hacks Соответствующий код в контракте стейкинга токенов SuperRare. Источник: Cointelegraph

«ChatGPT обнаружил бы это, любой компетентный разработчик Solidity обнаружил бы это. По сути, любой, если бы он посмотрел. Скорее всего, никто этого не сделал», — рассказал 0xAw Cointelegraph.

Соучредитель SuperRare Jonathan Perkins сообщил Cointelegraph, что средства основного протокола не были потеряны, и пострадавшие пользователи получат компенсацию. По его словам, затронуто около 61 кошелька.

«Мы извлекли урок из этого и теперь любые будущие изменения будут проходить через гораздо более надежную процедуру проверки», — сказал он.

Анатомия уязвимости

Чтобы определить, следует ли разрешить изменение корневого хэша Merkle, смарт-контракт проверял, не является ли взаимодействующий адрес конкретным адресом или владельцем контракта. Это противоположная логика тому, что предполагалось реализовать, что позволяло любому выводить стейкнутый RARE из контракта.

Security, Hackers, Cybersecurity, Hacks Строка, содержащая соответствующую проверку. Источник: Cointelegraph

Старший инженер страховой компании в сфере криптовалют Nexus Mutual сообщил Cointelegraph, что «модульные тесты выявили бы эту ошибку».

Mike Tiutin, архитектор блокчейна и технический директор AMLBot, сказал: «Это глупая ошибка разработчика, которая не была учтена в тестах (поэтому полное покрытие важно)».

Генеральный директор AMLBot Slava Demchuk пришел к тому же выводу, отметив, что «не было проведено обширного тестирования (или программы вознаграждений за обнаружение ошибок), которое могло бы обнаружить ее до развертывания». Он подчеркнул важность тестирования, отметив, что это «классический пример того, почему логика смарт-контрактов должна быть тщательно проверена». Он добавил:

«Это служит резким напоминанием: в децентрализованных системах даже ошибка в одном символе может иметь серьезные последствия».

Хотя Perkins утверждал, что контракты были проверены и модульно протестированы, он признал, что ошибка была внесена поздно в процессе и не была учтена в финальных тестовых сценариях:

«Это болезненное напоминание о том, как даже небольшие изменения в сложных системах могут иметь непредвиденные последствия».

Важность модульного тестирования

Модульные тесты — это небольшие автоматизированные тесты, которые проверяют, работают ли отдельные части («модули») программы — обычно функции или методы — должным образом. Каждый тест нацелен на определенное поведение или результат на основе заданного ввода, что позволяет выявлять ошибки на ранней стадии.

В данном случае тесты, которые проверяют, могут ли адреса вызывать функцию для изменения корневого хэша Merkle или нет, не прошли бы.

«По недосмотру или из-за недостаточного тестирования эффект был одним и тем же: уязвимость, которую можно было избежать, и которая привела к значительным потерям», — сказал Demchuk Cointelegraph.

0xAw также сказал, что «проблема заключалась, конечно, в явном отсутствии тестирования». Он сказал, что «это даже не код, который хорошо работает в нормальных условиях, и дает сбой, если вы подталкиваете его в нужном направлении».

«Этот код просто делает обратное от того, что вы ожидаете», — добавил он.

Perkins сообщил Cointelegraph, что в дальнейшем SuperRare внедрила новые рабочие процессы, которые требуют повторной проверки любых изменений после проверки, независимо от того, насколько они незначительны.

Большинство уязвимостей — это упущения

0xAw сказал, что ошибка — «нормальная человеческая ошибка». Вместо этого он считает «грандиозной ошибкой» то, что она «попала в производство и осталась там».

0xAw подчеркнул, что подавляющее большинство серьезных уязвимостей происходят из-за «действительно глупых и легко предотвратимых ошибок». Тем не менее, он признал, что «обычно их немного сложнее заметить, чем это».

Yehor Rudytsia, руководитель группы реагирования на инциденты Hacken, согласился, что тщательное модульное покрытие выявило бы недостаток.

«Если рассматривать эту функцию, это довольно очевидная ошибка», — сказал он.