Ninja, małpa, pirat, laser czyli tylna furtka wg Della

dodał 11 marca 2014 o 16:42 w kategorii Wpadki  z tagami:
Ninja, małpa, pirat, laser czyli tylna furtka wg Della

Przedstawiamy prosty przepis, jak trafić do artykułu na Z3S: wystarczy w swoim profesjonalnym produkcie popełnić trywialne błędy, wstawić tylną furtkę z zabawnym hasłem oraz wbudować obejście tylnej furtki na wszelki wypadek. Sukces gwarantowany!

Twórcy oprogramowania wbudowanego w różne urządzenia pewnie nie spodziewali się, że ktokolwiek będzie je kiedyś analizował. Takie przekonanie sprawiało, że zostawiali w nim różne dziwne cuda. Jedne z ciekawszych można znaleźć w profesjonalnym sprzęcie Della.

Poważne urządzenie i proste błędy

Jednym z produktów Della jest urządzenie KACE K1000. Jest to „magiczne pudełko”, które służy do automatyzacji zarządzania sprzętem oraz oprogramowaniem w sieci korporacyjnej. Wykrywanie innych urządzeń, aktualizacja oprogramowania, wymuszanie polityk bezpieczeństwa – bywa przydatne. Kilka dni temu przyjrzał mu się autor serwisu Console Cowboys i znalazł parę prawdziwych perełek.

Zacznijmy od trywialnego błędu typu path traversal. Wywołanie skryptu

z treścią żądania

powoduje pobranie dowolnego pliku, do którego dostęp ma serwer www. Błąd sam w sobie ma umiarkowane konsekwencje – skrypt może wywołać tylko autoryzowany użytkownik. Możliwość odczytu dowolnego pliku jest jednak dobrym początkiem dalszych poszukiwań, szczególnie wtedy, kiedy odwołanie do katalogu powoduje wyliczenie znajdujących się w nim plików.

Ninja, małpa, pirat i laser

Kolejnym znaleziskiem okazał się plik

który, w przeciwieństwie do poprzednika, nie weryfikuje, czy jest wywołany z prawidłowo zalogowanej sesji, a zamiast tego przeprowadza własne sprawdzenie praw użytkownika. Wygląda ono tak:

Zanim jednak przeanalizujemy dokładniej ten fragment, spójrzmy jak liczona jest zmienna checksum:

Zmienna, której wartośc powinna decydować o tym, czy skrypt pozwoli na wgranie własngo pliku na serwer, liczona jest jako funkcja skrótu MD5 z nazwy pliku, identyfikatora urządzenia, adresu MAC oraz soli zaczynającej się od słów ninjamonkeypiratelaser. Ktoś miał niezła fantazję. Ale to oczywiście nie wszystko.

Tylna furtka w tylnej furtce

Obliczenie prawidłowej wartości zmiennej zależy od kilku czynników i prawdopodobnie powodowało problemy, które twórca kodu opisał w komentarzu:

Jak zatem ominąć problem? Zawsze można w kodzie zaszyć dodatkowe obejście! Jeśli spojrzycie na kod paragraf wyżej, znajdziecie tam dodatkowy warunek – jeśli zmienna checksum równa jest SCRAMBLE, to skrypt jest wykonywany.

Teraz już tylko root

Co prawda skrypt kbot_upload.php pozwala na zapisywanie plików w dowolnym miejscu serwera (znowu błąd typu path traversal), to niestety tylko z prawami serwera www. Na szczęście i na to znajdzie się rozwiązanie. Najpierw znajdujemy folder z prawami tworzenia nowych plików (np. /kbox/kboxwww/tmp) a następnie wykorzystujemy plik KSudoClient.class.php, który co prawda nie znajduje się w drzewie plików serwera www, ale pozwala na wykonanie polecenia z uprawnieniami roota. Jeśli chcemy więc by urządzenie Della połączyło się z naszym serwerem, udostępniając nam powłokę z uprawnieniami roota, wystarczy wydać następujące polecenie:

Teraz wystarczy już tylko wywołać plik

by otrzymać upragnionego roota. Na GitHubie znajdziecie skrypt automatyzujący całą operację. Na zakończenie oklaski dla autorów oprogramowania oraz zrzut ekranu pokazujący działanie skryptu w praktyce.

Działanie skryptu (źródło: Console Cowboys)

Działanie skryptu (źródło: Console Cowboys)