CVE-2026-116785
KrytyczneCVSS 9.1Streszczenie
FreeSWITCH przed wersją 1.11.2 ma błąd w funkcji ws_read_frame(), która dekoduje 64-bitową długość ładunku WebSocket z 32-bitową zamianą bajtów i zawęża wynik do typu signed. Wartość, której dolne słowo staje się ujemne, omija sprawdzenie rozmiaru i jest reinterpretowana jako ogromna liczba unsigned, powodując nadpisanie pamięci poza buforem odbioru 64 KiB. Może to uszkodzić wskaźniki połączeń i spowodować awarię FreeSWITCH, kończąc wszystkie sesje.
Ocena ryzyka
Podatność może być wykorzystana przez klienta zdolnego do ukończenia uaktualnienia WebSocket na endpoincie mod_xml_rpc, powodując awarię usługi (DoS) i utratę wszystkich aktywnych sesji; chociaż zdalne wykonanie kodu nie zostało udowodnione, ryzyko poważnych zakłóceń jest wysokie.
Rekomendacja
Należy zaktualizować FreeSWITCH do wersji 1.11.2 lub nowszej; jeśli to możliwe, wyłączyć mod_xml_rpc i endpoint WebSocket, które są domyślnie wyłączone.
Inne podatności w FreeSWITCH
Zobacz wszystkie- CVE-2026-116789Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja dtls_state_setup() porównuje certyfikat peera z odciskiem SDP a=fingerprint tylko gdy FreeSWITCH jest klientem DTLS, a nie gdy pełni rolę serwera. Nieuwierzytelniony peer może ukończyć handshake DTLS-SRTP z niepowiązanym certyfikatem, uzyskać klucze SRTP i wstrzykiwać media.
- CVE-2026-116788Wysokie
W FreeSWITCH przed wersją 1.11.2 w switch_xml_decode() występuje niedomiar liczby całkowitej powodujący zbyt małą alokację sterty, gdy dokument XML deklaruje encję z pustą wartością zastępczą. Kolejne kopiowanie przepełnia bufor.
- CVE-2026-116787Wysokie
W FreeSWITCH przed wersją 1.11.2 mod_event_socket używa nieuwierzytelnionej wartości Content-Length bezpośrednio jako rozmiaru alokacji treści wiadomości Event Socket. Wartości ujemne lub bardzo duże mogą przepełnić obliczenia terminatora lub wymusić błąd alokacji kończący proces.
- CVE-2026-116786Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja sofia_handle_sip_i_refer() umieszcza surowe parametry i nagłówki URI Refer-To w bloku zmiennych kanału przekazywanym do switch_ivr_originate(). Przecinek w wartości kontrolowanej przez atakującego jest traktowany jako separator zmiennych, co pozwala uwierzytelnionemu dzwoniącemu wstrzyknąć dowolne zmienne do nowo tworzonego legu.
- CVE-2026-116784Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja process_rtcp_report() używała zadeklarowanej w pakiecie RTPFB NACK długości nagłówka RTCP jako granicy pętli przetwarzania wpisów zwrotnych, zamiast zweryfikowanej wcześniej długości datagramu. Krótki pakiet z zawyżoną deklaracją mógł powodować odczyty daleko poza buforem odbiorczym o stałym rozmiarze 16 KiB. Każdy peer mogący wysłać RTCP do aktywnej rozmowy wideo może wykorzystać tę podatność.
- CVE-2026-116783Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja udptl_rx_packet() używała kontrolowanej przez peera liczby wpisów FEC bezpośrednio do wypełniania pięcioelementowych tablic FEC w sesji T.38 mod_spandsp. Większa liczba powodowała zapis danych kontrolowanych przez nadawcę poza tymi tablicami i utrwalenie zawyżonej liczby do późniejszego etapu rekonstrukcji. Każdy peer mogący dostarczyć UDPTL do ustanowionej sesji faksu T.38 może wykorzystać tę podatność.
- CVE-2026-116782Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja rtmp_i_connect() przekazywała pierwszy argument połączenia RTMP do amf0_object_get() bez sprawdzenia, czy wartość AMF jest obiektem. Ciąg znaków lub liczba w miejscu obiektu AMF powodowały interpretację bajtów unii z wiadomości jako wskaźników do węzłów i ich dereferencję. Każdy klient z dostępem sieciowym do włączonego nasłuchu mod_rtmp mógł wysłać zniekształcone polecenie połączenia przed logowaniem; moduł jest domyślnie wyłączony w standardowej kompilacji i konfiguracji.
- CVE-2026-116570Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja http_directory_auth() odtwarzała oczekiwane poświadczenia user@domain:password i kodowała je base64 do bufora o rozmiarze 80 bajtów przy użyciu kodera bez argumentu długości wyjściowej. Poświadczenie dłuższe niż 57 znaków powodowało przepełnienie stosu przed porównaniem dostarczonego hasła HTTP Basic. Nieuwierzytelniony klient musiał jedynie wskazać istniejącego użytkownika katalogu na wystawionym nasłuchu HTTP mod_xml_rpc; moduł jest kompilowany, ale nie ładowany w standardowej konfiguracji.
- CVE-2026-116569Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja msrp_parse_buffer() odejmowała ramkowanie separatora od kontrolowanego przez peera krótkiego segmentu, którego zakres bajtów MSRP kończył się na *, bez uprzedniego sprawdzenia, czy segment jest wystarczająco długi. Wynik bez znaku zawijał się w pobliżu SIZE_MAX i trafiał do switch_msrp_msg_set_payload() zarówno jako rozmiar alokacji, jak i długość memcpy, a powiązana arytmetyka wskaźników mogła odczytywać przed buforem odbiorczym. Nasłuch jest domyślnie wyłączony w msrp.conf.xml, ale każde wdrożenie z włączonym portem MSRP TCP lub TLS przetwarza to ramkowanie przed uwierzytelnieniem.
- CVE-2026-116568Wysokie
W FreeSWITCH przed wersją 1.11.2 funkcja rtmp_rtmp2rtpH264() ufała prefiksowi długości każdej przychodzącej jednostki NAL H.264 bez sprawdzenia go względem pozostałych bajtów w wiadomości RTMP. Zawyżona zadeklarowana jednostka powodowała niedomiar licznika pozostałych bajtów bez znaku i przesunięcie parsera poza bufor odbiorczy, gdzie kolejny odczyt prefiksu długości mógł spowodować awarię procesu. Podatność dotyczy wdrożeń, które kompilują i ładują mod_rtmp oraz akceptują sesje rozmów wideo, zwykle na porcie TCP 1935; ustanowienie połączenia wymaga logowania do katalogu, gdy auth-calls jest true, natomiast nie wymaga poświadczeń, gdy auth-calls jest nieobecne lub false.
Oryginalny opis (angielski, źródło NVD)
FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a software implementation that runs on any commodity hardware. Prior to 1.11.2, ws_read_frame() decoded a WebSocket frame's 64-bit extended payload length with a 32-bit byte swap and narrowed the result into a signed length. A value whose surviving low word became negative bypassed the signed size check and was reinterpreted as an enormous unsigned count, causing client bytes to overwrite memory beyond the 64 KiB receive buffer. Any client completing a /socket WebSocket upgrade on an enabled mod_xml_rpc endpoint reached the parser before HTTP authentication; both the module and WebSocket endpoint are disabled by default. The heap overwrite can corrupt connection pointers and crash FreeSWITCH, ending every concurrent session, although remote code execution has not been demonstrated. This issue is fixed in version 1.11.2.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

