Back to Blog

Когда «SafeMint» становится небезопасным: уроки инцидента с HypeBears

Code Auditing
3 февраля 2022 г.
2 min read

Утром 3 февраля (часовой пояс +8) наша система зафиксировала транзакцию атаки 0xfa97c3476aa8aeac662dae0cc3f0d3da48472ff4e7c55d0e305901ec37a2f704, направленную на NFT-контракт HypeBears. После расследования мы выяснили, что это была атака типа re-entrancy (повторный вход), вызванная функцией _safeMint стандарта ERC721.

Первопричина

В проекте установлено ограничение на количество NFT, которое может минтить один аккаунт. По сути, используется карта addressMinted, которая фиксирует, выпустил ли аккаунт NFT.

При минтинге NFT код использует функцию _safeMint из эталонной реализации OpenZeppelin. Эта функция называется «безопасной» (safe), так как она проверяет, может ли получатель принимать токены ERC721. Это предотвращает ситуацию, когда NFT отправляется на контракт, не способный обрабатывать токены ERC721. Согласно документации:

Если параметр to указывает на смарт-контракт, он должен реализовывать интерфейс IERC721Receiver.onERC721Received, который вызывается при безопасном переводе. Следующий код демонстрирует реализацию функции _safeMint от OZ.

Однако этот вызов внешней функции создает лазейку в безопасности. В частности, злоумышленник может выполнить повторный вызов внутри обратного вызова (callback) onERC721Received. Например, в уязвимом контракте HypeBears злоумышленник может снова вызвать функцию mintNFT внутри обратного вызова onERC721Received (поскольку запись addressMinted еще не обновлена).

Атака

На снимке экрана ниже показана транзакция атаки.

Уроки

Риски, связанные с использованием SafeMint, обсуждались исследователями безопасности link1 link2. Тем не менее, мы до сих пор встречаем уязвимый код и атаки в реальности. Как было показано в случае с safeTransfer во время инцидента безопасности QBridge, использование «безопасной» (safe) функции не гарантирует «безопасность» (safe) контракта 😃.

Sign up for the latest updates
Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec
Security Insights

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec

В Ethereum за 05–11.10.2026 произошёл 1 инцидент; ущерб — около $542 тыс. Атакующий передал вредоносный адаптер функции MakerDaoBot без контроля доступа. Получив права на балансы MakerDAO, адаптер закрыл 4 аукциона ETH-A, конвертировал 200 ETH-A в WETH; атакующий вывел 200 ETH.

~418 млн $ потеряно: эксплойты Bitget и NEAR Intents | BlockSec Weekly
Security Insights

~418 млн $ потеряно: эксплойты Bitget и NEAR Intents | BlockSec Weekly

Этот отчёт за две недели фиксирует 8 инцидентов с 21 сентября по 4 октября 2026 г., убытки ≈$418,4М в Ethereum, BNB Chain, Solana, Bitcoin, TRON, XRP Ledger, Zcash, Avalanche, NEAR. Разбор: уязвимость продукта безопасности Bitget ($387,5М) и ошибка NEAR Intents ($3,87М).

Взлом Bitget на $387,5 млн вне блокчейна: не только ключи и контракты
Security Insights

Взлом Bitget на $387,5 млн вне блокчейна: не только ключи и контракты

24.09.2026 хакеры взломали сторонний продукт, похитили учётные данные и подделали выводы. Похищено ~$387,5 млн со счетов Bitget (Ethereum, EVM, XRP Ledger, Zcash, TRON); ключи целы. Обзор инцидента, конвертации активов, мер защиты и blockchain-пентеста.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit