poprawiona wersja z usunięciem krytycznego (), która w domyślnej konfiguracji może prowadzić do zdalnego wykonania kodu przez złośliwego użytkownika z uprawnieniami root. Problem objawia się jedynie przy włączonym wsparciu TLS i jest wykorzystywany poprzez przesyłanie specjalnie sformatowanego certyfikatu klienta lub zmodyfikowanej wartości w SNI. Luka bezpieczeństwa firma Qualys.
Problem w procesorze uciekania specjalnych znaków w ciągu ( z string.c) i jest spowodowana tym, że symbol ‘\’ na końcu ciągu jest interpretowany przed zerowym symbolem (‘\0’) i ucieka go. Przy uciekaniu sekwencja ‘\’ oraz następujący zerowy kod końca ciągu są traktowane jako jeden symbol, co przesuwa wskaźnik na dane poza granicami ciągu, które są traktowane jako jego kontynuacja.
Kod wywołujący string_interpret_escape() przydziela bufor na stosie, kierując się rzeczywistym rozmiarem, a ustawiony wskaźnik znajduje się w obszarze poza granicami bufora. W związku z tym, przy próbie przetwarzania wejściowego ciągu, powstaje sytuacja odczytu danych z obszaru poza granicami przydzielonego bufora, a próba zapisu zinterpretowanego ciągu może prowadzić do zapisu poza buforem.
W domyślnej konfiguracji luka bezpieczeństwa może być wykorzystywana poprzez przesyłanie specjalnie sformatowanych danych do SNI podczas nawiązywania zabezpieczonego połączenia z serwerem. Problem może być również wykorzystywany poprzez modyfikację wartości peerdn w konfiguracjach skonfigurowanych do uwierzytelnienia przy pomocy certyfikatu klienta, lub podczas importowania certyfikatów. Atak poprzez SNI i peerdn jest możliwy od wydania , w którym funkcja string_unprinting() została zastosowana do dekompresji zawartości peerdn i SNI.
Do ataku poprzez SNI przygotowano prototyp exploita, działającego na architekturach i386 i amd64 w systemach Linux z Glibc. W exploicie wykorzystano nakładanie danych na obszar stosu, co prowadzi do nadpisania pamięci, w której przechowywana jest nazwa pliku logu. Nazwa pliku jest zastępowana na „/..//..//..//..//..//..//..//..//etc//passwd”. Następnie nadpisywana jest zmienna z adresem nadawcy, który jest pierwszy zapisywany w logu, co umożliwia dodanie nowego użytkownika do systemu.
Aktualizacje pakietów z usunięciem luki zostały wydane przez dystrybucje , , , i . RHEL i CentOS problemowi , ponieważ Exim nie znajduje się w ich głównym repozytorium pakietów (w aktualizację , ale na razie w publicznym repozytorium). W kodzie Exim problem jest rozwiązywany jednym wierszem , który wyłącza działanie znaku odwrotnego ukośnika, jeśli znajduje się on na końcu linii.
Aby zablokować lukę, można wyłączyć obsługę TLS lub dodać do
sekcji ACL „acl_smtp_mail”:
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
Źródło: opennet.ru
