Powrót luk bezpieczeństwa w SCP po 36 latach
Napisał: Patryk Krawaczyński
16/01/2019 w Bezpieczeństwo Brak komentarzy. (artykuł nr 676, ilość słów: 739)
H
arry Sintonen odkrył zestaw 36-letnich w implementacji protokołu Secure Copy Protocol (SCP) wielu aplikacji klienckich. Luki te mogą zostać wykorzystane przez złośliwe serwery do nieautoryzowanego nadpisania dowolnych plików w katalogu docelowym klienta SCP. Dla przypomnienia: SCP, zwany również “bezpieczną kopią”, jest protokołem sieciowym, który umożliwia użytkownikom bezpieczne przesyłanie plików pomiędzy lokalnym, a zdalnym hostem przy użyciu protokołu RCP (ang. Remote Copy Protocol) oraz protokołu SSH (ang. Secure Shell. Innymi słowy, SCP (pochodzący z 1983 roku) jest bezpieczną wersją RCP, która wykorzystuje uwierzytelnianie i szyfrowanie protokołu SSH do przesyłania plików między serwerem, a klientem.
Odkryte przez Harry’ego (aktualnie pracujący jako starszy konsultant bezpieczeństwa firmy F-Secure) luki występują z powodu słabych walidacji przeprowadzanych przez klientów SCP, które mogą zostać nadużyte przez złośliwe serwery lub pośredników w ataku typu “man-in-the-middle” (MiTM) w celu wrzucenia lub nadpisania dowolnych plików w systemie klienta.
“Wielu klientów SCP nie sprawdza, czy obiekty zwrócone przez serwer SCP pasują do tych, o które prosiło. Problem ten pochodzi jeszcze z RCP z 1983 roku, na którym opiera się SCP. Odrębny błąd w kliencie pozwala na arbitralną zmianę atrybutów katalogu docelowego. I na koniec dwie luki w zabezpieczeniach klientów mogą umożliwić serwerowi fałszowanie danych wyjściowych klienta.” – wyjaśnił Sintonen.
W określonym scenariuszu ataku, serwer kontrolowany przez atakującego może wrzucić np. specjalnie spreparowany plik .bash_aliases
/ .bash_profile
do katalogu domowego ofiary, co spowoduje, że system wykona złośliwe polecenia w jego obrębie, gdy tylko użytkownik Linuksa uruchomi ponownie nową powłokę. Nagranie demonstrujące ten scenariusz możemy znaleźć tutaj. Transfer dodatkowych plików jest ukryty przez wysyłanie sekwencji sterujących ANSI na stderr.
Zgodnie z poradnikiem wymienione luki zostały odkryte w sierpniu zeszłego roku, a następnie odpowiedzialnie ujawnione developerom wrażliwych klientów: OpenSSH, PuTTY i WinSCP.
- 1. CWE-20: nieprawidłowe sprawdzanie nazwy katalogu przez klienta SCP [CVE-2018-20685] – klient SCP umożliwia serwerowi modyfikowanie uprawnień katalogu docelowego za pomocą pustego (
"D0777 0 \n"
) lub jako kropki ("D0777 0 .\n)
nazwy katalogu. - 2. CWE-20: brak sprawdzania poprawności nazwy otrzymanego obiektu przez klienta SCP [CVE-2019-6111] – ze względu na implementację SCP pochodzącą pierwotnie od RCP w 1983 roku to serwer wybiera, które pliki / katalogi są wysyłane do klienta. Jednak klient SCP tylko pobieżnie sprawdza poprawność zwróconej nazwy obiektu (głównie zapobiega atakom Directory Traversal). Dzięki czemu złośliwy serwer SCP może nadpisywać dowolne pliki w katalogu docelowym klienta SCP. Jeśli operacja jest wykonywana rekursywnie (
-r
) serwer może manipulować również podkatalogami np. nadpisać.ssh/authorized_keys
. Ta sama luka w zabezpieczeniach klienta WinSCP została oznaczona CVE-2018-20684. - 3. CWE-451: fałszowanie klienta SCP przez nazwę obiektu [CVE-2019-6109] – z powodu braku kodowania znaków na ekranie postępu kopiowania można użyć nazwy obiektu do manipulowania danymi wyjściowymi klienta. Na przykład zastosować kody ANSI, aby ukryć dodatkowo przesyłane pliki.
- 4. CWE-451: fałszowanie klienta SCP przez stderr [CVE-2019-6110] – z powodu akceptacji i wyświetlania dowolnych danych na stderr z serwera SCP przez klienta – złośliwy serwer może manipulować danymi wyjściowymi klienta. Na przykład zastosować kody ANSI, aby ukryć dodatkowo przesyłane pliki.
Ponieważ luki mają wpływ na implementację protokołu SCP – dotyczy to wszystkich aplikacji klienckich SCP, w tym OpenSSH, PuTTY i WinSCP, które używają SCP jako standardu do przesyłania plików. Następujące pakiety oprogramowania mają niektóre lub wszystkie błędy:
ver #1 #2 #3 #4 OpenSSH scp < =7.9 x x x x PuTTY PSCP ? - - x x WinSCP scp mode <=5.13 - x - -
CVE-2018-20685 zostało załatane w listopadzie, jeśli chodzi o implementację protokołu SCP przez OpenSSH. Niestety poprawka nie została jeszcze oficjalnie wydana. Pozostałe trzy luki pozostają niezałatane w wersji 7.9 - wydanej w październiku. Jeśli obawiamy się możliwości trafienia na złośliwy serwer SCP możemy skonfigurować swoje systemy, aby używały SFTP lub nałożyć przygotowaną przez Harry'ego łatkę.