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 . Jeśli po tym atrybucie znajduje duża liczba proponujemy zmienić ją na mniejszą i ponownie wykonać polecenia od kroku 4.


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.

Podziel się z innymi tym artykułem!