Как необдуманная подпись в Metamask может лишить вас всех средств

19.08.2022
16 мин
4226
20
Как необдуманная подпись в Metamask может лишить вас всех средств. Заглавный коллаж статьи.

На просторах крипто-твиттера нашли для вас интересный и познавательный тред о том, как обычная подпись в Metamask может опустошить ваш кошелек от ваших кровных сбережений.

Полезно будет знать не только новичкам, но и опытным криптанам, потому что юзер входящий в топ-10 Degen Score видимо об этом не знал, но обо всем по порядку. Приятного прочтения!

Тред

Знаете ли вы, что обычная подпись в Metamask может опустошить ваш кошелек? Очень опытный пользователь, входящий в десятку лучших в рейтинге Degen Score, сегодня потерял около 500 000 USDC из-за эксплойта. И вы можете быть следующими. Сейчас расскажу вам как этого можно избежать.

Был обычный тихий полдень, как Джо (имя изменено) заметил, что из его кошелька пропало около $469 000. И это была не простая транзакция, так что у злоумышленника вероятнее всего не было доступа к Metamask’у Джо.

Это был вредоносный контракт похитивший все USDC с кошелька.

Скриншот: etherscan

Сейчас нам нужно взглянуть на некоторые технические детали.

Токен USDC — это контракт на Ethereum. У него много функций, которые определяют, как с ним можно взаимодействовать и что можно сделать.

Давайте сосредоточимся на двух функциях:
– transfer
– transferFrom

Скриншот: etherscan

transfer: Когда вы перемещаете USDC (или другие ERC20) между кошельками, вы используете функцию перевода. Она отправляет токены от “вызывающей” стороны (адрес, который вызывает функцию) на другой адрес.

Чтобы злонамеренно использовать перевод от вашего имени, кто-то должен получить контроль над вашим кошельком.

Скриншот: etherscan

transferFrom: Когда вы взаимодействуете с контрактами, они используют TransferFrom для перемещения токенов.

Если вы позволите контракту тратить бесконечное количество USDC, он может похитить все, хранящиеся на вашем кошельке.

Вернемся к истории Джо. Взаимодействие с контрактом, которое позволило похитить USDC Джо, действительно было функцией TransferFrom.

Но как мы разобрали выше, TransferFrom будет использоваться только в том случае, если Джо подпишет контракт на управление своими USDC. И Джо был на 100% уверен, что ничего не подписывал.

Скриншот: etherscan

Но погодите. История DeBank (сервис для он-чейн аналитики), показывает, что вредоносный контракт был подписан за 10 минут до эксплойта. На самом ли деле его подписал Джо?

Да. И нет. Не напрямую.

Скриншот: etherscan

Etherscan показывает, что функция “infinite approval” (безграничного одобрения), была вызвана не самим Джо.

Это была функция permit (разрешения), которая была вызвана другим адресом, предоставив вредоносному контракту разрешение на использование всех USDC Джо.

Что? Как другие лица могут подписывать контракты от вашего имени?

Скриншот: etherscan

Функция разрешения была создана для улучшения “user experience” (пользовательский опыт) на Ethereum. Она позволяет изменять одобренные суммы, не отправляя транзакцию. Достаточно подписи.

С вашей подписью любой может вызвать permit-функцию и обновлять размер вашей “одобренной суммы для отправки”.

Скриншот: etherscan

Вы можете увидеть это разрешение в действии, когда используете 1inch.

Если вы хотите продать USDC, вам не нужно сначала одобрять что-либо. Все, что вам нужно, это подписать сообщение. Подпись даст 1inch право тратить все ваши USDC. 1inch конечно не сделает этого, а вот вредоносный контракт может.

Скриншот: Metamask

Джо вероятно подписал такое сообщение на вредоносном веб-сайте. К сожалению, на этот раз он использовал горячий кошелек, и для подписи было достаточно всего одного клика.

С подписью Джо, злоумышленник отправил транзакцию с permit-функцией. Это дало вредоносному контракту управлять всеми USDC на кошельке. Потом была вызвана функция transferFrom, и вредоносный контракт похитил все средства.

Скриншот: etherscan

Некоторые подписи могут привести к катастрофическим последствиям. В некоторых случаях Metamask предупредит вас, что подписание сообщения может быть опасным. Но не в подобных.

Как избежать таких ситуаций?

  • Не подписывайте в Metamask все подряд;
  • Потратьте время на изучение того, что вы подписываете;
  • Будьте осторожны с traditional approvals.

Будет интересно

Как вам статья?

20
0

статьи на эту же тему

Фарминг, рестейкинг и торговля с...
avatar Dmitriy Yurchenko
08.04.2024
Что такое Puffer Finance: обзор проекта...
avatar Nikita Tipikin-Holovko
05.04.2024
Распределение аирдропов на базе...
avatar Denis Solomyanyuk
29.03.2024