Opublikowano wersję serwera pocztowego Exim 4.94.2, która usuwa 21 podatność (CVE-2020-28007-CVE-2020-28026, CVE-2021-27216), wykrytą przez firmę Qualys i przedstawioną pod kodową nazwą 21Nails. 10 problemów może być eksploatowanych zdalnie (w tym do wykonania kodu z uprawnieniami roota) poprzez manipulację komendami SMTP podczas interakcji z serwerem.
Wszystkie wersje Exim są narażone na te problemy, a historia ich rozwoju jest śledzona w Git od 2004 roku. Dla 4 lokalnych podatności i 3 zdalnych problemów przygotowano działające prototypy exploitów. Eksploity dla lokalnych podatności (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) pozwalają podnieść swoje uprawnienia do użytkownika root. Dwa zdalne problemy (CVE-2020-28020, CVE-2020-28018) pozwalają na wykonanie kodu bez uwierzytelnienia z uprawnieniami użytkownika exim (można uzyskać dostęp root, wykorzystując jedną z lokalnych podatności).
Podatność CVE-2020-28021 pozwala na zdalne wykonanie kodu z uprawnieniami roota, ale wymaga uwierzytelnionego dostępu (użytkownik musi ustanowić uwierzytelnioną sesję, po czym może wykorzystać podatność poprzez manipulację parametrem AUTH w komendzie MAIL FROM). Problem wynika z tego, że atakujący może spowodować podstawienie ciągu do nagłówka pliku spool z powodu zapisu wartości authenticated_sender bez odpowiedniego zabezpieczenia specjalnych znaków (na przykład, przesyłając komendę „MAIL FROM: AUTH=Raven+0AReyes”).
Dodatkowo zaznaczono, że jeszcze jedna zdalna podatność CVE-2020-28017 może być wykorzystywana do wykonywania kodu z uprawnieniami użytkownika „exim” bez uwierzytelnienia, ale wymaga posiadania więcej niż 25 GB pamięci. W przypadku pozostałych 13 podatności potencjalnie również mogą być przygotowane exploity, ale prace w tym kierunku na razie nie zostały podjęte.
Programiści Exim zostali poinformowani o problemach jeszcze w październiku zeszłego roku i spędzili ponad 6 miesięcy na opracowywaniu poprawek. Wszyscy administratorzy są pilnie proszeni o natychmiastowe zaktualizowanie Exim na swoich serwerach pocztowych. serwerach do wersji 4.94.2. Wszystkie wersje Exim przed wydaniem 4.94.2 zostały uznane za przestarzałe. Publikacja nowej wersji była skoordynowana z dystrybucjami, które jednocześnie opublikowały aktualizacje pakietów: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE i Fedora. RHEL i CentOS nie są dotknięte tym problemem, ponieważ Exim nie znajduje się w ich oficjalnym repozytorium pakietów (w EPEL aktualizacja jest wciąż niedostępna).
Usunięte podatności:
- CVE-2020-28017: Przepełnienie liczb całkowitych w funkcji receive_add_recipient();
- CVE-2020-28020: Przepełnienie liczb całkowitych w funkcji receive_msg();
- CVE-2020-28023: Odczyt spoza przydzielonego bufora w funkcji smtp_setup_msg();
- CVE-2020-28021: Wstawienie nowej linii do nagłówka pliku spoolingowego;
- CVE-2020-28022: Zapis i odczyt spoza przydzielonego bufora w funkcji extract_option();
- CVE-2020-28026: Odcinanie i wstawienie ciągu w funkcji spool_read_header();
- CVE-2020-28019: Awaria przy zresetowaniu wskaźnika do funkcji po wystąpieniu błędu BDAT;
- CVE-2020-28024: Przepełnienia przez dolną granicę bufora w funkcji smtp_ungetc();
- CVE-2020-28018: Uzyskanie dostępu do bufora po jego zwolnieniu (use-after-free) w tls-openssl.c
- CVE-2020-28025: Odczyt spoza przydzielonego bufora w funkcji pdkim_finish_bodyhash().
Lokalne luki:
- CVE-2020-28007: Atak przez symlink w katalogu z logami Exim;
- CVE-2020-28008: Ataki na katalog z plikami spoolingowymi;
- CVE-2020-28014: Tworzenie dowolnego pliku;
- CVE-2021-27216: Usuwanie dowolnego pliku;
- CVE-2020-28011: Przepełnienie bufora w funkcji queue_run();
- CVE-2020-28010: Zapis poza zakresem bufora w funkcji main();
- CVE-2020-28013: Przepełnienie bufora w funkcji parse_fix_phrase();
- CVE-2020-28016: Zapis poza zakresem bufora w funkcji parse_fix_phrase();
- CVE-2020-28015: Wstawienie nowej linii do nagłówka pliku spoolingowego;
- CVE-2020-28012: Brak flagi close-on-exec dla uprzywilejowanego kanału bez nazw;
- CVE-2020-28009: Przepełnienie liczb całkowitych w funkcji get_stdinput().
Źródło: opennet.ru
