12 Czerwca 2002 roku został opublikowany błąd w module SQLXML.
Z powodu nieprawidłowej obsługi wewnętrznych buforów, może się zdarzyć, że na serwerze
zostanie uruchomiony nieautoryzowany kod.
12 Czerwca 2002 roku został opublikowany błąd w module SQLXML.
Z powodu nieprawidłowej obsługi wewnętrznych buforów, może się zdarzyć, że na serwerze
zostanie uruchomiony nieautoryzowany kod. Więcej szczegółów można znaleźć w biuletynie
MS02-030, oraz w artykule KB321911.
Błąd dotyczy Microsoft SQL Server 2000, a zwłaszcza tych instalacji,
gdzie odblokowany jest mechanizm SQLXML oraz można przesyłać kwerendy za pośrednictwem
protokołu HTTP. SQLXML pozwala przekazywać dane w formacie XML z/do SQL Server
2000. Wyniki zapytań mogą być przekazywane w postaci dokumentów XML o ściśle zdefiniowanej
strukturze.
Odkryte zostały dwa typy błędów w SQLXML
-
Błąd przepełnienia bufora w rozszerzeniu ISAPI które, w najgorszym
przypadku pozwoli uruchomić dowolny kod na serwerze WWW (Microsoft Internet
Information Services, (IIS).
-
Błąd pozwalający tak sformatować znacznik XML, że atakujący
może uruchomić skrypt na komputerze użytkownika z większymi uprawnieniami. Można
np. Uruchomić skrypt tak jakby pochodził ze strefy Intranetu (w IE) zamiast
Internetu.
Czynniki osłabiające podatność na atak:
Błąd przepełnienia bufora w SQLXML ISAPI:
-
Administrator musi poprawnie skonfigurować strukturę katalogów
wirtualnych, oraz nazwy wykorzystywane przez komponent SQLXML na serwerze IIS.
Atakujący nie może poznać struktury katalogu.
-
Atakujący musi znać położenie katalogu wirtualnego (aliasu)
na IIS, który wykorzystywany jest przez SQLXML.
Przesyłanie skryptów za pośrednictwem znaczników XML:
-
Aby atak się powiódł, użytkownik musi mieć odpowiednie prawa
na SQL Server.
-
Atakujący musi znać adres SQL Server, gdzie dany użytkownik
ma prawa dostępu.
-
Atakujący musi zachęcić użytkownika by ten odwiedził witrynę,
którą przejął.
-
Możliwość wysyłania zapytań przez HTTP nie jest domyślnie
odblokowywana.
-
Microsoft zaleca, by zapytania “ad hoc” nie były możliwe
za pośrednictwem wirtualnego korzenia.
-
Skrypt będzie uruchamiany na przeglądarce użytkownika zgodnie
z obwarowaniami wynikającymi ze stref bezpieczeństwa – zwykle będzie to strefa
Intranetu (Intranet Zone).
Identyfikatory:
- Brak sprawdzania bufora w rozszerzeniu ISAPI SQLXML -
CAN-2002-0186
- Osadzanie skryptów za pośrednictwem znacznika XML -
CAN-2002-0187
Niektóre częściej zadawane pytania
Czy komponent HTTP SQLXML jest domyślnie zainstalowany i uruchomiony?
Nie. Zanim można uzyskać dostęp do SQL Server za pośrednictwem
URL i dowolnego klienta HTTP, najpierw administrator musi skonfigurować odpowiedni
katalog wirtualny na serwerze IIS przy użyciu konsoli administracyjnej która jest
częścią SQLXML.
Jak atakujący może wykorzystać ten błąd?
Błąd może być wykorzystany przez każdego, kto może uzyskać połączenie
HTTP z IIS-em na którym zainstalowany jest komponent SQLXML.
Co atakujący może wykonać jeżeli nie jest zainstalowana poprawka
usuwająca błąd bufora?
W zależności od danych przesyłanych przez atakującego, mogą zajść
2 sytuacje:
- Jeżeli dane zostaną wybrane losowo, IIS może się zawiesić
lub działać nieprawidłowo
- W przypadku bardzo uważnego doboru przesyłanych informacji,
można teoretycznie zmodyfikować działanie rozszerzeń ISAPI, pozornie nie zakłócając
ich pracy
Jeżeli atakujący prześle losowe dane, co trzeba zrobić by przywrócić
normalne działanie serwera?
Serwer IIS na którym zainstalowany jest SQLXML musi być uruchomiony
ponownie..
Jeżeli atakujący uważnie dobierze przekazywane informacje i
zmieni działanie rozszerzenia ISAPI, co może zrobić zmodyfikowany proces?
Domyślnie, SQLXML ISAPI działa jako LocalSystem, czyli ma prawa
do pełnej kontroli danego serwera. Zmodyfikowane rozszerzenie ISAPI może wykonać
dowolne operacje.
Nie wiem jaką mam wersję SQLXML. Jak to sprawdzić?
Poniższa lista pokazuje, w jaki sposób sprawdzić zainstalowane
wersje SQLXML:
- Jeżeli na serwerze IIS znajduje się grupa Microsoft SQL
Server, zawierająca program o nazwie Enterprise Manager, to zainstalowana
jest wersja SQLXML rozprowadzana wraz z SQL Server Gold (i trzeba zainstalować
poprawkę dla tej wersji).
Są dostępne 2 pakiety dla SQLXML rozprowadzanej wraz z SQL Server Gold. Którą
należy zastosować – zależy od zainstalowanej wersji MDAC. Należy sprawdzić klucz
rejestru HKEY_LOCAL_MACHINE/Software/Microsoft/DataAccess/FullInstallVer/ i
szukać numeru zaczynającego się od 2.6 (dla MDAC w wersji 2.6) lub 2.7 (dla
MDAC 2.7).
Jeżeli podczas instalacji pojawi się komunikat, że wykorzystywana jest wersja
SQLXML 1.0, to należy aktualizować ją do wersji nowszej – SQLXML 1.0 nie jest
już wspierany przez dział wsparcia technicznego..
- Poszukać pliku Sqlvdr2.dll na serwerze z IIS. Jeżeli
zostanie znaleziony, należy zainstalować poprawkę dla SQLXML 2.0.
- Poszukać pliku Sqlvdr3.dll na serwerze IIS. Jeżeli
zostanie znaleziony, należy zainstalować poprawkę dla SQLXML 3.0.
Mam zainstalowanych kilka wersji SQLXML. Jakie mam zainstalować
poprawki?
Należy zainstalować poprawkę dla każdej posiadanej wersji
SQLXML.
Na czym polega nieprawidłowa obsługa dokumentu XML w SQLXML
(błąd osadzania skryptów)?
SQLXML nie sprawdza, czy parametr w “korzeniu” zapytania (element
“ROOT”) nie zawiera wykonywalnego skryptu, tylko go wykonuje.
SQLXML powinien sprawdzić, czy czasem nie jest przekazywany skrypt.
Ponieważ tego robi, jeżeli do bazy zostało skierowane zapytanie z tym skryptem,
to ciąg XML zawierający odpowiedź także będzie zawierał ten skrypt. Jeżeli w wyniku
dalszych operacji ten skrypt trafi na przeglądarkę, zostanie uruchomiony.
Co może zrobić atakujący?
Załóżmy, że atakujący ma stronę internetową, gdzie użytkownik
klika na link. Odsyłacz może wysłać zapytanie XML do SQL Server. Jeżeli zapytanie
zawiera w elemencie ROOT skrypt, zostanie on zwrócony jako część wyniku i uruchomiony
na komputerze klienckim.
Proszę zwrócić uwagę, że w przypadku, gdyby np. skrypt był bezpośrednio
związany z danym linkiem, to uruchomiony by został pod kontrolą tej
strefy bezpieczeństwa, do której należy witryna atakującego. Wykorzystując ten błąd,
skrypt będzie działał w strefie związanej z serwerem IIS na którym działa komponent
HTTP SQLXML.
Lokalizacja poprawek
Microsoft testował wszystkie wersje SQLXML (wersję rozprowadzaną
razem z SQL Server 2000 Gold, SQLXML 1, 2 oraz 3). Wersja SQLXML 1 nie jest już
wspierana i powinna zostać uaktualniona do nowszej wersji.
Poprawka może być instalowana na systemach z zainstalowanym SQL
Server 2000 SP2. Wchodzić w skład SQL Server 2000 SP3. Nie jest zależna od wersji językowej
SQL Server.
Po instalacji konieczny jest restart serwera.
Aby sprawdzić, czy poprawka jest zainstalowana, należy zbadać,
czy istnieje odpowiedni klucz w rejestrze. Dokładna nazwa klucza, zależy od początkowo
zainstalowanej wersji SQLXML, i tak:
- Wersja Microsoft SQLXML dostarczana razem z SQL 2000 Gold: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\DataAccess\Q321858
- SQLXML 2.0: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\SQLXML
2.0\Q321460
- SQLXML 3.0: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\SQLXML
3.0\Q320833
Microsoft
dziękuje
Matt Moore z Westpoint Ltd. za zgłoszenie
błędu, co pozwoliło nam lepiej chronić klientów.