Ujawniono szczegóły krytycznej luki w Exim

Opublikowano poprawiona wersja Exim 4.92.2 z usunięciem krytycznego vulnerablista (CVE-2019-15846), 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 wykryto firma Qualys.

Problem jest obecny w procesorze uciekania specjalnych znaków w ciągu (string_interpret_escape() 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 Exim 4.80, 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 Debian, Ubuntu, Fedora, SUSE/openSUSE i FreeBSD. RHEL i CentOS problemowi niepodatne, ponieważ Exim nie znajduje się w ich głównym repozytorium pakietów (w EPEL aktualizację już zostało utworzone, ale na razie nie umieszczono w publicznym repozytorium). W kodzie Exim problem jest rozwiązywany jednym wierszem łatkami, 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster