Unsere interne Analyse-Tool hat am 5. April einen Fehler im Tether Gold Vertrag gefunden, der es einem Angreifer ermöglicht, XAUt (Tether Gold) Token von beliebigen Personen an eine vordefinierte Adresse zu übertragen. Das Team erhielt unseren Bericht und gab an, das Problem intern lokalisiert zu haben. Heute haben wir festgestellt, dass das Problem behoben wurde und möchten die Details hier mitteilen. Außerdem werden wir zeigen, wie man Phalcon Fork verwendet, um den PoC dieser Schwachstelle zu entwickeln und zu debuggen.
0x0. Die Schwachstelle

In der transferFrom-Funktion des Vertrags kann jeder diese Funktion aufrufen, um Token anderer Benutzer in eine vertrauenswürdige Empfangsadresse zu übertragen, die vom Token-Inhaber definiert wird. Obwohl diese Schwachstelle nicht direkt ausgenutzt werden kann, um Token auf das Konto des Angreifers zu übertragen, kann der Angreifer dennoch Token aus dem Pool übertragen, um den Tokenpreis im Pool (z.B. WETH-XAUt-Pool) zu manipulieren und davon zu profitieren.
Die Behebung dieser Schwachstelle ist einfach, wie im Folgenden gezeigt wird.

0x1. Wie die Schwachstelle ausgenutzt wird
Um den PoC zu schreiben und zu debuggen, können wir Phalcon Fork zu diesem Zweck verwenden. Zuerst können wir einen Fork erstellen, bevor die Schwachstelle gepatcht wird. Ich habe die Blockhöhe 17038763 verwendet, als ich den Fork über die Fork API erstellt habe.

Schritt I: Genügend Ether vorbereiten
Der erste Schritt ist, genügend Ether für die Gasgebühren des Ausnutzers zu besorgen. Wenn kein Ether im Konto vorhanden ist, wird die Transaktion, die Ether von vitalik.eth sendet, ausgegeben.
Schritt II: Die Eigentümerschaft des Tether Gold Vertrags übertragen
Der Eigentümer des Tether Gold Vertrags ist eine Multisig-Wallet (0xC6CDE7C39eB2f0F0095F41570af89eFC2C1Ea828). Um die Eigentümerschaft auf den Ausnutzer zu übertragen, müssen wir eine Multisig-Transaktion einreichen und dann die Transaktion bestätigen.

Schritt III: Ein berechtigtes Konto zum Tether Gold Vertrag hinzufügen
Wir haben ein neues Konto 0x189e7947a9d9210eec3a41dcf5f536bb1d7726f5 als berechtigtes Konto hinzugefügt. Anschließend rufen wir die transferFrom-Funktion auf, um XAUt-Token von einem Opfer an das berechtigte Konto zu übertragen.

0x2. PoC
Bitte finden Sie den PoC auf diesem GitHub:



