Аудит вне рамок - 8
Trust в начале февраля выпустил статью на своем сайте, в которой рассказал про один из найденных багов в протоколе Fluidity.
Самое интересное тут то, что по его словам сами контракты были не такие уж и большие, и, тем более, не такие уж и сложные, в плане длинных функций или сложной логики исполнения.
Тут мне понравилось то, что Trust показал, как смотреть на контракты под разными углами.
Обращаем внимание при аудите
Временные рамки и порядок исполнения транзакций часто может быть нарушен, даже когда разработчики постарались предусмотреть все варианты.
В данном примере есть два способа вывода наград: вручную и скопом. Trust рассматривал проведение транзакций в разных порядках:
Вариант 1:
batchReward()
manualReward()
Вариант 2:
manualReward()
batchReward()
Вариант 3:
manualReward()
manualReward()
В конечном итоге, он стал рассматривать их также с учетом временных рамок:
manualReward(A-D)
batchReward(E-H)
manualReward(E-H)
batchReward(A-D)
что и привело к нахождению уязвимости.
Аудитору нужно иметь в виду, что если где-то предусмотрен порядок (основанный на времени, метках или чем-то еще), то нужно рассмотреть все способы, что "сломать" его.
#audit #outofbox
Post #738
455
- ❤ 2