弊社の内部分析ツールは4月5日にTether Goldコントラクトにバグを発見しました。このバグにより、攻撃者は誰でもXAUt(Tether Gold)トークンを事前に定義されたアドレスに転送することが可能でした。チームは弊社のレポートを受け取り、内部でこの問題を特定したと述べています。本日、問題が修正されたことを確認しましたので、詳細を共有したいと思います。また、Phalcon Forkを使用してこの脆弱性のPoCを開発およびデバッグする方法についても説明します。
0x0. 脆弱性

コントラクトのtransferFrom関数において、誰でもこの関数を呼び出して、他のユーザーのトークンをトークンオーナーによって定義された信頼できる受信先に転送することができました。この脆弱性は直接攻撃者のアカウントにトークンを転送するために悪用することはできませんでしたが、攻撃者はプールのトークンを転送して、プールのトークン価格(例:WETH-XAUtプール)を操作して利益を得ることができました。
この脆弱性への修正は、以下に示すように非常に簡単です。

0x1. 脆弱性の悪用方法
PoCを作成しデバッグするために、この目的にPhalcon Forkを使用できます。まず、脆弱性が修正される前にフォークを作成します。フォークAPIを使用してフォークを作成する際に、ブロック高17038763を使用しました。

ステップI:十分なEtherを用意する
最初のステップは、エクスプロイターのガス料金のために十分なEtherを入手することです。アカウントにEtherがない場合、vitalik.ethからEtherを送信するトランザクションが発行されます。
ステップII:Tether Goldコントラクトのオーナーシップを移管する
Tether Goldコントラクトのオーナーはマルチシグウォレット(0xC6CDE7C39eB2f0F0095F41570af89eFC2C1Ea828)です。オーナーシップをエクスプロイターに移管するには、マルチシグトランザクションを送信し、その後トランザクションを確認する必要があります。

ステップIII:Tether Goldコントラクトに特権アカウントを追加する
新しいアカウント0x189e7947a9d9210eec3a41dcf5f536bb1d7726f5を特権アカウントとして追加しました。その後、transferFrom関数を呼び出し、被害者から特権アカウントへXAUtトークンを転送します。

0x2. PoC
PoCは以下のGitHubで確認できます。



