WinRAR przez 19 lat miał lukę. Naprawa jest niemożliwa – nie ma kodu podatnej biblioteki
Analitycy znaleźli sposób na wykorzystanie luki w popularnym programie do pakowania i rozpakowywania archiwów. WinRAR jest podatny na atak, który można przeprowadzić, przekonując ofiarę do rozpakowania szkodliwego pliku ACE. Luka była obecna w programie przez 19 lat i jest nie do naprawienia. Twórcy programu WinRAR musieli zrezygnować z obsługi tego formatu, by zabezpieczyć 500 mln użytkowników.
21.02.2019 | aktual.: 21.02.2019 17:03
Fuzzing czyli testowanie na błędnych danych
Lukę odkryło działające od kilku miesięcy laboratorium firmy Check Point, specjalizujące się w testach typu fuzz. To automatyczny test, przeprowadzany z użyciem celowo uszkodzonych lub zupełnie losowych danych wejściowych i sprawdzania reakcji programu. W testowaniu programu WinRAR użyty został popularny, otwartoźródłowy fuzzer WinAFL. WinRAR zaś został delikatnie zmodyfikowany, by nie wyświetlał interfejsu graficznego i nie rozróżniał typów archiwów. Dane wejściowe były podawane z linii poleceń z odpowiednimi parametrami WinRAR-a, by zmusić go do przetwarzania uszkodzonych archiwów.
Analiza pozwoliła znaleźć kilka punktów, w których WinRAR nieoczekiwanie kończył pracę. Mogło się to zdarzyć przy rozpakowywaniu archiwów RAR, LZH i ACE z powodu uszkodzenia pamięci, jednak to format ACE przyciągnął uwagę nietypowym zachowaniem. Awarię wywoływała dynamicznie linkowana biblioteka unacev2.dll, skompilowana w 2006 roku bez mechanizmów zabezpieczających, co znacznie ułatwiło zadanie. W połączeniu z obecnym tam błędem logiki obsługującej ścieżki do plików naruszenie pamięci umożliwiało zdalne uruchomienie szkodliwego kodu na zaatakowanym komputerze.
Wykorzystanie luki nie jest łatwe, gdyż do nadpisanego fragmentu pamięci badacze mieli ograniczony dostęp, ale udało się przygotować działający exploit. Wymagało to dekompilacji biblioteki, inżynierii wstecznej i odnalezienia kodu używającego podobnych struktur danych. Cały proces został szczegółowo opisany. Atakującym udało się utworzyć plik, dodać go do folderu automatycznego uruchamiania, a także połączyć z serwerem SMB.
Extracting Code Execution from WinRAR
WinRAR jest już bezpieczny
Luki nie da się zabezpieczyć z bardzo prostego powodu – nie wiadomo gdzie jest kod źródłowy podatnej biblioteki. Jest co prawda dostępny kod analogicznego narzędzia dla Linuxa, unace-nonfree, tych samych autorów, ale niewiele to pomaga. Jest tam co prawda kod wersji dla Windowsa, ale jest to starsza wersja, niż ta, z której zbudowana została w 2006 roku biblioteka unacev2.dll. Nie udało się go skompilować, brakuje też kilku funkcji.
Twórcom programu WinRAR nie pozostało nic innego, jak zrezygnować z obsługi archiwów ACE i usunąć podatną bibliotekę. Zmiany zostały wprowadzone w życie z wersją 5.70 beta 1. W naszej bazie programów znajduje się już wersja testowa 5.70 beta 2.