Pamiętacie ACE? Taki kompresor z minionej epoki. Mimo usilnych poszukiwań, w swoich archiwach nie znalazłem ani jednego pliku spakowanego tym kompresorem. Tymczasem jest jednym z powodów sporego błędu w programie WinRAR – prawdopodobnie najpopularniejszego archiwizatora dla Windows.
Ekipa Checkpoint bierze pod lupę kolejne programy, które próbuje „wywrócić” automatem – korzystając z fuzzera WinAFL. Po przeprowadzeniu tysięcy automatycznych testów (obiecuję, kiedyś o nich napiszę), ich wyniki są analizowane pod kątem możliwości wykorzystania znalezionych błędów do naruszenia bezpieczeństwa oprogramowania. Jeden z crashów miał swoje źródło w bibliotece nieaktualizowanej od co najmniej 2006 roku, pozbawionej jakichkolwiek zabezpieczeń utrudniających jej złośliwe wykorzystanie (typu ASLR czy DEP).
Pierwszym krokiem było sprawdzenie, czy przypadkiem nie ma tu szansy na klasyczny błąd pozwalający na wykonanie dowolnego kodu, jednak dokładniejsza analiza wskazała, że problematyczna biblioteka – unacev2.dll – ma problemy umożliwiające atak typu Path Traversal. Czyli, w dużym skrócie, dobrania się (w tym przypadku: potencjalnie nadpisania) wskazanego przez atakującego pliku na dysku. Trywialny przykład path traversal to np. dobranie się do listy kont w systemie za pomocą odnośnika typu http://ofiara.com/czytaj_wiadomosc.php?wiadomosc=../../../etc/passwd.
Tu badacze skupili się na nagłówkach formatu ACE. Ich najbardziej oczywista modyfikacja, czyli podmienienie początku nazwy pliku ścieżką typu ..\..\, wywołała błąd – jednak nie taki, jak się spodziewali. Na dysku pojawił się nie folder niezwiązany z wprowadzoną ścieżką, lecz R:\souburbe, a w nim plik RED_VERSION_ o treści SIO. Krótko mówiąc – kawałek napisu UNREGISTERED VERSION występującego w nagłówkach archiwum. A nie – ścieżki wpisanej w pole „ścieżka”.
Po dłuższej analizie i weryfikowaniu kolejnych hipotez, badacze Checkpointa doszli w końcu do źródła problemu i stworzyli działający exploit – plik, który po rozpakowaniu programem WinRAR, dołoży swój kawałek do listy programów uruchamianych przy starcie systemu.
Informacja została przekazana twórcom WinRARa (CVE-2018-20250, CVE-2018-20251, CVE-2018-20252, CVE-2018-20253), którzy usunęli wsparcie dla formatu ACE od wersji 5.70b1. Warto też zwrócić uwagę, że za błędy w popularnych archiwizatorach płaci się nawet 100’000 dolarów – więc ich ujawnienie przez Checkpoint jest pozbawieniem się całkiem sporego zastrzyku gotówki. Za to poprawia nasze bezpieczeństwo.
Pełna analiza techniczna: Extracting a 19 Year Old Code Execution from WinRAR.