W pamięci i na stercie – SonicWall SMA100 dziurawy niczym z ery kodu C (CVE-2025-40596, -40597, -40598)

kapitanhack.pl 1 dzień temu

Przypadek, który dzisiaj opiszemy, przypomina, iż bezpieczeństwo w urządzeniach sieciowych nie może być jedynie marketingowym hasłem – błędy w parsowaniu HTTP to wciąż realne zagrożenie. Wydaje się, iż w 2025 roku powinniśmy czuć się bezpiecznie – błędy w przetwarzaniu nagłówków HTTP typu „pre‑auth” powinny należeć do przeszłości. A jednak… SonicWall SMA100 pokazuje, iż dzisiaj także można trafić na prymitywne przepełnienia buforów w urządzeniach brzegowych. Na blogu watchTowr Labs opisane zostały trzy krytyczne luki (CVE-2025-40596, -40597 i -40598), wszystkie obecne w firmware SMA100 w wersji 10.2.1.15.

Dlaczego to ważne?

  • Pre‑auth atak możliwy z Internetu – brak wymaganej autoryzacji.
  • Buffer overflow na stosie i heapie – potencjalne eskalacje.
  • XSS także w strefie pre‑auth – choć mniejszy poziom zagrożenia, przez cały czas możliwy do eksploitcji.
  • Firmware 10.2.1.15 – każda instalacja tej wersji jest podatna.

CVE-2025-40596 – przepełnienie stosu przed uwierzytelnieniem

Analiza binarki httpd (część EasyAccess obsługująca SSL-VPN) ujawniła prosty, ale destrukcyjny błąd – użycie sscanf bez ograniczeń w stosie pre‑auth. URI zaczynające się od /__api__/ są porównywane przez strncasecmp, a następnie sscanf kopiujący dane do 0x800‑bajtowego bufora na stosie, bez żadnej kontroli długości.

W efekcie możliwy jest do przeprowadzenia jedno‑linijkowy exploit w Pythonie:

import requests requests.get("https://ip/__api__/v1/" + "A"*3000, verify=False)

Powoduje on awarię serwera (crash), natomiast wersja z ~2000 znaków kończy się „400 Bad Request”. Stack canary prawdopodobnie chroni przed pełnym RCE, ale i tak w 2025 roku takie błędy to skandal.

CVE-2025-40597 – przepełnienie sterty pre‑auth

Drugi błąd pojawia się w module mod_httprp.so (HTTP reverse proxy). Podczas parsowania nagłówka Host: używana jest bezpieczna wersja sprintf (zapewniona przez calloc), ale i tak następuje out-of-bounds write. Alokowana jest pamięć o rozmiarze 0x80, ale wejście możliwe do wstrzyknięcia przekracza ten limit i nadpisuje sąsiednie struktury.

Powyższe pokazuje, iż choćby „bezpieczne” funkcje z runtime guardami mogą zawieść bez adekwatnej walidacji długości.

CVE‑2025‑40598 – reflected XSS pre‑auth z interakcją użytkownika

Trzecia luka to klasyczne reflected XSS – również dostępne przed uwierzytelnieniem, ale wymagające interakcji (np. kliknięcie linka). Złośliwy kod JavaScript zostaje zwrócony w odpowiedzi na nieprawidłowo przetworzoną część żądania HTTP. Choć nie prowadzi do RCE, może umożliwić np. wykradanie ciasteczek sesji lub przekierowanie ofiary.

Kontekst i frustracja techniczna

Autorzy podkreślają gorzki kontekst: urządzenia sieciowe przez cały czas cierpią z powodu podstawowych błędów z czasów kodu C (nagłówki HTTP błędnie parsowane, brak ograniczeń). Wiążą to z powszechną obecnością sscanf w kodzie urządzeń brzegowych – „bonusowe punkty, jeżeli używa się sscanf!”.

Rekomendacje dla administratorów

  • Natychmiastowy upgrade firmware’u – SonicWall opublikował poradnik z łatającymi wersjami.
  • Wdrożenie Web Application Firewall (WAF) jako bufora przed atakami na główny interfejs.
  • Monitorowanie logów HTTP – nagłówki nietypowo długie lub malformed mogą wskazywać exploita.
  • Segmentacja sieci – ograniczenie ekspozycji urządzeń SSL‑VPN na sieciowo otwarte strefy.

Podsumowanie

Trzy CVE ujawnione przez watchTowr Labs (40596, 40597, 40598) to sygnał, iż problem przestarzałego kodu przez cały czas żyje. Buffer overflow w module pre‑auth, łatwo triggerowany, a do tego reflected XSS – to nie są błędy godne urządzeń bezpieczeństwa w 2025 roku. Choć stack protection może ograniczać skutki, administracja musi działać szybciej.

Idź do oryginalnego materiału