Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2002.06.23 23:34 | Jacek Kolonko | Aktualizacja: 2006.01.06 2:05

MS02-030: Brak sprawdzania bufora w SQLXML prowadzi do uruchomienia dowolnego kodu (Q321911)

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.


Komentarze 0 Masz uwagi do tej strony? Napisz

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor Jacek Kolonko
avatar VIP
 

What do you want to write today? ;)

Załóż konto
WSS to serwis, który łączy dziesiątki tysięcy specjalistów IT w Polsce, zajmujących się szeroko pojętymi technologiami Microsoft. Portal działa od 2003 roku, i oprócz setek publikacji technicznych, rozwijającego się forum - portal to ludzie, którzy go tworzą. To właśnie z myślą o nich warto codziennie nas odwiedzać.

Dowiedz się więcej o WSS

vGuru - Zostań Guru Wirtualizacji

 

MetroOne

Idź na górę strony