September 7, 2022

EIP-712: Скрытая угроза

Всем привет! С вами Тёма!

Сегодня мы разберемся с EIP-712

Что такое EIP-712

Данный EIP позволяет вам давать апрув токенов по подписи, то есть если вы уже привыкли, что все апрувы даются как отдельная транзакция, то не поверите, апрув можно организовать и при помощи простой подписи, что сэкономит вам некоторое количества газа

Пример такой подписи на UniSwap при переводе $UNI в $WETH

Данный EIP реализован у некоторых ERC20 токенов, среди них $USDC, $UNI и другие

В чем же опасность?

Все давно привыкли, что подпись не несет в себе никакой опасности, но потом я ТУТ продемонстрировал вам, как можно украсть все средства с вашего кошелька при помощи подписи. Но у того способа была одна особенность - большая красная предупредительная надпись от метамаска, которая предупреждала вас о рисках. В данном же случае, если злоумышленник подделает подпись для EIP-712, то метамаск вас никак не предупреждит и вы даже не узнаете, что вас заскамили!

Как это работает?

Для начала вам надо понять как работают сигнатуры, но я уже это объяснял + это легко гуглится, поэтому пропустим этот момент

Теперь, когда мы уже понимаем как примерно работают сигнатуры, нам надо составить эту самую сигнатуру. От токена к токену может отличаться тип EIP-712, так что в идеале к каждому токену надо искать свой подход в составлении сигнатуры

У меня получилась такая сигнатура для $DAI на rinkeby

Далее нам надо достать v, r и s из нашей сигнатуры и передать их и еще несколько параметров в функцию permit на контракте токена, к которому мы и хотим получить доступ

Как мы можем увидеть, в самом конце функции после прохождения всех проверок у нас идет вызов функции allowance, которая и отвечает за апрув

Все очень просто!

Для тех кто хочет более подробно разобраться с работой всего этого механизма - я подготовил концепт скам сайта, вот ссылка на него: https://github.com/ortomich/scam_with_sign_2

(настроено все на работу с $DAI на rinkeby)

Надеюсь статья была интересной и понятной!

Все мои ресурсы - https://t.me/ortomich_links