16-10-2018 / Od 0 do pentestera

CSV Injection

Tym razem nie o podatności, a bardziej funkcjonalności, która może zostać użyta do ataków phishingowych.

Problem ten może wystąpić na każdej stronie internetowej, która umożliwia eksportowanie danych do formatu CSV.

W jaki sposób format tekstowy może zostać użyty do ataku?

Excel to arkusz kalkulacyjny produkowany przez firmę Microsoft.

Zawiera on dużą liczbę wbudowanych funkcji1, które upraszczają prowadzenie rachunkowości.

Lista funkcji Excel

Jeżeli zamiast liczby lub też tekstu chcemy użyć w danej komórce programu formuły - musimy zacząć ją od znaku =.

Wtedy program wie, że w tym miejscu należy wykonać dany kod.

Dla przykładu możemy wyliczyć średnią z liczb zawartych w danych komórkach.

W ten sposób można również stworzyć odnośnik do zewnętrznej strony:

Odnośnik do strony

Albo też wykonać zewnętrzny program.

Ta funkcjonalność nazywa się DDE. Jej składnia jest niezwykle prosta:

=cmd|' /C calc'!A0

Microsoft zdaje sobie sprawę, że opcja ta może służyć do wykonania niebezpiecznego kodu, dlatego też przed jego uruchomieniem wyświetla odpowiedni komunikat ostrzegający użytkownika przed potencjalnymi konsekwencjami.

Ostrzeżenie

W rzeczywistości jednak wiele użytkowników z przyzwyczajenia, bądź też niewiedzy, dalej zezwala na wykonanie takiego kodu.

W naszym wypadku uruchomiony został kalkulator.

Ale jak to łączy się z bezpieczeństwem stron internetowych?

Dodatkowy komunikat

Załóżmy, że jesteśmy księgowymi i ktoś przesłał nam link do serwisu rozliczeniowego, z którego to pobrać możemy listę transakcji w formacie CSV.

CSV - czyli format przechowywania danych w plikach tekstowych, gdzie wartości są rozdzielone przecinkiem.

Wygląd pliku CSV

Pliki te mogą zostać otwarte przez Excela - każda wartość będzie traktowana jako oddzielna komórka.

Jakież może być zdziwienie księgowej, gdy nagle jej oczom ukaże się kalkulator.

Jeżeli uruchomi się kalkulator - również dobrze uruchomiony może zostać dowolny złośliwy plik.

Jak do tego doszło? Jeśli w tym pliku znajduje się wartość zaczynająca się od znaku równości - zostanie ona potraktowana jako formuła i wykonana przez Excel.

Dlatego też jeżeli eksportujemy jakieś pliki CSV, warto wszystkie formuły poprzedzić tabulacją - wtedy są one traktowane jako zwyczajny tekst.

Złośliwy plik
  • CSV Injection, bo tak nazywa się ten typ podatności, nie jest traktowany jako błąd przez większość firm.

Dla przykładu Google nie wypłaca za niego nagród w ramach programu Bug bounty2.

Polityka Google odnośnie CSV Injection

Dlaczego? Ponieważ to użytkownik kontroluje zawartość eksportowanego pliku. Dodatkowo atakowany klient musi potwierdzić czy chce wykonać dodatkową zawartość.

Warto jednak znać takie nietypowe rozwiązania. Potencjalnych miejsc zastosowania tego ataku jest bowiem wiele.

Tutaj przykład z konsoli AWS Amazon[^3]:

Błąd w konsoli Amazon

Jak widać nawet w prostym formacie tekstowym może czyhać niebezpieczeństwo.