DeFI-проект ForceDAO взломали сразу после запуска

Новый, блестящий, и непонятно о чем, проект ForceDAO взломали благодаря безграмотности Solidity-программистов и их неумению читать документацию. 25 миллионов токенов FORCE планировалось распространить в результате aridrop сегодня среди пользователей системы, но хакеры обрушили эти планы.

Уязвимость контракта токена-компаньона xFORCE (который задумывался для распределения долей от будущих прибылей будущей организации) позволила 5-ти хакерам украсть порядка $350 тыс. в эквиваленте Ethereum и загнать их на децентрализованных биржах, тем самым обрушив курс токена. Из 5-ти взломщиков один оказался whitehat-хакером (да-да, такие бывают, и мы часто пишем об этих героях нашего времени) и вернул токены владельцам, указав на проблему.

Хоть потеря 350 тысяч долларов и не кажется какой-то большой и может расцениваться как своеобразный bug-bounty, рассмотрим технические причины произошедшего. Проблема в том, что контракт токена xForce основан на чуть старой версии контракта MiniMe, последний коммит в который был аж в 2017-ом году, зато каков был этот коммит?

Ну ничего страшного. Просто пофиксили минорный баг, незначительный. Теперь функция doTransfer() вызывает исключение, а не возвращает false в случае, если у вызывающего не хватает средств на контракте. Кажется, ленивые задницы-программисты перед использованием чужого контракта, даже не потрудились сделать git pull и автоматически обновить рабочую копию перед размещением на блокчейне, ведь, по иронии судьбы, именно через этот незначительный баг их и взломали.

Дело в том, что основной контракт позволял получать токены FORCE в обмен на токены xFORCE и обратно. С помощью метода deposit() любой желающий мог создать токены xFORCE даже не имея токенов FORCE. Для этого он вызывал transfer() контракта, который при отсутствии средств просто возвращал false, а не откатывал транзакцию. Вызывающий контракт полагал, что если у вызывающего пользователя элементарно нет средств, до следующей строки исполнение не дойдет благодаря исключению с откатом транзакции, однако, этого не происходило. Если имеешь дело с деньгами, следует прочитать документацию или обложить код тестами.

Источник: cryptoslate

По теме

Комментарии закрыты.