Zagrożenia w sieci

Modyfikowanie nagłówka Host

Problem

Serwery aplikacji często nasłuchują wielu portów w różnym celu. Na przykład serwis JBoss na jednym z portów nasłuchuje standardowych żądań, natomiast na drugim udostępnia kon­solę JMX dla celów administracji. Nawet jeśli port administracyjny jest zablokowany przez zaporę firewall, zewnętrzny użytkownik w dalszym ciągu będzie mógł uzyskać do niego do­stęp poprzez modyfikację nagłówka Host w żądaniu HTTP. Jeśli serwer aplikacji nie jest właściwie skonfigurowany, napastnik będzie mógł wykorzystać tę technikę w celu uzyskania dostępu do funkcji administracyjnych serwera aplikacji.

Do modyfikowania nagłówków HTTP w żądaniach napastnik może wykorzystać dodatek WebScarab. W takim przypadku zostałby włączony dodatek WebScarab i ustawiona opcja przechwytywania żądań. Następnie zainicjowano połączenie do serwera docelowego poprzez wprowadzenie adresu URL, na przykład http://www.example.com/, w pasku adresu przeglądarki.

Kiedy WebScarab przechwyciłby żądanie, należy zmodyfikować numer portu w nagłówku Host na port administracyjny serwera aplikacji i przesłać żądanie (tzn. zmodyfikować nagłówek Host na wartość postaci www.example.com:8000). Popularne serwery aplikacji wraz z ich domyślnymi numerami portów administracyjnych zestawiono w tabeli:

Domyślne porty administracyjne

Serwer aplikacji

Port administracyjny

AdobeJRun

8000

Apache Geronimo

8080

BEA WebLogic

7001

IBM WebSphere 6.0.x

9060, 9043

IBM WebSphere 5.1

9090, 9043

IBM WebSphere 4.0.x

9090

Oracle OC4J

23791

RedHat JBoss

8080

 

 

W naszym przypadku w przeglądarce wyświetli się strona administracyjna serwera aplikacji, wynik testu dla wdrażanej aplikacji jest zatem dodatni (aplikacja wrażliwa na modyfikowanie nagłów­ka Host). W przypadku, gdyby wyświetliła się strona z komunikatem o błędzie zawierającym informację, że żądanie było nieprawidłowe, lub jeśli otrzymamy taką samą odpowiedź, jakbyśmy przesłali niezmodyfikowany nagłówek Host, będzie to oznaczało ujemny wynik testu.

DYSKUSJA

Taki atak zadziała, ponieważ serwer aplikacji nie ma informacji o tym, którego portu (należą­cego do warstwy sieci) użyto do przesłania określonego żądania. Po otrzymaniu żądania aplikacja wykorzystuje przesłany nagłówek Host w celu określenia sposobu obsługi żądania.

Oczywiście w ten sposób napastnicy mogą uzyskać dostęp do wrażliwych funkcji aplikacji. Na przykład konsola JMX serwisu JBoss pozwala użytkownikowi na wyświetlanie drzewa JNDI, generowanie zrzutu wątków, wyświetlanie mapy wykorzystania puli pamięci, zarządzanie ska­nerem instalacji, ponowne zainstalowanie aplikacji oraz zamknięcie serwisu JBoss. Domyślnie własność ta jest otwarta. Można ją jednak zabezpieczyć w taki sposób, aby użytkownik był zmuszony do przeprowadzenia uwierzytelniania, zanim serwer aplikacji udzieli mu dostępu do funkcji.

Należy zwrócić uwagę na to, że nawet w przypadku gdy dostęp do konsoli administracyjnej wymaga uwierzytelniania, aplikacja nie jest bezpieczna. W dokumentacji wielu serwerów aplikacji można znaleźć domyślne nazwy użytkowników i hasła administracyjne, które należy wypróbować podczas wykonywania testów.

Test zaprezentowany w tej recepturze był przeprowadzony w środowisku produk­cyjnym lub na serwerach publikujących zbliżonych konfiguracją do serwerów pro­dukcyjnych. Jest to problem konfiguracji, którym należy się zająć w fazie instalacji, dlatego serwery testowe w środowiskach projektowych lub kontroli jakości nie do­starczają dokładnych wyników odpowiadających środowisku produkcyjnemu.