Back to Blog

#10: ThirdWeb-Vorfall: Inkompatibilität vertrauenswürdiger Module offenbart Schwachstelle

Code Auditing
February 22, 2024
7 min read

Am 5. Dezember 2023 gab die prominente Web3-Entwicklungsplattform Thirdweb signifikante Sicherheitslücken in ihren vorkompilierten Smart Contracts bekannt. Dieser kritische Fehler betraf alle ERC-20-, ERC-721- und ERC-1155-Token, die über diese spezifischen anfälligen Verträge bereitgestellt wurden. In den Tagen nach der Bekanntgabe wurden Token, die mit diesen anfälligen Verträgen bereitgestellt wurden, nach und nach in einer Reihe von Angriffen ausgenutzt, was die Schwere der zugrunde liegenden Inkompatibilität unterstreicht.

Verständnis der ThirdWeb Smart Contract Schwachstelle

Die Ursache des ThirdWeb-Vorfalls liegt in der unerwarteten Interaktion zwischen zwei grundlegenden Komponenten der Smart Contract-Entwicklung: ERC-2771 und der Multicall-Implementierung von OpenZeppelin. Um die Schwachstelle vollständig zu verstehen, ist es unerlässlich, jede Komponente einzeln zu betrachten und dann zu analysieren, wie ihre Interaktion einen ausnutzbaren Pfad geschaffen hat.

ERC-2771: Meta-Transaktionen und vertrauenswürdige Forwarder

EIP-2771 definiert ein Protokoll auf Contract-Ebene, das es Recipient-Verträgen ermöglicht, Meta-Transaktionen über vertrauenswürdige Forwarder-Verträge zu akzeptieren. Dieser Standard ist entscheidend für die Verbesserung der Benutzererfahrung, indem er es Dritten (Forwardern) ermöglicht, Gasgebühren im Namen von Benutzern zu zahlen und so die Notwendigkeit für Benutzer, native Blockchain-Token zu halten, zu abstrahieren.

In der Praxis ist OpenZeppelins ERC2771Context eine weit verbreitete Implementierung. Ihre Kernfunktionalität besteht darin, die letzten 20 Bytes des Calldata von einem vertrauenswürdigen Forwarder als effektiven _msgSender() zu behandeln. Für Entwickler, die diese Bibliothek verwenden, ist es üblich, alle direkten Verwendungen von msg.sender durch _msgSender() zu ersetzen, um die Kompatibilität mit Meta-Transaktionen zu gewährleisten. Ebenso wird _msgData() verwendet, um die ursprünglichen Transaktionsdaten abzurufen, ohne die angehängten Senderinformationen.

function _msgSender() internal view virtual override returns (address) {
    uint256 calldataLength = msg.data.length;
    uint256 contextSuffixLength = _contextSuffixLength();
    if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
        return address(bytes20(msg.data[calldataLength - contextSuffixLength:]));
    } else {
        return super._msgSender();
    }
}

function _msgData() internal view virtual override returns (bytes calldata) {
    uint256 calldataLength = msg.data.length;
    uint256 contextSuffixLength = _contextSuffixLength();
    if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
        return msg.data[:calldataLength - contextSuffixLength];
    } else {
        return super._msgData();
    }
}

Multicall: Bündeln von Transaktionen zur Effizienz

Die Multicall-Funktionalität ermöglicht es Benutzern, mehrere Funktionsaufrufe zu einer einzigen Transaktion zu bündeln, was die Gaskosten erheblich reduziert und die Transaktionseffizienz verbessert. OpenZeppelins MulticallUpgradeable ist eine beliebte Implementierung für diesen Zweck. Sie nimmt ein Array von Calldata-Bytes entgegen und führt für jeden Eintrag einen delegatecall aus, der diese im Kontext des aufrufenden Vertrags ausführt.

function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {
    results = new bytes[](data.length);
    for (uint256 i = 0; i < data.length; i++) {
        results[i] = _functionDelegateCall(address(this), data[i]);
    }
    return results;
}

(Hinweis: Der hier diskutierte Fehler wurde in späteren Versionen von OpenZeppelins Multicall inzwischen behoben.)

Die Inkompatibilität: ERC-2771 und Multicall Konflikt

Der Kern der Smart Contract-Schwachstelle im ThirdWeb-Vorfall ergab sich aus einer kritischen Inkonsistenz in der Art und Weise, wie Calldata von ERC-2771 und Multicall verarbeitet wird. ERC-2771 erwartet, dass der vertrauenswürdige Forwarder die Nachrichtendaten und Senderinformationen zusammenpackt. Der Empfängervertrag verwendet dann _msgData() und _msgSender(), um diese Informationen korrekt zu entpacken.

Die Multicall-Funktion war jedoch in ihrer anfälligen Implementierung nicht darauf ausgelegt, mit der Art und Weise kompatibel zu sein, wie ERC-2771 Daten für Meta-Transaktionen packt. Insbesondere, wenn Multicall eine Charge von Aufrufen verarbeitet, hätte sie _msgSender() korrekt aus der anfänglichen Meta-Transaktion extrahieren und dann diese Senderinformationen an das Calldata jedes einzelnen Aufrufs anhängen müssen, bevor sie ausgeführt wurden. Dieser entscheidende Schritt fehlte.

