
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
PJPROJECT to popularny zestaw bibliotek open source wykorzystywany w rozwiązaniach VoIP, SIP i komunikacji czasu rzeczywistego. Podatność oznaczona jako CVE-2026-25994 dotyczy obsługi mechanizmu ICE i wynika z niewystarczającej walidacji długości danych dostarczanych zdalnie w SDP, co może prowadzić do przepełnienia bufora sterty lub stosu.
Problem ma szczególne znaczenie dla środowisk, w których biblioteka przetwarza niezaufane dane sieciowe pochodzące bezpośrednio od zdalnych uczestników sesji. W praktyce oznacza to ryzyko awarii aplikacji korzystających z podatnych wersji PJPROJECT.
W skrócie
- Podatność dotyczy PJPROJECT w wersjach do 2.16 włącznie.
- Wektor ataku wykorzystuje specjalnie przygotowane pole
a=ice-ufragw komunikacie SIP/SDP. - Błąd ujawnia się podczas budowy listy kontrolnej ICE.
- Najbardziej prawdopodobnym skutkiem jest zdalny denial of service.
- W określonych warunkach nie można wykluczyć poważniejszej korupcji pamięci.
- Publiczny proof-of-concept pokazuje awarię procesu
pjsuapo odebraniu złośliwego żądania INVITE.
Kontekst / historia
PJPROJECT od lat pozostaje jednym z ważniejszych komponentów wykorzystywanych w aplikacjach softphone, bramkach VoIP, urządzeniach embedded oraz platformach unified communications. Jego popularność wynika z niewielkiego narzutu, szerokiej przenośności oraz obsługi kluczowych technologii, takich jak SIP, RTP, STUN, TURN i ICE.
Z punktu widzenia bezpieczeństwa najbardziej wrażliwe pozostają ścieżki kodu analizujące dane wejściowe z sieci, zwłaszcza atrybuty SDP wykorzystywane podczas negocjacji parametrów połączenia. Upublicznienie informacji o CVE-2026-25994 wraz z materiałem PoC obniża próg wejścia dla potencjalnych atakujących i zwiększa ryzyko szybkiego wykorzystania błędu w środowiskach produkcyjnych.
Analiza techniczna
Istota problemu sprowadza się do niebezpiecznego składania nazwy użytkownika ICE na podstawie zdalnego identyfikatora rem_ufrag oraz lokalnej wartości sesyjnej. W opisie technicznym wskazano funkcję pj_ice_sess_create_check_list(), w której używano bufora o stałym rozmiarze 128 bajtów.
Do tego bufora kopiowana była wartość zdalnego a=ice-ufrag, a następnie dołączano separator i lokalny identyfikator rx_ufrag. Jeśli wartość dostarczona przez zdalnego uczestnika była nadmiernie długa, dochodziło do zapisu poza granicami przydzielonej pamięci. Taki scenariusz prowadzi do klasycznej korupcji pamięci, która może zakończyć się awarią procesu.
Publiczny proof-of-concept demonstruje wykorzystanie komunikatu SIP INVITE zawierającego SDP z bardzo długim polem a=ice-ufrag oraz atrybutem a=ice-pwd. Celem jest doprowadzenie aplikacji do wejścia w podatną ścieżkę kodu i wywołanie błędu podczas tworzenia listy kontrolnej ICE.
Skuteczność ataku zależy od kilku czynników technicznych:
- czy ICE jest aktywnie używane w danej aplikacji,
- czy interfejs SIP jest osiągalny z niezaufanej sieci,
- jak biblioteka została skompilowana,
- czy system korzysta z mechanizmów ochrony pamięci, takich jak ASLR, NX i stack canaries,
- czy aplikacja wdraża dodatkową walidację SDP przed przekazaniem danych do PJPROJECT.
Z analizy poprawki wynika, że nowsze wydania wprowadzają kontrolę długości danych wejściowych, co pozwala odrzucić nieprawidłowe wartości przed wykonaniem niebezpiecznych operacji kopiowania.
Konsekwencje / ryzyko
Najbardziej bezpośrednim skutkiem podatności jest zdalne wywołanie awarii klienta SIP, usługi VoIP lub innego produktu opartego na podatnej wersji biblioteki. W praktyce może to oznaczać przerwanie obsługi połączeń, niedostępność usług głosowych, restart procesu lub degradację działania systemu komunikacyjnego.
Ryzyko rośnie w środowiskach wystawionych do Internetu, szczególnie tam, gdzie sygnalizacja SIP jest publicznie dostępna. W organizacjach enterprise oraz u operatorów nawet scenariusz ograniczony do denial of service może mieć istotny wpływ biznesowy, ponieważ dotyka krytycznych kanałów komunikacji.
Choć publicznie opisany scenariusz koncentruje się na awarii procesu, każda podatność prowadząca do korupcji pamięci w natywnym kodzie C powinna być traktowana z dużą ostrożnością. W określonych warunkach nie można całkowicie wykluczyć bardziej zaawansowanych skutków, jeśli dalsza analiza exploitability wykaże możliwość kontrolowanego nadpisania pamięci.
Rekomendacje
Organizacje korzystające z PJPROJECT powinny w pierwszej kolejności zidentyfikować wszystkie systemy, produkty i zależności wykorzystujące tę bibliotekę. Następnie należy potwierdzić wersję komponentu i zaplanować aktualizację do wydania zawierającego poprawkę, czyli co najmniej do wersji 2.17 lub równoważnej poprawionej wersji dostarczonej przez producenta rozwiązania.
W celu ograniczenia ryzyka warto wdrożyć następujące działania:
- ograniczyć ekspozycję interfejsów SIP do zaufanych adresów i segmentów sieci,
- włączyć filtrowanie oraz inspekcję ruchu SIP/SDP,
- stosować SBC, mechanizmy normalizacji sygnalizacji lub pośredniczące warstwy ochronne,
- monitorować nietypowo długie wartości pól
ice-ufragiice-pwd, - rejestrować awarie procesów i alertować o nieoczekiwanych restartach usług VoIP,
- przeprowadzić testy regresyjne po aktualizacji, szczególnie w obszarze negocjacji ICE.
Jeśli natychmiastowa aktualizacja nie jest możliwa, warto czasowo ograniczyć dostęp do usługi, rozważyć wyłączenie nieużywanych funkcji związanych z ICE oraz wdrożyć reguły detekcyjne w systemach IDS, SBC lub innych mechanizmach kontroli ruchu sygnalizacyjnego.
Podsumowanie
CVE-2026-25994 pokazuje, że nawet dojrzałe i szeroko stosowane biblioteki komunikacyjne pozostają podatne na klasyczne błędy pamięci, jeśli dane wejściowe z sieci nie są rygorystycznie walidowane. W tym przypadku problem dotyczy obsługi ICE w PJPROJECT do wersji 2.16 i może zostać wywołany przez spreparowane dane SDP przesłane w komunikacji SIP.
Dla organizacji opierających usługi głosowe na tej bibliotece oznacza to realne ryzyko zakłócenia dostępności systemów VoIP. Kluczowe znaczenie mają szybka inwentaryzacja zależności, aktualizacja do poprawionej wersji, ograniczenie ekspozycji usług oraz bieżące monitorowanie anomalii w ruchu sygnalizacyjnym.
Źródła
- Exploit Database — PJPROJECT 2.16 – Heap Bufferoverflow
https://www.exploit-db.com/exploits/52561 - NVD — CVE-2026-25994
https://nvd.nist.gov/vuln/detail/CVE-2026-25994 - PJPROJECT GitHub Repository
https://github.com/pjsip/pjproject