Freenginx i nginx sprawdzają teraz rozmiar zmiennej tekstowej przed zapisaniem do niej danych (+ CVE)


3

TL; DRPo napotkaniu trzeciego przepełnienia bufora odkrytego w 2026 roku (i, według F5, błędu RCE, jeśli nie ma ASLR) podczas pracy z wyrażeniami regularnymi i zmiennymi, programista Freenginx, Maxim Dunin, postanowił temu zaradzić i dodał do swojego produktu sprawdzanie rozmiaru zmiennej przed zapisem danych. Nginx skopiował później tę funkcję, dając nadzieję na wyeliminowanie nowych luk CVE związanych z tym problemem.

A teraz szczegóły.

19 czerwca został zrobiony popełniać w Freenginx, który dodaje pole end do deskryptora zmiennej, wskazujące koniec bufora. Wcześniej istniał tylko wskaźnik do jego początku (pos), wymagana długość była (i nadal jest) obliczana z góry, a w momencie kopiowania danych do zmiennej zakładano, że poprawnie obliczona długość gwarantuje, że dane zmieszczą się w buforze. Niestety, w maju 2026 roku okazało się to już dwukrotnie niepoprawne z powodu różnych przeoczeń.1 (linux.org.ru), 2 (linux.org.ru)), co prowadziło do przepełnień bufora i poważnych konsekwencji. Teraz, gdy tworzony jest bufor zmiennej, wskaźnik do jego końca jest również wypełniany, a przed zapisaniem danych do zmiennej, jeśli dane się nie mieszczą, przetwarzanie żądania zostanie przerwane z błędem w kontrolowany sposób. Oznacza to, że błędy w obliczaniu długości mogą nadal występować, ale nie będą marnować pamięci; spowodują jedynie niepowodzenie konkretnego żądania HTTP. Poniższe zatwierdzenia (2 (freenginx.org), 3 (freenginx.org)) podobne zabezpieczenia dodano do innych części kodu, w tym do kodu rejestrującego dostęp. Wersja została opublikowana 7 lipca. Freenginx 1.31.3, która obejmuje tę poprawkę.

15 lipca te zatwierdzenia zostały przechwycone przez nginx (1 (github.com), 2 (github.com), 3 (github.com)(z jakiegoś powodu zamieniając drugi i trzeci w łańcuchu), problem został przypisany CVE-2026-42533i F5 wydało oficjalne SA (f5.com).

Jeśli chodzi o konkretną lukę w zabezpieczeniach: ujawnia się ona podczas używania dyrektywy „map” z wyrażeniami regularnymi z wyodrębnionymi parametrami. Jeśli chodzi o inne warunki wymagane do jej uruchomienia, tekst w opisie zatwierdzenia i tekst w SA różnią się nieznacznie: SA stwierdza, że ​​następnie należy obliczyć pewien ciąg znaków, co wykorzystuje wyodrębniony parametr pozostały z mapy, przed wynikiem tej samej mapy. W opisie zatwierdzenia w przykładzie, pomiędzy tymi krokami, zmienna zawierająca wyodrębniony parametr jest również zerowana. Mimo to, jest mało prawdopodobne, aby wystąpiło to w większości działających serwerów Nginx, a zatem luka dotyczyła niewielu użytkowników. Warto również zauważyć, że poprawka dotycząca obliczania długości specjalnie dla tego przypadku nie znajduje się w zatwierdzonych edycjach (czy może źle szukałem?), istnieje jedynie zabezpieczenie, które przekształca problem w kontrolowany błąd żądania HTTP. Chociaż niektóre poprawki zostały dodane do freenginx 19 lipca (5bfb, 7622, b906) obliczając długość w podobnej sytuacji, ale nie jest od razu jasne, czy tak jest w tym przypadku, czy nie.

Luka pojawiła się w wersji nginx 0.9.6, poprawki uwzględniono w wersjach freenginx 1.31.3, nginx 1.30.4 i nginx 1.31.3.

nginx SA dziękuje szeregowi osób za niezależne zgłoszenie luki w zabezpieczeniach i przestrzeganie „skoordynowanych standardów ujawniania informacji”:

F5 wyraża wdzięczność Ming Xuan, DKD (@pidifn), Ji'an Zhou i Zhen Yan z AntAISecurityLab, Rafaelowi Gacekowi, Sergii Negodiukowi z EVO.company, Lam Jun Rong z Calif.io, Mufeedowi VH z Winfunc Research (winfunc.com), Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin z depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin z Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) i Milan Jovic (Kljunowsky) za niezależne zwrócenie naszej uwagi na tę kwestię i przestrzeganie najwyższych standardów skoordynowanego ujawniania informacji.

W przypadku freenginx informacje towarzyszące poprawce ograniczają się do komunikatu zatwierdzenia. changelogTa poprawka nie jest nawet oznaczona jako „zabezpieczenie” ani „poprawka błędu”, tylko „funkcja”. Najwyraźniej autor nie uznał tego problemu za krytyczny. Nie da się ustalić związku między problemami zgłoszonymi przez wspomniane osoby w F5 a commitem skopiowanym z freenginx, ani czy oni (lub ktokolwiek inny) zgłosili ten problem autorowi freenginx.

Źródło: linux.org.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster