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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии
avatar
Читайте также: