28/12/2009
Soroush Dalili donosi, że za pomocą fuzzingu nazw uploadowanych plików udało się wykonać dowolny kod na serwerze IIS. Luka tkwi w sposobie w jaki IIS interpretuje pliki z wieloma rozszerzeniami oddzielonymi średnikiem
Opis luki w IIS
Wysłanie na serwer pliku o nazwie
malicious.asp;.jpg
w 70 przypadkach na 100 omija ochronę przed “niedozwolonymi” rozszerzeniami. Tak nazwany plik, będący w rzeczywistości nie obrazkiem, a instrukcjami ASP można będzie wykonać. Soroush podsuwa także rozszerzenia .cer i .asa jako ciekawe z punktu widzenia atakującego.
Na atak podatne są serwery IIS w wersji 6 i wcześniejszych. Wersja 7 nie była testowana, a 7.5 jest wolna od opisywanego błędu.
Sposób ochrony
Soroush zaleca, aby webdeveloperzy przypisywali losową nazwę każdemu otrzymywanemu od użytkownika plikowi. Na sam uploadowany plik nałożyć można również walidację — tylko znaki alfanumeryczne. Usunięcie praw do wykonania (Execute) z katalogów do których uploadowane są pliki przez użytkowników także wydaje się być dobrym pomysłem.
Microsoft wspomina, że atakujący, aby przeprowadzić atak, musi być uwierzytelniony i mieć prawo zapisu do katalogu na serwerze, co jest sprzeczne z zaleceniami firmy odnośnie bezpiecznej konfiguracji serwera IIS — tylko kto dziś spotyka rozbudowany serwis, który wyświetla się tylko uwierzytelnionym? Albo popularną webaplikację, która nie pozwala ustawić użytkownikowi swojego zdjęcia profilowego?
Więcej o atakach związanych z przyjmowaniem plików użytkownika na serwer webaplikacji przeczytacie tutaj.
Skoro jest mowa o “dziurze” w IIS, to warto też wspomnieć o bardzo podobnej “dziurze w Apache” występującej w połączeniu z PHP.
Co mianowicie znaczy ten zapis w konfiguracji:
AddType application/x-httpd-php .php
To, że “pliki *.php są obsługiwane przez PHP”? Prawie, ale prawie robi różnicę: Common Apache Misconception (http://isc.sans.org/diary.html?storyid=6139)