Badacze z grupy nao_sec znaleźli w serwisie VirusTotal plik w formacie DOC przesłany z adresu IP wskazującego na Białoruś, który wykorzystuje nieznaną wcześniej podatność pozwalającą na zdalne wykonanie kodu w systemie Windows. Lukę nazwano „Follina” (identyfikator przyznano dopiero kilka godzin temu: CVE-2022-30190), ponieważ ostatni człon nazwy przesłanego pliku odpowiada kodowi pocztowemu miasta o tej nazwie. Jest to przykład 0-day, czyli podatności, którą jeszcze nie załatano lub nie podano sposobu zabezpieczenia środowisk (niektóre antywirusy wykrywają już ten konkretny plik, ale nie jest to raczej całkowite bezpieczeństwo). Działanie pliku jest nowatorskie, wykorzystano technikę template injection do pobrania pliku HTML zawierającego składnię msdt (Narzędzie diagnostyczne Pomocy technicznej Microsoft) uruchamiającą polecenia w PowerShell.
Follina: Exploit 0-day z Białorusi
Wgląda to w ten sposób:
Natomiast po zdekodowaniu:
Wyłączenie obsługi makr w Office nie przynosi oczekiwanego rezultatu – kod przez cały czas może być uruchomiony. Z kolei w przypadku widoku chronionego wystarczy zmiana formatu na RTF. Luka jest używana w atakach, o czym świadczy plik z kwietnia, którego nazwa przetłumaczona z języka rosyjskiego to „zaproszenie na rozmowę.doc”. Przygotowany został także PoC w postaci pliku Word uruchamiającego kalkulator.
Oprócz tego możemy samodzielnie wygenerować złośliwy plik, używając skryptu napisanego w Python dostępnego w tym repozytorium: https://github.com/chvancooten/follina.py.
Użycie narzędzia ogranicza się do uruchomienia skryptu (wymagany Python 3). Tworzy on plik clickme.docx, który po otwarciu pobiera plik HTML, a następnie wykonuje polecenie uruchamiające calc.exe.
Bez żadnych zmian w kodzie, Word będzie próbował załadować plik HTML z localhost, natomiast Python wystawia swój webserver z możliwością zewnętrznego dostępu (do wystawienia aplikacji na porcie 80 potrzebne są oczywiście uprawnienia sudo).
Korzystając z tej własności, możemy przetestować działanie bez pakietu Office. Atakujący może z kolei przesłać odpowiedni link do ofiary, ale uruchomienie z poziomu przeglądarki nie będzie skutkować wykonaniem kodu (przynajmniej bez odpowiednich zmian).
Plik exploit.html zawiera poniższy kod JavaScript:
W celu „zmuszenia” Word do pobrania pliku z zewnętrznego adresu i/lub ustawienia innego programu do uruchomienia, wystarczy zmienić zawartość zmiennych payload_url i payload.
Podatności nie są niczym nowym i należy być na nie przygotowanym. Opisywana luka jest z pewnością interesująca, ale zawsze warto mieć świadomość różnych zagrożeń. Tymczasem Microsoft opublikował środki zaradcze, jakie należy podjąć, ponieważ nie ma jeszcze oficjalnej aktualizacji, a podatne są systemy od Windows 7, aż do Windows Server 2022.
Plików Office z różnych zewnętrznych źródeł nie powinno się otwierać bez użycia np. sandbox’a, czyli ograniczonego środowisk do uruchamiania aplikacji (bardziej zaawansowani użytkownicy mogą użyć także wirtualizacji). Tutaj warto polecić nasz materiał z cyklu „Podstawy bezpieczeństwa: jak analizować malware i przetestować antywirusa w domowym labie?”
Program antywirusowy w teorii może taki złośliwy plik wykryć, ale jako użytkownicy, musimy także myśleć samodzielnie. Dodatkowo pliki możemy bezpiecznie otwierać również online np. w Google Docs czy Microsoft Office Online.