Grupa badawcza z Uniwersytetu Ruhry w Bochum (Niemcy) zaprezentowała nową technikę ataku MITM na SSH — Terrapin, wykorzystującą podatność (CVE-2023-48795) w tym protokole. Atakujący, który może przeprowadzić atak MITM, ma możliwość w trakcie negocjacji połączenia zablokować wysyłanie wiadomości z ustawieniem rozszerzeń protokołu, co prowadzi do obniżenia poziomu bezpieczeństwa połączenia. Prototyp narzędzi do przeprowadzenia ataku opublikowany jest na GitHubie.
W kontekście OpenSSH luka ta na przykład pozwala na przełączenie połączenia na mniej zabezpieczone algorytmy uwierzytelniania oraz na dezaktywację ochrony przed atakami pośrednimi, które odtwarzają wejście poprzez analizę opóźnień między naciśnięciami klawiszy na klawiaturze. W bibliotece Python AsyncSSH, w połączeniu z luką (CVE-2023-46446) w implementacji wewnętrznego automatu stanów, atak Terrapin pozwala na wtykanie się w sesję SSH.
Luka dotyczy wszystkich implementacji SSH, które wspierają ChaCha20-Poly1305 lub szyfry w trybie CBC w połączeniu z trybem ETM (Encrypt-then-MAC). Na przykład, podobne możliwości dostępne są w OpenSSH od ponad 10 lat. Luka została zablokowana w dzisiejszym wydaniu OpenSSH 9.6 oraz w aktualizacjach PuTTY 0.80, libssh 0.10.6/0.9.8 i AsyncSSH 2.14.2. W Dropbear SSH poprawka została już dodana do kodu, ale nowe wydanie na razie nie zostało wydane.
Luka jest spowodowana tym, że atakujący, kontrolujący ruch połączenia (na przykład właściciel złośliwego punktu dostępowego), może zmodyfikować numery porządkowe pakietów w trakcie negocjacji połączenia i w ten sposób niezauważalnie usunąć dowolną liczbę komunikatów SSH wysyłanych przez klienta lub serwerem. W szczególności atakujący może usunąć komunikaty SSH_MSG_EXT_INFO, które są używane do ustawiania wykorzystywanych rozszerzeń protokołu. Aby druga strona nie zauważyła zniknięcia pakietu z powodu przerwy w numerach porządkowych, atakujący inicjuje wysyłanie fikcyjnego pakietu z tym samym numerem porządkowym, co usunięty pakiet. Fikcyjny pakiet zawiera komunikat z flagą SSH_MSG_IGNORE, który jest ignorowany podczas przetwarzania.

Atak nie może być przeprowadzona przy użyciu szyfrów strumieniowych i CTR, ponieważ naruszenie integralności zostanie wykryte na poziomie aplikacji. W praktyce atakowi podlega tylko szyfr ChaCha20-Poly1305 (chacha20-poly1305@openssh.com), w którym stan śledzenia oparty jest wyłącznie na numerach kolejnych wiadomości oraz na połączeniu z trybem Encrypt-Then-MAC (*-etm@openssh.com) i szyfrach CBC.
W OpenSSH 9.6 oraz innych implementacjach w celu zablokowania ataku wprowadzono rozszerzenie protokołu „strict KEX”, które automatycznie włącza się w przypadku wsparcia ze strony serwera i klienta. Rozszerzenie kończy połączenie w przypadku otrzymania jakichkolwiek nietypowych lub zbędnych wiadomości (na przykład z flagą SSH_MSG_IGNORE lub SSH2_MSG_DEBUG), które zostały odebrane w trakcie negocjacji połączenia, a także resetuje licznik MAC (Message Authentication Code) po zakończeniu każdej wymiany kluczy.
Źródło: opennet.ru
