CVE-2026-116794
WysokieCVSS 8.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 5 - wyżej niż 5% wszystkich znanych CVE
Streszczenie
W bibliotece russh ścieżka Connection::try_sign serwera agenta SSH rozpoznaje SSH_AGENT_CONSTRAIN_CONFIRM, ale zwraca zaszyty wynik sukcesu zamiast wywołać Agent::confirm. Proces mający dostęp do gniazda agenta, w tym zdalna strona przekierowanego agenta, może użyć klucza dodanego przez ssh-add -c bez wymaganego zatwierdzenia i uwierzytelnić się lub podpisać dane jako użytkownik. Problem naprawiono w wersji 0.65.0.
Ocena ryzyka
Obejście polityki zatwierdzania użycia klucza SSH, umożliwiające nieautoryzowane uwierzytelnienie lub podpisywanie danych w imieniu użytkownika. Ryzyko dotyczy aplikacji korzystających z wbudowanego serwera agenta russh z niestandardowym Agent::confirm.
Rekomendacja
Zaktualizuj russh do wersji 0.65.0 lub nowszej. Do czasu aktualizacji rozważ przeniesienie logiki zatwierdzania do hooka Agent::confirm_request, który pozostaje skuteczny.
Inne podatności w russh
Zobacz wszystkie- CVE-2026-102822Niskie
Russh to biblioteka klienta i serwera SSH w języku Rust. W wersjach przed 0.63.1 połączenie skonfigurowane do zezwalania na mac=none może wynegocjować ten tryb z szyfrem blokowym CTR lub CBC wymagającym MAC, ponieważ logika wyboru sprawdza needs_mac() tylko wtedy, gdy wybór MAC zawiedzie. Zdalny peer może następnie wysłać pakiet o odszyfrowanej długości zero, powodując w russh/src/cipher/mod.rs zmniejszenie wcześniej odczytanego bloku przed indeksowaniem buffer.buffer[16..], co prowadzi do paniki i zakończenia zadania połączenia.
- CVE-2026-116774Średnie
W bibliotece russh (Rust SSH) od wersji 0.60.0 do 0.65.0 parsowanie otwarcia kanału akceptuje zadeklarowany przez drugą stronę maximum_packet_size równy zero i przekazuje go do ChannelTx::poll_writable. Asynchroniczne ścieżki zapisu pozostają w stanie oczekiwania na zawsze, co pozwala uwierzytelnionemu klientowi zablokować zapisy serwera, a złośliwemu serwerowi — zapisy klienta.
- CVE-2026-116773Średnie
W bibliotece russh przed wersją 0.65.0 ścieżka Session::process_packet w kliencie akceptuje przed uwierzytelnieniem powtarzane pakiety z prywatnym numerem msg::EXT_INFO = 7. Funkcja handle_ext_info dodaje każdą nazwę rozszerzenia do wektora received_extensions bez czyszczenia, deduplikacji ani ograniczenia, co prowadzi do stopniowego wyczerpania pamięci klienta.
- CVE-2026-116696Niskie
Biblioteka russh przed wersją 0.65.0 w funkcji russh::keys::agent::server::serve akceptuje powtarzające się rekordy SSH_AGENT_CONSTRAIN_CONFIRM podczas dodawania klucza i dołącza każdy rekord Constraint::Confirm do wektora ograniczeń klucza bez limitu liczby ani pamięci. Proces mogący połączyć się z gniazdem agenta, w tym zdalna strona sesji przekazanego agenta, może wielokrotnie dodawać klucze z ograniczeniami i powodować odnawialny wzrost zużycia pamięci trwający przez cały czas życia procesu, ponieważ klucze bez ograniczenia czasu życia nie wygasają. Problem naprawiono w wersji 0.65.0.
- CVE-2026-111061Średnie
W bibliotece russh przed 0.64.1 serwer agenta tworzy osobne długotrwałe zadanie dla każdego rekordu SSH_AGENT_CONSTRAIN_LIFETIME w żądaniu dodania klucza z ograniczeniami. Pętla akceptuje powtarzające się rekordy, klonuje blob klucza do każdego zadania i nie wycofuje zadań, gdy późniejsze parsowanie ograniczeń zawiedzie, co pozwala atakującemu wyczerpać pamięć i zadania.
- CVE-2026-102825Niskie
Russh to biblioteka klienta i serwera SSH w języku Rust. W wersjach przed 0.62.6 ścieżka USERAUTH_REQUEST osiągana z server::run_stream w russh/src/server/encrypted.rs zwiększa licznik self.common.auth_attempts, ale nigdy nie porównuje go z server::Config.max_auth_attempts. Nieuwierzytelniony zdalny klient może kontynuować wysyłanie żądań uwierzytelnienia na jednym połączeniu ponad skonfigurowany limit, omijając politykę ograniczania prób i zwiększając szansę na zgadywanie online oraz obciążenie backendu uwierzytelniania.
- CVE-2026-102824Średnie
Russh to biblioteka klienta i serwera SSH w języku Rust. Przed wersją 0.63.0 implementacja hybrydowego ML-KEM 768 i X25519 w russh/src/kex/hybrid_mlkem.rs akceptuje 32-bajtowy klucz publiczny X25519 równy zeru od peera, zarówno w server_dh, jak i compute_shared_secret, wymuszając zerowy wkład X25519 do połączonego wspólnego sekretu. Złośliwy peer SSH może sprawić, że połączony sekret będzie zależał tylko od ML-KEM, co niweczy zamierzoną ochronę awaryjną hybrydowej wymiany, jeśli ML-KEM zostanie później osłabiony. Problem został naprawiony w wersji 0.63.0.
- CVE-2026-102823Wysokie
Biblioteka Russh przed wersją 0.63.1 w funkcji client_read_authenticated przekazuje zdarzenia kanału (CHANNEL_DATA, CHANNEL_EXTENDED_DATA, CHANNEL_EOF, CHANNEL_CLOSE, CHANNEL_OPEN_FAILURE, CHANNEL_SUCCESS, CHANNEL_FAILURE oraz podtypy CHANNEL_REQUEST: exit-status, exit-signal, xon-xoff) do publicznych callbacków bez potwierdzenia, że ChannelId należy do kanału otwartego przez klienta. Złośliwy serwer SSH może wysyłać zdarzenia cyklu życia dla przewidzianych, nieotwartych lub zwolnionych identyfikatorów kanałów, powodując paniki aplikacji lub uszkodzenie śledzenia zakończenia poleceń i kodów wyjścia.
- CVE-2026-102821Średnie
Russh to biblioteka klienta i serwera SSH w języku Rust. Przed wersją 0.63.2 uwierzytelniony zdalny peer może wysłać SSH_MSG_KEXINIT bez wymaganego SSH_MSG_KEX_ECDH_INIT, a następnie zalać serwer komunikatami SSH_MSG_CHANNEL_OPEN, podczas gdy SessionKexState::InProgress uniemożliwia opróżnienie priority_receiver w russh/src/server/session.rs. Serwer kontynuuje przetwarzanie danych wejściowych z sieci i umieszcza odpowiedź ChannelOpenReply dla każdego żądania w nieograniczonej kolejce, co pozwala jednej sesji na zwiększanie pamięci aż do zakończenia procesu. Problem został naprawiony w wersji 0.63.2.
- CVE-2026-73489Średnie
Russh przed wersją 0.62.4 ma podatność na odmowę usługi. Uwierzytelniony klient SSH może wysłać żądanie kanału pty-req z więcej niż 130 rekordami trybu terminala. Parser w russh/src/server/encrypted.rs przechowuje tryby w stałej tablicy 130-elementowej, ale kontynuuje zwiększanie licznika, co prowadzi do wyjścia poza zakres i paniki przed uruchomieniem handlera pty_request.
Oryginalny opis (angielski, źródło NVD)
russh is a Rust SSH client and server library that includes an SSH agent protocol implementation. From 0.50.0-beta.12 until 0.65.0, the agent server's Connection::try_sign path in russh/src/keys/agent/server.rs recognizes SSH_AGENT_CONSTRAIN_CONFIRM but returns a hard-coded successful result instead of calling Agent::confirm. In applications that override Agent::confirm to require user approval or another policy check, a process that can reach the agent socket, including the remote side of a forwarded agent, can use a key added through ssh-add -c without that check and can authenticate or sign data as the user while the key remains loaded. The separate Agent::confirm_request hook still runs for every signing request, so checks implemented there remain effective, and implementations that retain the default always-successful Agent::confirm do not lose an approval check through this regression. This issue is fixed in version 0.65.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

