Атака бесконечного минтинга

Definition pending verification.

Атака бесконечного минтинга, часто называемая 'глитчем минтинга' (mint glitch) или 'уязвимостью повторного входа' (reentrancy vulnerability) в контексте смарт-контрактов, представляет собой тип эксплойта, при котором злоумышленник манипулирует логикой контракта для чеканки произвольно большого количества токенов или активов. Обычно это происходит в протоколах децентрализованных финансов (DeFi), особенно в тех, которые связаны с минтингом токенов, кредитованием или механизмами обеспечения. Основная уязвимость часто заключается в том, как контракт обрабатывает внешние вызовы или обновляет свое внутреннее состояние во время транзакции. Например, контракт может позволить пользователю внести залог, чеканить новый токен на основе этого залога, а затем вывести залог — и все это в рамках одной транзакции. Если контракт чеканит новый токен до проверки залога или правильного обновления своего внутреннего состояния, злоумышленник может вызвать функцию минтинга несколько раз в рамках одного и того же контекста транзакции. Каждый вызов может чеканить больше токенов на основе того же первоначального (или недостаточно проверенного) залога, что приводит к созданию 'бесконечного' или значительно раздутого количества токенов из воздуха. Это обесценивает токен и может истощить резервы протокола. Предотвращение таких атак требует тщательного проектирования смарт-контрактов, включая использование паттерна 'проверки-эффекты-взаимодействия' (checks-effects-interactions), защит от повторного входа (reentrancy guards), правильных обновлений состояния перед внешними вызовами и тщательного аудита.

        graph LR
  Center["Атака бесконечного минтинга"]:::main
  Pre_logic["logic"]:::pre --> Center
  click Pre_logic "/terms/logic"
  Rel_advanced_propulsion_systems["advanced-propulsion-systems"]:::related -.-> Center
  click Rel_advanced_propulsion_systems "/terms/advanced-propulsion-systems"
  Rel_consciousness_simulation_hardware["consciousness-simulation-hardware"]:::related -.-> Center
  click Rel_consciousness_simulation_hardware "/terms/consciousness-simulation-hardware"
  Rel_cognitive_enhancement["cognitive-enhancement"]:::related -.-> Center
  click Rel_cognitive_enhancement "/terms/cognitive-enhancement"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простыми словами

Представьте себе волшебную машину для печенья, которая должна давать вам одно печенье за каждую золотую монету, которую вы в нее кладете. Если машина сломана, вы можете положить одну монету, получить печенье, а затем использовать *это* печенье, чтобы обмануть машину и заставить ее поверить, что вы положили еще одну монету, получив бесконечное количество печенья!

🤓 Expert Deep Dive

Атаки бесконечного минтинга используют недостатки в логике перехода состояний смарт-контрактов, часто связанные с повторным входом (reentrancy) или неправильной обработкой внешних вызовов. Типичный шаблон включает функцию, которая: 1) Принимает ввод пользователя (например, залог). 2) Выполняет внешний вызов (например, к контракту токена ERC777, который запускает обратный вызов). 3) Обновляет внутреннее состояние (например, чеканит токены, обновляет балансы). Если внешний вызов запускает повторный вызов обратно в исходную функцию до того, как состояние будет обновлено (например, залог полностью учтен или баланс скорректирован), злоумышленник может этим воспользоваться. Например, в кредитном протоколе пользователь вносит залог C, вызывает mint(loan_amount), который внутренне вызывает внешний контракт токена. Функция обратного вызова (fallback function) этого контракта токена повторно входит в функцию mint, позволяя злоумышленнику снова чеканить токены, используя тот же залог C, до того, как первый вызов mint завершит обновление своего состояния. Паттерн 'Проверки-Эффекты-Взаимодействия' (Checks-Effects-Interactions) имеет решающее значение: проверьте условия (Checks), обновите внутреннее состояние (Effects), затем взаимодействуйте с внешними контрактами (Interactions). Защиты от повторного входа (mutexes) также могут предотвратить рекурсивные вызовы в рамках одного контекста транзакции. Уязвимости также могут возникать из-за возможностей повторного входа ERC777 или ошибочных реализаций ERC20.

🔗 Связанные термины

Предварительные знания:

📚 Источники