
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
W bibliotece libsimaka pakietu strongSwan ujawniono krytyczną podatność typu heap buffer overflow, powiązaną z nieprawidłowym parsowaniem atrybutów EAP-SIM oraz EAP-AKA. Problem wynika z błędnej obsługi przypadku, w którym pole długości atrybutu przyjmuje wartość zero. Taka sytuacja prowadzi do underflow podczas obliczania rozmiaru danych, a następnie do użycia błędnej wartości w operacjach na pamięci.
W praktyce oznacza to, że odpowiednio spreparowany pakiet może doprowadzić do zapisu poza granicami zaalokowanego bufora. Skutkiem może być awaria procesu strongSwan, a w określonych warunkach również bardziej zaawansowana eksploatacja błędu pamięci.
W skrócie
- Podatność dotyczy strongSwan w wersjach do 5.9.13.
- Warunkiem ekspozycji jest kompilacja z obsługą wtyczek eap-sim lub eap-aka.
- Błąd występuje przed uwierzytelnieniem, co zwiększa jego znaczenie operacyjne.
- Przyczyną jest brak odrzucania atrybutów EAP-SIM/AKA o zerowej długości.
- Producent opublikował poprawkę eliminującą wadliwy przypadek już na etapie parsowania.
Kontekst / historia
strongSwan to jedno z najczęściej stosowanych rozwiązań VPN i IPsec w środowiskach serwerowych, urządzeniach sieciowych oraz systemach wbudowanych. Moduły EAP-SIM i EAP-AKA są szczególnie istotne w scenariuszach integracji z mechanizmami uwierzytelniania opartymi na kartach SIM i infrastrukturze operatorskiej.
Opisana luka została ujawniona jako CVE-2026-35330. Publicznie dostępne materiały wskazują, że problem został potwierdzony na upstreamowej kompilacji strongSwan 5.9.13 bez dodatkowych poprawek dystrybucyjnych. Udostępniony proof of concept pokazuje, że do wywołania błędu wystarczy niewielki, specjalnie przygotowany ładunek EAP-SIM zawierający atrybut z długością ustawioną na zero.
Analiza techniczna
Źródło podatności znajduje się w funkcji odpowiedzialnej za parsowanie atrybutów wiadomości EAP-SIM/AKA. Mechanizm oblicza długość danych atrybutu na podstawie pola długości kodowanego w jednostkach 32-bitowych, a następnie odejmuje rozmiar nagłówka. Dla poprawnych danych takie podejście jest standardowe i pozwala prawidłowo wyodrębnić część użytkową atrybutu.
Problem pojawia się wtedy, gdy pole długości ma wartość zero. W takiej sytuacji kontrola wejścia nie zatrzymuje nieprawidłowego przypadku wystarczająco wcześnie. Kolejne obliczenie powoduje underflow, przez co z perspektywy typu bez znaku powstaje bardzo duża wartość logiczna. Taki rozmiar trafia następnie do funkcji odpowiedzialnych za alokację pamięci i kopiowanie danych.
W efekcie dochodzi do niespójności między rozmiarem zaalokowanego bufora a zakresem kopiowanych danych. Publiczny materiał demonstracyjny pokazuje scenariusz, w którym mała alokacja kończy się operacją zapisu poza granicami sterty. W środowiskach testowych z AddressSanitizer objawia się to jako heap-buffer-overflow, natomiast w typowym wdrożeniu może zakończyć się błędem segmentacji i przerwaniem działania procesu.
Znaczenie błędu zwiększa fakt, że ścieżka wykonania jest osiągalna przed zakończeniem uwierzytelnienia, w ramach przetwarzania komunikacji IKE_AUTH. Atakujący nie musi więc dysponować ważnymi poświadczeniami, aby dostarczyć dane wejściowe do podatnego parsera.
Opublikowana poprawka wprowadza jawne odrzucanie atrybutów EAP-SIM i EAP-AKA o zerowej długości. Dzięki temu wadliwy przypadek jest blokowany przed wykonaniem niebezpiecznych obliczeń i dalszych operacji na pamięci.
Konsekwencje / ryzyko
Najbardziej prawdopodobnym skutkiem podatności jest zdalny denial of service, czyli możliwość doprowadzenia do awarii procesu obsługującego połączenia VPN. W zależności od architektury środowiska może to oznaczać utrudnienia w zestawianiu nowych sesji, chwilową niedostępność tuneli lub konieczność restartu usługi.
Poziom ryzyka rośnie tam, gdzie moduły EAP-SIM lub EAP-AKA są aktywnie wykorzystywane. Jeżeli organizacja nie używa tych funkcji albo nie zostały one uwzględnione podczas kompilacji, powierzchnia ataku może być istotnie mniejsza. Nie zmienia to faktu, że każda luka typu out-of-bounds write powinna być traktowana poważnie, ponieważ potencjał skutków wykracza poza sam crash procesu.
- ryzyko przerwania działania usługi VPN,
- możliwość zdalnego wywołania błędu bez wcześniejszego uwierzytelnienia,
- potencjalny wpływ na dostępność połączeń IPsec,
- trudny do pełnego wykluczenia scenariusz dalszej eksploatacji błędu pamięci.
Rekomendacje
Administratorzy powinni w pierwszej kolejności sprawdzić, czy ich instancje strongSwan korzystają z wersji 5.9.13 lub starszych oraz czy zostały zbudowane z obsługą eap-sim albo eap-aka. Następnie należy możliwie szybko wdrożyć poprawkę producenta lub zaktualizować pakiety do wersji zawierającej fix.
- przeprowadzić inwentaryzację wdrożeń strongSwan i aktywnych wtyczek,
- potwierdzić, czy EAP-SIM/EAP-AKA są rzeczywiście wymagane biznesowo,
- wyłączyć nieużywane moduły uwierzytelniania, aby ograniczyć powierzchnię ataku,
- monitorować logi pod kątem błędów parsowania, crashy i restartów procesu,
- stosować mechanizmy hardeningu, takie jak ASLR i zabezpieczenia kompilatora,
- testować poprawki w środowisku staging przed wdrożeniem produkcyjnym.
Z perspektywy zespołów SOC i IR warto także dodać reguły detekcji anomalii związanych z nieudanymi negocjacjami IKE_AUTH oraz nagłymi restartami usług IPsec. Dodatkowo należy zweryfikować, czy podatna funkcjonalność nie jest eksponowana do niezaufanych segmentów sieci.
Podsumowanie
CVE-2026-35330 to poważna podatność pamięciowa w strongSwan, wynikająca z błędnej obsługi zerowej długości atrybutów EAP-SIM/AKA w bibliotece libsimaka. Błąd ma charakter pre-auth i może zostać wywołany zdalnie przy użyciu spreparowanego pakietu, prowadząc co najmniej do awarii procesu. Najważniejsze działania obronne obejmują szybką identyfikację podatnych wdrożeń, aktualizację do wersji z poprawką oraz ograniczenie użycia niepotrzebnych modułów EAP.