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 konsolę 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 dostę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łówka 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 skanerem 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 produkcyjnym lub na serwerach publikujących zbliżonych konfiguracją do serwerów produkcyjnych. Jest to problem konfiguracji, którym należy się zająć w fazie instalacji, dlatego serwery testowe w środowiskach projektowych lub kontroli jakości nie dostarczają dokładnych wyników odpowiadających środowisku produkcyjnemu.