Reentrancy расшифрована — уязвимость смарт-контракта, которая до сих пор похищает миллионы в 2026 году, и шаблон Checks-Effects-Interactions, который её останавливает в коде
Reentrancy — не магия. Это ошибка порядка: ваш контракт обновляет своё состояние ПОСЛЕ того, как делает внешний вызов, а не до него, и злоумышленник повторно вызывает его в этот промежуток. Исправьте порядок — и уязвимость исчезнет.
DAO потерял около 3,6 млн ETH (примерно 60 млн долларов, около 5% всего ETH, существовавшего тогда) из-за этой точной ошибки 17 июня 2016 года. Последствия привели к расколу Ethereum на ETH и ETC.
Спустя десять лет она до сих пор похищает средства. Solv Protocol потерял $2,73 млн из-за reentrancy 5 марта 2026 года, а в мае 2026 года около $52 млн было похищено через различные ончейн-протоколы (DeFiLlama через CryptoTimes, 31 мая 2026 года).
Уязвимый шаблон: считать баланс, отправить ETH с помощью низкоуровневого вызова, ЗАТЕМ установить баланс в ноль. Функция receive() атакующего повторно вызывает withdraw(), прежде чем ноль будет установлен, и цикл продолжается, пока контракт не опустеет.
Два исправления, используемые вместе:
Checks-Effects-Interactions. Проверьте, обновите ВСЕ состояния, а затем выполните внешний вызов ПОСЛЕДНИМ. Переместите balances[msg.sender] = 0 выше вызова — повторный вызов прочитает ноль и откатится.
Неблокирующая защита OpenZeppelin. Мьютекс в хранилище (NOT_ENTERED → ENTERED), который откатывает при повторном входе. Используйте его вместе с CEI, а не по отдельности.
Две вещи, которые большинство разработчиков до сих пор делают неправильно.
1. .transfer() больше не является защитой: лимит в 2300 газа перестал быть безопасным предположением после того, как EIP-1884 повысил стоимость SLOAD в 2019 году. Используйте .call{value:}("") вместе с CEI.
2. Чтение без изменения (read-only) обходит стандартную защиту, потому что чтение view-функции во время обновления возвращает повреждённое состояние и может отравить оракул цен (dForce, $3,64 млн).
Только для образовательных целей. Не является финансовой консультацией.
Подписывайтесь на ежедневные инсайты — где блокчейн встречается с ИИ, один удовлетворяющий свайп за раз.
#Solidity #SmartContractSecurity #Web3Security #Ethereum #DeFi #SmartContracts #BlockchainDeveloper #SolidityDev #EVM #OpenZeppelin #Reentrancy #Web3Dev #BlockchainSecurity #DeFiSecurity #SmartContractAudit #CodeSecurity #OnChain #BlockchainEducation