Jeśli używasz na swoim komputerze pakietu OpenOffice powinieneś go jak najszybciej zaktualizować do najnowszej wersji, ponieważ to o czym poniżej napiszemy i pokażemy, zjeży włosy na głowie niejednej osobie zajmującej się bezpieczeństwem.
Chodzi oczywiście o nowoodkrytą lukę w zabezpieczeniach oprogramowania, która otrzymała numer CVE-2020-13958 i umożliwia niezauważalne dla użytkownika wykonanie kodu w momencie otwierania dokumentu o rozszerzeniu „.odt” w OpenOffice. Dla atakującego oznacza to tyle, że może on uzyskać pełną kontrolę nad komputerem.
Problem dotyczy Apache OpenOffice 4 (do ostatniej wersji 4.1.7).
Uwaga! Wykonanie kodu (uruchomienie w tle programu) nie jest sygnalizowane żadnym powiadomieniem, ani paskiem z przyciskiem („Enable content”), jak dzieje się to w przypadku otwierania dokumentów z wbudowanym, złośliwym makro z pakietu MS Office.
Oprogramowanie OpenOffice
Dla tych, którzy nie mieli okazji korzystać z oprogramowania OpenOffice (pełna nazwa Apache OpenOffice) wyjaśnimy krótko, że jest to darmowa alternatywa dla pakietu Microsoft Office dostępna na komputery z systemem operacyjnym Linux, Solaris, MacOS oraz Windows. Pakiet OpenOffice zawiera edytor tekstu (Writer), arkusz kalkulacyjny (Calc), aplikację do prezentacji (Impress), aplikację do rysowania (Draw), edytor formuł (Math) i aplikację do zarządzania bazą danych (Base). Firma Sun udostępniła pakiet OpenOffice w lipcu 2000 r. jako konkurencję dla pakietu Microsoft Office. Następnie w 2011 roku Oracle, ówczesny właściciel Sun, ogłosił, że nie będzie już oferować komercyjnej wersji pakietu i przekazał projekt Fundacji Apache. Apache zmienił nazwę oprogramowania na Apache OpenOffice i tak pozostało do dziś. Inne aktywne projekty to LibreOffice i NeoOffice (komercyjny i dostępny tylko dla macOS).
Popularność OpenOffice na Świecie i w Polsce
Pokusiliśmy się o sprawdzenie i analizę z jaką skalą zagrożenia mamy do czynienia. Ze strony Apache OpenOffice pobraliśmy raport przedstawiający liczbę pobrań pakietu rozłożoną w latach oraz z podziałem na kraje. Raport uwzględnia dane od roku 2012, do dziś.
Na powyższym wykresie widać, że do 2020r. liczba tych pobrań przekroczyła 300 milionów! Widać też duży pik w pobraniach (ponad 100 tyś.) w marcu i czerwcu 2020r. Pewnie jest on związany z pandemią COVID-19 i koniecznością pracy z domu oraz zdalnej nauki uczniów szkół. Patrząc na ogół pobrań, nie jest to mała liczba, więc istnieje realne i spore zagrożenie przeprowadzenia udanego ataku w sieci z wykorzystaniem tego wektora (złośliwego dokumentu ODT). Jak spojrzymy na statystyki per kraj zobaczymy na nim też Polskę, która plasuje się na 9 miejscu z liczbą 11,3 mln pobrań! Więc całkiem sporo.
O co dokładnie chodzi w luce OpenOffice?
Problem polega na tym, że Apache OpenOfice nie obsługuje modułów obsługi skryptów (script:event-listener), czyli nasłuchiwania zdarzeń wykonywanych w makrach (tak jak robi to LibreOffice). Używając konstrukcji takiej, jak poniżej:
można wywołać otwieranie adresów URL bez żadnych okien dialogowych z prośba o potwierdzenie przez użytkownika w OpenOffice, w tym specjalnych programów obsługi linków „.uno” lub „.service”, które zostały zaprojektowane tylko do użytku wewnętrznego.
W scenariuszu poniżej pokażemy, jak za pomocą specjalnie przygotowanego dokumentu, będziemy mogli uruchomić kalkulator w systemie Windows.
Podatność działa także dla linków UNC, a wyzwolenie akcji „.uno” lub „.service” działa również w systemie Linux .
Problem został zgłoszony firmie Apache pod koniec kwietnia 2020r. i na początku został zignorowany przez Producenta. Dopiero po interwencji portalu securityweek.com na początku października firma Apache wypuściła fix w wersji 4.1.8 w dniu 10 listopada 2020r.
Scenariusz utworzenia i uruchomienia kodu w pliku OpenOffice
W celu przetestowania podatności zainstalowaliśmy na naszym najnowszym Windows 10 (wydanie 20H2) Open Office w wersji 4.1.7 oraz utworzyliśmy w nim złośliwy plik w aplikacji Writer (odpowiednik Microsoft Word). Złośliwy plik o nazwie „CV_KapitanHack.odt”, jaki utworzymy będzie zawierał w środku jedno słowo z linkiem do uruchomienia kalkulatora (calc.exe) na Windows. Otworzenie pliku spowoduje automatyczne uruchomienie kalkulatora, bez jakiekolwiek interakcji z użytkownikiem.
Krok 1 – Utworzenie dokumentu ODT z linkiem do pliku wykonywalnego kalkulatora
Zaczynamy od utworzenia dokumentu z linkiem w środku. Link będzie powiązany z plikiem na dysku – w naszym przypadku plikiem wykonywalnym kalkulatora, który jest wbudowany w każdą wersję Windows.
Musimy link skonfigurować w każdej opcji zarówno w „Internet”, „Mail&News” oraz „Document”.
Link nazywamy jako KapitanHack i zapisujemy plik pod nazwą „CV_KapitanHack.odt”.
Krok 2 – Wypakowanie dokumentu ODT
Natywnym formatem OpenOffice jest .ODF (Open Document Format). Nas będzie interesował plik .ODT czyli plik zapisany w OpenOffice Writer. W rzeczywistości jest to archiwum, więc spróbujmy je rozpakować w aplikacji 7-zip (wbudowany kompresor zip w Windows ma problemy z pakowaniem, które skutkuje uszkodzeniem pliku podczas otwarcia w OpenOffice). Dla uproszczenia wykonamy tę czynność z linii komend:
Pierwsza akcja, to wypakowanie całej zawartość naszego pliku „CV_KapitaHack.odt” do katalogu o nazwie „Wypakowany”.
Całość procesu wykonamy z linii wiersza mopecen (cmd.exe):
7z.exe x -oWypakowany CV_KapitanHack.odt
W katalogu „Wypakowany” znajduje się cała struktura pliku ODT zgodna ze standardem formatu OASIS
W następnym kroku to co nas interesuje to zawartość pliku „content.xml”, w którym umieścimy nasz złośliwy skrypt:
Krok 3 – Wklejenie skryptu do pliku „content.xml”
Nasz skrypt o treści:
wklejamy w zamiast sekcji “office:scripts”, która w naszym przypadku jest pusta.
Ten atrybut podmienimy powyższą składnią.
Krok 4 – Utworzenie złośliwego pliku ODT ze skryptem
Po udanej modyfikacji pliku „content.xml” musimy nasze rozpakowane archiwum z powrotem zamienić w plik ODT.
W tym celu wykonamy następujące polecenie w aplikacji 7-zip:
>cd Wypakowany
>7z.exe” a -r ..\CV_KapitanHack_script.zip *.*
W ostatnim kroku musimy jeszcze zmienić rozszerzenie pliku z „.zip” na „.odt”:
>move CV_KapitanHack_script.zip CV_KapitanHack_script.odt
Krok 5 – uruchomienie kodu z pliku ODT
Otwieramy nasz plik:
Natychmiast po jego otwarciu powinien uruchomić się nasz oczekiwany kalkulator.
Uwaga! Jeśli kalkulator nie uruchamia się, to najprawdopodobniej w pliku „settings.xml” mieliśmy skonfigurowaną zbyt dużą wartość w atrybucie
Podsumowanie
Opisana powyżej podatność należy do jednej z ciekawszych w świecie cybersecurity, ponieważ aplikacje OpenOffice są powszechnie używane przez użytkowników (może również firmy). Strach pomyśleć jak taki plik pojawiłby się w atakach phishingowych. Dlatego zawsze powinniśmy pozostawać czujni i świadomi tego co klikamy i jakie dokumenty otwieramy. Statystyki pobrań OpenOffice mówią, że na Świecie pobrano ponad 300mln wersji pakietów Oracle, w samej Polsce 11,3 mln. Czy pakiet OpenOffice jest używany w firmach? Na pewno, dlatego jedynym rozwiązaniem (oprócz dobrych narzędzi do bezpieczeństwa :)) jest tutaj aktualizacja do wersji 4.1.8 i ostrzeżenie użytkowników przed tego typu atakiem.