Ohne dass die Senderinformationen korrekt an das Calldata innerhalb jedes von Multicall verarbeiteten Unteraufrufs angehängt wurden, versuchte der ERC-2771-Kontext innerhalb des Zielvertrags, Senderinformationen aus den letzten 20 Bytes von _msgData() des Unteraufrufs zu entpacken. Entscheidend ist, dass ein Angreifer diese letzten 20 Bytes kontrollieren konnte. Dies ermöglichte es einem böswilligen Akteur, spezifisches Calldata zu erstellen, das, wenn es von Multicall verarbeitet und dann von einem ERC-2771-aktivierten Vertrag interpretiert wurde, beliebige Logik mit einem manipulierten _msgSender()-Wert (z.B. eine vom Angreifer kontrollierte Adresse oder sogar die Pooladresse eines Protokolls) ausführen würde. Dies umging effektiv die beabsichtigten Sicherheitsprüfungen und verletzte die Erwartungen, die von beiden Spezifikationen aufgestellt wurden, was zu unbefugten Aktionen führte.

ThirdWeb Vorfall: Angriffsanalyse und Ausnutzung

Betrachten wir ein reales Beispiel der Smart Contract-Schwachstelle im ThirdWeb-Vorfall, anhand einer Angriffstransaktion, die von der Phalcon-Plattform von BlockSec analysiert wurde.

Die Strategie des Angreifers beinhaltete die Manipulation von _msgSender(), um sich als Uniswap-Pool auszugeben und dadurch dessen Token-Guthaben abzuziehen.

  • Schritt 1: Anfängliche Token-Beschaffung. Der Angreifer tauschte zunächst 5 WETH gegen 3.455.399.346 TIME-Token an einer dezentralen Börse. Dies lieferte die notwendigen Token für die nachfolgende Manipulation.

  • Schritt 2: Bösartige Multicall-Ausführung. Dies ist der Kern des Exploits. Der Angreifer rief einen vertrauenswürdigen Forwarder mit sorgfältig erstelltem Calldata auf, das darauf ausgelegt war, die Inkompatibilität von ERC-2771/Multicall auszunutzen. Als dieses Calldata von der Multicall-Funktion analysiert wurde, führte dies zum Aufruf der burn-Funktion des TIME-Token-Vertrags. Entscheidend war, dass aufgrund der Schwachstelle _msgSender() fälschlicherweise als Uniswap Pool-Adresse interpretiert wurde. Dies ermöglichte es dem Angreifer, einen erheblichen Teil der von Uniswap gehaltenen TIME-Token zu verbrennen, ohne tatsächliche Berechtigung. Die BlockSec Phalcon-Plattform bietet detaillierte Transaktionsverfolgung zur Visualisierung dieses Ablaufs.

    Transaktionsverfolgung, die den bösartigen Multicall zeigt
    Transaktionsverfolgung, die den bösartigen Multicall zeigt

    Das obige Bild illustriert, wie der Forwarder.execute-Aufruf des Angreifers verarbeitet wird. Die multicall-Funktion empfängt ein Byte-Array, das dann zum Aufruf der burn-Funktion mit dem manipulierten _msgSender() führt.

    Detaillierte Ansicht der Multicall-Analyse und des burn-Funktionsaufrufs
    Detaillierte Ansicht der Multicall-Analyse und des burn-Funktionsaufrufs

    Diese detaillierte Ansicht von Phalcon zeigt die bytes[] der Länge 1, die als Daten zum Aufrufen des Vertrags verwendet werden, was zur Ausführung der burn-Funktion unter der gefälschten _msgSender() führt.

  • Schritt 3: Preismanipulation. Durch die Verbrennung einer großen Menge TIME-Token aus dem Uniswap-Pool reduzierte der Angreifer drastisch die Liquidität des Pools für TIME. Diese künstliche Verknappung führte zu einem skyrocketartigen Anstieg des TIME-Preises im Verhältnis zu WETH innerhalb des Pools.

  • Schritt 4: Profitabler Arbitrage. Mit dem künstlich aufgeblähten TIME-Preis tauschte der Angreifer dann seine verbleibenden 3.455.399.346 TIME-Token zurück gegen 94 WETH und realisierte so einen erheblichen Gewinn aus dem manipulierten Preis.

Diese Abfolge von Ereignissen demonstriert einen raffinierten Angriff, der eine subtile Smart Contract-Schwachstelle ausnutzt, die aus der Modulin-Inkompatibilität resultiert.

Sichern Sie Ihre Smart Contracts mit BlockSec

Lassen Sie nicht zu, dass versteckte Inkompatibilitäten Ihr Projekt Risiken aussetzen. Unsere erfahrenen Prüfer führen umfassende Smart Contract Audits durch, um Schwachstellen zu identifizieren und zu beheben, bevor sie ausgenutzt werden können.

Bester Sicherheitsauditor für Web3

Validieren Sie Design, Code und Geschäftslogik vor dem Start

Wichtige Erkenntnisse und Lehren aus dem ThirdWeb-Vorfall

Der ThirdWeb-Vorfall ist eine kritische Erinnerung an die Komplexität der Web3-Sicherheit, insbesondere im Hinblick auf die Interaktion von Drittanbieter-Bibliotheken.

  • Interoperabilitätsrisiken: Im sich schnell entwickelnden DeFi-Bereich verlassen sich Projekte stark auf einen Stapel von Drittanbieter-Bibliotheken und Modulen. Während diese Komponenten die Entwicklung beschleunigen, können ihre Interaktionen unerwartete und verdeckte Schwachstellen einführen. Der ThirdWeb-Vorfall zeigt deutlich, dass selbst weit verbreitete, scheinbar robuste Komponenten wie OpenZeppelins ERC2771Context und MulticallUpgradeable kritische Sicherheitslücken schaffen können, wenn ihre Integration nicht sorgfältig gehandhabt wird.
  • Tiefgreifende technische Überprüfung ist unerlässlich: Diese Art von Smart Contract-Schwachstelle wird nicht leicht durch oberflächliche Prüfungen aufgedeckt. Sie erfordert tiefes technisches Fachwissen, um zu analysieren, wie verschiedene Module Daten verarbeiten und interpretieren, insbesondere Calldata, und um potenzielle Inkonsistenzen zu identifizieren. Eine gründliche Smart Contract-Überprüfung, die sich auf Modulübergreifende Interaktionen und Grenzfälle konzentriert, ist von größter Bedeutung.
  • Kontinuierliche Überwachung und Reaktion auf Vorfälle: Selbst mit robusten Audits können neue Angriffsmuster entstehen. Eine kontinuierliche Blockchain-Sicherheitsüberwachung, wie sie von BlockSecs Phalcon angeboten wird, ist entscheidend, um verdächtige Aktivitäten in Echtzeit zu erkennen und eine schnelle Reaktion auf Vorfälle zu ermöglichen, um Schäden zu minimieren.
  • Jenseits der individuellen Modulsicherheit: Entwickler müssen über die Sicherheit einzelner Komponenten hinausdenken und die ganzheitliche Sicherheitsposition ihres gesamten Smart Contract-Systems betrachten. Wie Daten zwischen verschiedenen Modulen fließen, wie Kontexte erhalten oder verändert werden und wie externe Aufrufe behandelt werden, sind alles kritische Überlegungen.

Der ThirdWeb-Vorfall unterstreicht die Bedeutung eines proaktiven und umfassenden Ansatzes zur Blockchain-Sicherheit. Sich allein auf den Ruf einzelner Bibliotheken zu verlassen, ist nicht ausreichend; die Interaktionen zwischen ihnen müssen rigoros überprüft werden.

Sign up for the latest updates
~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly
Security Insights

~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly

This BlockSec weekly security report covers 3 notable attack incidents identified between May 11 and May 17, 2026, across TRON, TON, and Ethereum, with total estimated losses of approximately $4.72M. Three incidents are analyzed in detail: the highlighted $1.88M Transit Finance exploit on TRON, where a deprecated swap bridge contract with lingering token approvals was exploited through arbitrary calldata forwarding; the $2.8M TAC TON-to-EVM bridge exploit caused by missing canonical wallet verification in the jetton deposit flow; and the $46.75K Boost Hook exploit on Ethereum, where spot price manipulation on a Uniswap V4 hook-based perpetual protocol forced the protocol to buy tokens at inflated prices using its own reserves.

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly
Security Insights

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly

This BlockSec bi-weekly security report covers 11 notable attack incidents identified between April 27 and May 10, 2026, across Sui, Ethereum, BNB Chain, Base, Blast, and Berachain, with total estimated losses of approximately $15.9M. Three incidents are analyzed in detail: the highlighted $1.14M Aftermath Finance exploit on Sui, where a signed/unsigned semantic mismatch in the builder-fee validation allowed an attacker to inject a negative fee that was converted into positive collateral during settlement; the $5.87M Trusted Volumes RFQ authorization mismatch on Ethereum; and the $5.7M Wasabi Protocol infrastructure-to-contract-control compromise across multiple EVM chains.

Newsletter - April 2026
Security Insights

Newsletter - April 2026

In April 2026, the DeFi ecosystem experienced three major security incidents. KelpDAO lost ~$290M due to an insecure 1-of-1 DVN bridge configuration exploited via RPC infrastructure compromise, Drift Protocol suffered ~$285M from a multisig governance takeover leveraging Solana's durable nonce mechanism, and Rhea Finance incurred ~$18.4M following a business logic flaw in its margin-trading module that allowed circular swap path manipulatio

Best Security Auditor for Web3

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

BlockSec Audit