OWASP Smart Contract Top 10 | OWASP Foundation
Welcome to the OWASP Top Ten for Smart Contracts

Telegram
Noobing Security Research
Уязвимость: Access Control Vulnerabilities Топ 1 уязвимость на 2025 год, согласно списку от OWASP. На первый взгляд кажется, что это очень простая уязвимость, которую можно избежать средствами уровня "не ставь пароль 12345", но на самом деле бывают намного более сложные случаи. ⢑⣁⡰⣀⢐ ⡘ ⢊⠨⢤ ⡘⡂⢨⢄ ⣠⠋⠜⢤⢰⢢⠘⣐⠋ ⠃⠩⢘⢂⡔⢊⠔⣐⠱⠕⢨ ⢂⡂⡘⣂⠥⢠⣀⠤ ⠬⡐⢤⣐⠊⠇⠋⠜ ⡢⠣⠚⠱⣂⠕⠓⡄⠲⡁⢆⠬⡤ ⡑⢤⠣⢒⡃⢢⢐⢤⡘⢰ ⢢ ⢨⢑⢘⠚⡌⡄⢡⢌⠢⢆⠇⠴⡑⡤ ⢃⡁⠓⠱⡡⠔⠰⠌⠴⠦⡑⢨ ⢆⠅⡅⡁⢤⠩⠦ ⡐⠕⡅⠚⢄⠖⠉⠱⡰⡆ ⡁⠥⠋⠍⢔⠍⠲⠙⠃⡆ ⠜⠩⡤⠍⡰⡨⣂⠕⡊⢰⢡⢔ ⢠⠥⢃⠌⢡⢄⡆⠒⢡⢆⠆⡡ ⡉⠋⠱⠤⢅⠲⡐⡡⠪⣂⠊ В чем заключается Строгое определение такое: уязвимость нарушения доступа - это уязвимость, позволяющая неавторизованным пользователям получить доступ и/или изменять данные и/или функции контракта Где искать Возникают чаще всего там, где недостаточно permission checks, например отсутствует модификатор onlyOwner, или функция вывода средств не проверяет что адрес, инициировавший вывод соответствует адресу, с чьего баланса списываются средства. Так же стоит следить за тем, чтобы роли в вашем протоколе не имели бы слишком много полномочий Пример В этой короткой статье рассказывается о то, что у функции burn протокола HospoWise не было модификатора onlyOwner, что привело к тому, что сжигать их токены мог любой желающий Как быть Хорошая новость в том, что такие очевидные нарушения прекрасно детектируются статическими инструментами анализа, так что надо: - использовать статические анализаторы типа slither и aderyn - использовать onlyOwner от OpenZeppelin - тесты тесты тесты Важность тестирования в написании контрактов невозможно переоценить

Telegram
Noobing Security Research
Уязвимость: Price Oracle Manipulation Это критическая уязвимость может быть обнаружена/использована в контрактах, которые зависят от внешних источников данных о цене актива. Схема действия достаточно проста: пользователь собирается купить ETH через ваш контракт за USDC/USDT, контракт принимает сумму, на которую следует совершить обмен, а для расчета покупки используется функция, возвращающая текущую стоимость актива при его покупке например на Uniswap Перед тем, как транзакция выполняется, происходит покупка большого количества одного токена из пары (часто с использованием flash loan буквально на миллиарды долларов), что искажает пропорцию активов в пуле —> искажает цену —> покупка проходит по невыгодной цене —> внесенная ранее ликвидность выносится из пула Либо наоборот, атакующий покупает актив по очень выгодной цене, в зависимости от стратегии атаки Пример Схему на изображении надо читать следующим образом: красные стрелки это путь средств "вглубь" атакуемого контракта, зеленые - это вынос. Все действия происходят в рамках одной транзакции. Схема упрощенная, но суть от этого не меняется Атакуемый контракт называется NFT Protocol, он позволяет купить NFT за 10 долларов 1. Атакующий (Flash Loan Receiver), получает займ 2. Первоначальная цена NFT при составляет 10 USDC или 1 ETH 4. Атакующий свапает на TSwap USDC на WETH (то есть выкупает ETH, эфира остается мало в пуле), меняя таким образом первоначальную пропорцию с 100 к 10 на 1000 к 1 5. 1 ETH теперь стоит 1000 USDC 6. Так как атакующий контракт берет информацию о цене эфира с TSWAP, то продажа NFT с контракта атакующему происходит за 0.01 ETH вместо 1 ETH 7. Атакующий продает NFT в другом месте за полную стоимость 8. Атакующий свапает ETH на USDC обратно, возвращая TSWAP пул в нормальное состояние 9. Атакующий возвращает Flash Loan + комиссии за использование средств 10. Профит атакующего равен цена NFT - комиссии за флешлоан Как защититься - Собирать данные по цене из нескольких источников - Установить пороговые значения для цен - Поставить таймлок на обновление цены, чтобы не допустить мгновенных колебаний - Запрашивать подписи от поставщиков цен Схему взял отсюда