Dziura Windows Metafile kończy 20 lat. Wyrządziła wiele szkód
Niedawno minęło 20 lat od opublikowania bardzo poważnej podatności CVE-2005-4560, pozwalającej na "hakowanie Windowsa obrazkiem". Dziura w GDI, umożliwiająca wykonanie kodu podczas wyświetlania pliku WMF, przez kilka tygodni wyrządziła wiele szkód.
Potocznie zwana "dziurą WMF-ową" lub "MICE" (Metafile Image Code Execution), podatność dawała dość spektakularne efekty, od samego początku służąc do pobierania trojanów. Portale IT często umieszczały krótkie filmy FLV demonstrujące uruchamanie dziesiątek procesów w tle po wyświetleniu pliku WMF.
Media straszyły także, że dziura znajduje się w systemie od wersji Windows 3.0 i możliwe, że jest backdoorem. Informacje te prędko stały się bardzo popularne, choć stanowiły nadużycie i nadinterpretację. Nie pomagało też to, że Microsoft wydawał się nie rozumieć istoty problemu i błędnie dokumentował jego impakt, w biuletynie MS06-001.
Antyczne formaty
Jak tłumaczy Steve Gibson, problem dotyczy obsługi funkcji SETABORTPROC w systemach z rodziny Windows NT. Ponieważ plik WMF nie jest obrazkiem rastrowym (piksele), tylko zbiorem instrukcji rysujących, w okolicach roku 1991 (na fali ówczesnej mody) zadecydowano, że należy uczynić z niego platformę programistyczną. Dzięki temu WMF wzbogacił się o możliwość wołania zewnętrznego kodu w specyficznych okolicznościach.
Udokumentowane działanie znane z Windows 3.x/9x mówiło wprost, że zewnętrzny kod ma się znajdować w aplikacji. Jest tak i dziś. Ale kilka lat po stworzeniu formatu, na potrzeby "nowoczesnego" i "bezpiecznego" systemu Windows NT usunięto ograniczenie dotyczące lokalizacji kodu. Dzięki temu, SETABORTPROC mogło wołać procedurę zawartą w samym pliku WMF, czyniąc go nośnikiem arbitralnego kodu wykonywalnego.
Kiepska jakość informacji
Dlaczego zdecydowano się uczynić systemy NT mniej bezpiecznymi niż Windows 95 - nie wiadomo, ale było to pożywką dla hipotez o "backdoorach" w systemie. Popularyzatorem tej tezy stał się niezamierzenie Leo Laporte i jego program Security Now. Wyjaśnienie sprawy było dodatkowo utrudniane przez fatalną komunikację po stronie Microsoftu.
Informowano na przykład, że podatność istnieje także w Windows 9x, ale jest trudniejsza do wykorzystania lub że istnieją "środki zaradcze". W praktyce chodziło o to, że Windows 9x zachowywał się zgodnie z dokumentacją, a Windows NT i nowsze wprost umożliwiały wykonywanie kodu z poziomu pliku. W Windows 3.x było to niemożliwe z innych powodów.
Poprawki i workaroundy
Microsoft opublikował poprawkę 9 dni po ogłoszeniu podatności, 5 stycznia 2006, choć była gotowa już 31 grudnia. Poprawkę KB912919 otrzymały Windows 2000, XP, 2003 oraz… wersja Beta 1 systemu Windows Vista. Zastąpiono ją nową implementacją GDI w kwietniu 2007. Początkowo zaproponowano środek zaradczy w postaci wyłączenia miniaturek obrazów w Eksploratorze. W zależności od źródła, ostrzegano też, że ponieważ Internet Explorer potrafi wyświetlać WMF, wystarczy osadzić grafikę na stronie, a wirus uruchomi się sam.
Przestępcy prędko przekonali się, że to nieprawda. Internet Explorer był świadom zagrożenia i nie wykonywał arbitralnego kodu w ramach SETABORTPROC. Nie wyjaśniając dlaczego reszta systemu nie wdrożyła zbliżonego zabezpieczenia, Microsoft ogłosił, że IE sam w siebie jest pod tym względem bezpieczny. Dlatego przestępcy zaczęli serwować pliki WMF jako plik do pobrania, a nie element osadzony. Sposób ten był popularny przez wiele miesięcy roku 2006.
Podatność WMF odkryto niemal równo po poprzedniej głośnej dziurze w obsłudze grafiki, czyli CVE-2004-1049. Umożliwiała ona wykonanie zdalnego kodu kursorem lub ikoną. I tu już Internet Explorer zdecydowanie był podatny. Problem był na tyle niemożliwy do rozwiązania, że Microsoft po prostu dorzucił aplikację pracującą w tle, patchującą funkcję LoadImage. Problemy tego typu są już dziś melodią przeszłości. Nowoczesne formaty są zazwyczaj bezpieczniejsze. Co innego Notatnik...
Kamil J. Dudek, współpracownik redakcji dobreprogramy.pl