Back to Blog

Уязвимость публичного перевода в смарт-контракте Tether Gold

Code Auditing
May 27, 2023
2 min read

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:

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit