Код - это не только ход, но и состояние
Не могу молчать.
Вышел аудиторский отчет по конкурсы Ajna, в котором я хотел поучаствовать, но ничего не нашел. А там 11 High и 14 Med проблем!
Я читаю отчет и такой постоянно: "Ну, блин! Я же мог такое найти! Ну, блин...". И такая досада берет.
А все потому, что я постоянно забываю, что код контракта - это не просто вектор выполнения проверок и функций в нем, а еще и состояние памяти на момент исполнения! Сейчас постараюсь объяснить, что я имею ввиду.
Мы привыкли искать уязвимости в коде по нескольким общим критериям:
1. Наличие необходимых проверок перед исполнением функций;
2. Валидация аргументов в функции;
3. Контроль доступа;
4. Наличие проблемных зон в подключенных контрактах и проектах;
5. Переменные и инварианты;
Ну, и так далее. Но иногда мы нужно еще фиксировать состояние действий пользователя на момент исполнения той или иной функции. Например, если пул будет на пороге ликвидации, что будет с наградами пользователям. Или при передвижении ликвидности из пула в пул, что будет не только с этой ликвидностью, но и с пользователями, которые работали с пулом: их наградами, бонусами, активами, LP токенами...
Порой кажется, что фиксация состояний кода в уме на момент его исполнения, отличает простого аудитора от более профессионального.
Возможно, пост будет сложен для осознания, но уверен, что аудиторы меня поймут.
Пошел дальше читать отчет и учиться на ошибках...
P.S. Отчет Ajna, для любопытствующих.
#audit
Post #820
799
- 👍 17
- 🔥 4
- ❤ 1