5 апреля наш внутренний инструмент анализа обнаружил ошибку в контракте Tether Gold, которая позволяет злоумышленнику перевести токены XAUt (Tether Gold) любого пользователя на заранее определенный адрес. Команда получила наш отчет и сообщила, что обнаружила эту проблему самостоятельно. Сегодня мы узнали, что уязвимость была исправлена, и хотим поделиться подробностями. Кроме того, мы покажем, как использовать Phalcon Fork для разработки и отладки PoC (доказательства концепции) этой уязвимости.
0x0. Уязвимость

В функции transferFrom контракта любой желающий может вызвать эту функцию для перевода токенов других пользователей на доверенный адрес, указанный владельцем токена. Хотя эту уязвимость нельзя напрямую использовать для перевода токенов на счет злоумышленника, он все равно может передать токены из пула, чтобы манипулировать ценой токена (например, в пуле WETH-XAUt) и получить прибыль.
Исправление этой уязвимости довольно простое, как показано ниже.

0x1. Как использовать уязвимость
Для написания и отладки PoC мы можем использовать Phalcon Fork. Сначала мы создаем форк до того, как уязвимость будет исправлена. При создании форка через Fork API я использовал блок под номером 17038763.

Шаг I: подготовка достаточного количества Ether
Первый шаг — получить достаточное количество Ether для оплаты газа (gas fee) атакующему. Если на счете нет Ether, будет выполнена транзакция по переводу Ether с адреса vitalik.eth.
Шаг II: передача прав владения контрактом Tether Gold
Владельцем контракта Tether Gold является мультиподписной кошелек (0xC6CDE7C39eB2f0F0095F41570af89eFC2C1Ea828). Чтобы передать права владения атакующему, нам нужно отправить транзакцию с мультиподписью, а затем подтвердить её.

Шаг III: Добавление привилегированного аккаунта в контракт Tether Gold
Мы добавили новый аккаунт 0x189e7947a9d9210eec3a41dcf5f536bb1d7726f5 в качестве привилегированного. Затем мы вызываем функцию transferFrom, чтобы перевести токен XAUt от жертвы на этот привилегированный аккаунт.

0x2. PoC
Вы можете найти PoC на GitHub:



