Back to Blog

Die CashioApp-Sicherheitsvorfall erneut betrachtet

Code Auditing
May 16, 2022
4 min read

Gestartet am 23. März 2022 um 16:20:08 UTC+8 wurde CashioApp ausgenutzt, um das Collateral-Token-Konto mit einem Verlust von etwa 52 Millionen zu leeren. Der Hack wurde durch eine unzureichende Überprüfung der Eingabekonten ermöglicht, die es dem Angreifer erlaubte, 20 Milliarden $CASH-Token ohne jegliche Einzahlung zu prägen. Im Folgenden zeigen wir die technischen Details.

Zusammenfassung

Der Vorfall wurde durch einen Fehler im Brrr-Programm verursacht, das für die Prägung und Verbrennung von $CASH-Token mit dem Collateral von Saber LP Arrows zuständig ist. Insbesondere können Benutzer $CASH prägen, indem sie Arrow LP-Token hinterlegen. Beachten Sie, dass Arrow LP-Token die Saber LP-Token als zugrunde liegende Token erhalten. Die print_cash-Anweisung, die $CASH prägen kann, empfängt eine Liste von Konten, darunter das Bank-Konto und das Collateral-Konto. Diese werden verwendet, um das Collateral (d.h. Arrow LP-Token) aufzuzeichnen und zu verfolgen, das für die Prägung von $CASH verwendet werden darf. Dieses beiden Konten sollten laut Design nur vom Administrator initialisiert und autorisiert werden. Das Programm versäumt es jedoch, die Gültigkeit des Bank-Kontos zu überprüfen. Infolgedessen konnte der Angreifer eine Reihe gefälschter Konten (einschließlich des Bank-Kontos) erstellen, um sie in die print_cash-Anweisung einzuspeisen und $CASH fast kostenlos zu prägen (die einzigen Kosten sind Transaktionsgebühren).

Details

Beginnen wir die Analyse mit den unten gezeigten verwendeten Konten der print_cash-Anweisung.

Das Attribut common (Zeile 75) ist eine Struktur vom Typ BrrrCommon im Programm. In BrrrCommon werden das bank-Konto und das collateral-Konto vom Administrator initialisiert und autorisiert. crate_token ist das Konto des $CASH-Tokens, das Informationen über $CASH speichert, wie die öffentliche Schlüsseladresse des crate_mint (Zeile 107), die öffentlichen Schlüsseladressen der Administratorrollen und mehr. crate_collateral_tokens ist ein Tresorkonto, das die von Benutzern übertragenen Collateral-Token hält. Da das Collateral Arrow LP-Token sein sollten, die LP-Token von Saber erhalten, müssen Benutzer die entsprechenden Konten von saber_swap eingeben. Die letzten beiden Attribute der Struktur BrrrCommon sind die Programm-IDs der in der Anweisung verwendeten Zielprogramme. Beachten Sie, dass die letzten vier Attribute der Struktur PrintCash das Systemkonto des Benutzers (auch der Unterzeichner der Transaktion), das Collateral-Konto des Benutzers, das $CASH-Token-Konto des Benutzers, das die geprägten $CASH-Token empfängt, und die öffentliche Schlüsseladresse des Kontos sind, das die Autorität zum Prägen von $CASH hat.

Die Angriffstransaktion

Nachdem wir die Funktionalität der oben genannten Konten verstanden haben, beginnen wir mit der Analyse der Angriffstransaktion: 0x4fgL…z2K5. Dieser Angriff wurde von der Angreiferadresse (0x6D7f) aus initiiert, und die Liste der Eingabekonten in der PrintCash-Anweisung ist unten gezeigt.

Das Konto #1 (0x5aha) oben entspricht dem Bank-Konto. Wir stellen fest, dass es sich von der auf der offiziellen Website von CashioApp (0xEm1P) angegebenen Adresse unterscheidet, was bedeutet, dass die Validierung des Bank-Kontos unzureichend ist!

Validierung

Werfen wir einen genaueren Blick auf die Validierung der Struktur BrrrCommon im Code, um herauszufinden, wie die Umgehung funktioniert.

Die einzige Überprüfung des Eingabe-Bank-Kontos besteht darin, sicherzustellen, dass das eingegebene Collateral-Konto mit dem Bank-Konto verknüpft ist (Zeile 12). Dies kann jedoch leicht durch die Angabe eines gefälschten Collateral-Kontos umgangen werden. Darüber hinaus hat der Angreifer, um die Zahlung von echten Collateral-Assets zu vermeiden, auch gefälschte saber_swap-Konten angegeben. Beachten Sie, dass der Angreifer unbezahlbare Collateral-Assets hinterlegen möchte, um wertvolle $CASH-Token zu prägen. Daher sollten das vom Angreifer bereitgestellte crate_token und crate_mint echte Adressen sein. Mit anderen Worten, die unzureichende Überprüfung des Bank-Kontos ermöglicht es dem Angreifer, eine Reihe gefälschter Konten zu erstellen, um $CASH mit unbezahlbarem Collateral zu prägen.

Die Korrektur

Die Korrektur besteht darin, die Anweisung assert_keys_eq!(self.bank.crate_mint, self.crate_mint) hinzuzufügen. Diese Anweisung stellt sicher, dass der crate_mint des Bank-Kontos der korrekte crate_mint für $CASH ist. Aber wie stellt sie sicher, dass das Bank-Konto gültig ist? Sehen wir uns die Struktur NewBank (im Programm bankman) und die Struktur NewCrate (im Programm crate_token) an, um die Antwort zu finden.

Tatsächlich ist das Bank-Konto ein PDA, dessen Seeds die Adresse des crate_token enthalten. Währenddessen ist das crate_token ebenfalls ein PDA, dessen Seeds die Adresse des crate_mint enthalten. Dies stellt sicher, dass das Bank-Konto gültig ist, wenn das eingegebene crate_mint gültig ist. Ohne ein korrektes crate_mint können Angreifer $CASH nicht prägen und keine Angriffe starten.

Über BlockSec

BlockSec ist ein wegweisendes Unternehmen für Blockchain-Sicherheit, das 2021 von einer Gruppe weltweit anerkannter Sicherheitsexperten gegründet wurde. Das Unternehmen engagiert sich für die Verbesserung der Sicherheit und Benutzerfreundlichkeit der aufkommenden Web3-Welt, um deren Massenadoption zu erleichtern. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Prüfung von Smart Contracts und EVM-Ketten an Sicherheitsaudits, die Phalcon-Plattform für die Entwicklung von Sicherheit und die proaktive Blockierung von Bedrohungen, die MetaSleuth-Plattform für die Verfolgung und Untersuchung von Geldern sowie die MetaSuites-Erweiterung für Web3-Entwickler, die effizient in der Krypto-Welt surfen.

Bis heute hat das Unternehmen über 300 angesehene Kunden wie MetaMask, Uniswap Foundation, Compound, Forta und PancakeSwap betreut und in zwei Finanzierungsrunden von erstklassigen Investoren, darunter Matrix Partners, Vitalbridge Capital und Fenbushi Capital, zweistellige Millionenbeträge erhalten.

Offizielle Website: https://blocksec.com/

Offizieller Twitter-Account: https://twitter.com/BlockSecTeam

Sign up for the latest updates
~$15.9M Lost: Trusted Volumes & More | BlockSec Weekly
Security Insights

~$15.9M Lost: Trusted Volumes & 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

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly
Security Insights

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly

This BlockSec weekly security report covers eight attack incidents detected between April 20 and April 26, 2026, across Ethereum, Avalanche, Sui, Base, HyperLiquid, and MegaETH, with total estimated losses of approximately $7.04M. The highlighted incident is the $1.3M GiddyDefi exploit, where the attacker did not break any cryptography or use a flash loan but simply replayed an existing on-chain EIP-712 signature with the unsigned `aggregator` and `fromToken` fields swapped out for a malicious contract, demonstrating how partial signature coverage turns any historical signature into a generic permit. Other incidents include a $3.5M Volo Vault operator key compromise on Sui, a $1.5M Purrlend privileged-role takeover, a $413K SingularityFinance oracle misconfiguration, a $142.7K Scallop cross-pool index injection, a $72.35K Kipseli Router decimal mismatch, a $50.7K REVLoans (Juicebox) accounting pollution, and a $64K Custom Rebalancer arbitrary-call exploit.

Best Security Auditor for Web3

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

BlockSec Audit