Często opisujemy tylne furtki w oprogramowaniu urządzeń sieciowych. Po co komu jednak tylna furtka skoro wrota dostępu są szeroko otwarte? W niektórych modelach ruterów Netgear można jednym linkiem na stałe wyłączyć uwierzytelnienie.
Zach Cutlip, badacz zajmujący się bezpieczeństwem urządzeń sieciowych, odkrył banalnie prostą metodę trwałego wyłączenia potrzeby uwierzytelnienia w celu uzyskania dostępu do panelu administracyjnego w ruterze Netgear WNDR3700v4. Co prawda trudno w to uwierzyć, ale wystarczy raz otworzyć link:
http://<adres rutera>/BRS_02_genieHelp.html
by urządzenie nigdy – nawet po restarcie! – nie zapytało już o login i hasło użytkownika. Jakby tego było mało, otwarcie linka:
http://<adres rutera>/BRS_success.html
wyświetla niezalogowanemu użytkownikowi nazwę wszystkich skonfigurowanych sieci i ich hasła dostępu jawnym tekstem. Jeśli jesteście ciekawi, skąd biorą się takie kwiatki – zapraszamy do lektury.
Nie ma to jak wyjątki
Zacznijmy od tego, że w oprogramowaniu rutera znajduje się plik /usr/sbin/net-cgi, który odpowiada za wykonywanie wywołań serwera www. Ten sam plik odpowiada także za określenie, które strony wymagają uwierzytelnienia, a które go nie potrzebują. Jednym ze sprawdzanych warunków jest weryfikacja, czy nazwa ścieżki zaczyna się od ciągu „”BRS_”. Plików, spełniających ten warunek, znajduje się na serwerze www kilkadziesiąt i odpowiadają one głównie za obsługę błędów i konfiguracji urządzenia. Wśród nich znajduje się wspomniany już BRS_success.html, którego wywołanie daje taki efekt:
Gdy jeden wyjątek nie wystarcza
Drugim ciekawym wyjątkiem od procesu uwierzytelnienia jest weryfikacja, czy przez przypadek użytkownik nie otwiera pliku unauth.cgi lub securityquestions.cgi. W założeniu pliki te mają być dostępne bez potrzeby uwierzytelnienia, jednak ze względu na konstrukcję sprawdzanego warunku, wystarczy dopisać odpowiedni ciąg do otwieranego linku, by przejść poprawnie weryfikację, np. otwarcie linku
http://adres rutera/protected_page.htm?foo=unauth.cgi
sprawi, że serwer nie zapyta użytkownika o login i hasło. Jest już nieźle, a będzie jeszcze nieźlej!
Do trzech razy sztuka
Trzecim sprawdzanym warunkiem jest bowiem weryfikacja „stanu rutera”. Jeśli w konfiguracji NVRAM zmienna hijack_process jest różna od „3”, serwer nie pyta o login i hasło. Celem tego warunku jest umożliwienie dostępu do interfejsu administratora bez znajomości hasła w momencie pierwszego uruchomienia rutera. Po zakończeniu konfiguracji wartość hijack_process wynosi 3. Cel wprowadzenia wyjątku szczytny – nie każdy użytkownik spojrzy w instrukcję, by tam znaleźć domyślne hasło administratora. Gorzej niestety z realizacją, ponieważ na serwerze znajduje się plik
http://<adres rutera>/BRS_02_genieHelp.html
którego wywołanie ustawia wartość zmiennej hijack_process na „2”. Jak może pamiętacie, wywołanie plików zaczynających się od „BRS_” nie wymaga uwierzytelnienia. Otwarcie tego pliku powoduje zapisanie w konfiguracji NVRAM (przeżywającej restart urządzenia!) wartości zmiennej, która sprawia, że wszystkie wywołania do interfejsu administracyjnego omijają proces uwierzytelnienia użytkownika. Oczywiście ustawienie tej zmiennej nie ma żadnego innego wpływu na możliwość korzystania z urządzenia. Amen.
Błąd znajduje się co najmniej w urządzeniu WNDR3700v4 (oprogramowanie 1.0.1.32) oraz, co odkryto niezależnie kilka miesięcy wcześniej, także w ruterze WNDR4700 (oprogramowanie V1.0.0.34).
Komentarze
Uff, dobrze że mam Tomato:) na Netgear:)
Kto ten pisze taki soft? Student na 1 roku bardziej ogarnia. Chyba pani Bożenka-od-miotły po godzinach jak informatyków wywieje hobbystycznie pisze soft
Chyba dawno temu studiowałeś, obecnie student 1.roku nie jest w stanie napisać Hello Worlda w PHP ;)
Coraz więcej comingoutów backdoorów do przeróżnych marek routerów.
Linksys E900 nie ma funkcji – wyloguj i co wtedy ? :)