20 сентября один и тот же адрес почти одновременно вывел средства из двух связанных проектов — Fetch.ai и NuNet. Суммарно около 2 млн долларов: 1,56 млн в токенах FET и примерно 452 тысячи в NTX. Токен NuNet после этого обвалился более чем на 70% и обновил исторический минимум.
Коротко
Атаку публично зафиксировала охранная компания Blockaid. Нападавший вызвал функцию conversionIn у контракта TokenConversionManagerV3, предъявив действующую подпись уполномоченного на конвертацию, и одной транзакцией снял весь остаток FET в контракте. Тем же кошельком он выпустил токены NTX. Средства обменяны на 546,36 ETH, это около 1,44 млн долларов.
Что произошло
| Показатель | Значение |
|---|---|
| Дата | 20 сентября 2026 |
| Выведено из Fetch.ai | ≈1,56 млн $ в FET |
| Выпущено NTX | ≈452 тыс. $ |
| Контракт | TokenConversionManagerV3, функция conversionIn |
| Адрес нападавшего | 0x1572…c362 |
| Куда ушло | 546,36 ETH (≈1,44 млн $) |
| Реакция цены | NTX −70% до 0,000328 $, FET −5% |
| Обнаружила | Blockaid |
Где была дыра
Суть уязвимости в том, что единственной проверкой полномочий в функции conversionIn служила подпись ECDSA от одного внешнего адреса. Это означает, что компрометации одного ключа достаточно, чтобы распорядиться всем содержимым контракта: второго подтверждения механизм не требует.
Собственное наблюдение: самое неприятное здесь не отсутствие идеи защиты, а то, что защита в этом же контракте есть — и не применена. У парной функции conversionOut стоит модификатор checkLimits, ограничивающий сумму одной операции. У conversionIn его нет. То есть разработчики понимали риск и написали ограничитель, но повесили его только на одну из двух симметричных функций.
Практическое следствие простое: ограничитель превратил бы потерю всего остатка в потерю одного лимита. При наличии checkLimits нападавшему пришлось бы повторять операцию, а повторяющиеся однотипные вызовы — ровно то, на что срабатывают системы наблюдения. Одна строка в модификаторе отделяла инцидент на два миллиона от инцидента, который заметили бы на первой же транзакции.
Асимметрия между парными функциями — частый след истории разработки: одну ветку правили после аудита или инцидента, вторую не тронули, потому что она «делает то же самое наоборот». Для проверяющего это заметно только при сравнении двух функций рядом, а не при чтении каждой по отдельности.
Почему NTX упал сильнее FET
Разница в том, что именно сделал нападавший с каждым токеном. Из Fetch.ai он вывел существующие FET — предложение на рынке не изменилось, изменился владелец, и цена просела на 5%. У NuNet он выпустил новые NTX, то есть добавил предложение к обращающемуся объёму и сразу начал его продавать. Для токена с небольшой капитализацией такой объём оказался разрушительным: минус 70% и исторический минимум 0,000328 доллара.
Что делать держателям
Прямых действий для владельцев токенов инцидент не требует: пострадали контракты проектов, а не пользовательские кошельки. Но разрешения, выданные контрактам этих проектов, стоит проверить и отозвать — после компрометации механизма конвертации любые действующие одобрения остаются потенциальным каналом.
Частые вопросы
Пострадали ли обычные кошельки
Нет. Средства выведены из контракта конвертации, а не с адресов пользователей. Держатели потеряли в стоимости токенов, а не в балансе.
Что такое подпись уполномоченного на конвертацию
Криптографическое разрешение от заранее назначенного адреса, без которого контракт не должен выпускать средства. Здесь эта подпись была единственной проверкой.
Почему одной подписи мало
Потому что компрометация одного ключа даёт полный доступ. Схемы с несколькими подписями требуют согласия нескольких держателей, и утечка одного ключа не открывает контракт.
Вернут ли средства
На момент публикации сведений о возврате нет. Активы обменяны на эфир, что обычно указывает на подготовку к выводу, а не на переговоры.
Как понять, что проект защищён лучше
Смотреть, есть ли ограничение суммы на операцию и сколько подписей требуется для движения средств. Оба параметра видны в подтверждённом исходном коде контракта.
Обсуждение
Добавить комментарий