W FreeBSD zidentyfikowano lukę (CVE-2022-23093) w narzędziu ping, które jest częścią podstawowej instalacji. Problem może potencjalnie prowadzić do zdalnego wykonania kodu z uprawnieniami root podczas sprawdzania za pomocą polecenia ping zewnętrznego hosta kontrolowanego przez atakującego. Poprawka została zaproponowana w aktualizacjach FreeBSD 13.1-RELEASE-p5, 12.4-RC2-p2 i 12.3-RELEASE-p10. Na razie nie jest jasne, czy inne systemy BSD są podatne na wykrytą lukę (nie pojawiły się raporty o lukach w NetBSD, DragonFlyBSD i OpenBSD).
Luka jest spowodowana przepełnieniem bufora w kodzie analizy komunikatów ICMP, które przychodzą w odpowiedzi na zapytanie kontrolne. Kod wysyłania i odbierania komunikatów ICMP w programie ping używa surowych gniazd i jest wykonywany z podwyższonymi uprawnieniami (narzędzie dostarczane jest z flagą setuid root). Odpowiedzi obsługiwane są po stronie ping poprzez rekonstrukcję nagłówków IP i ICMP pakietów, które są otrzymywane z surowego gniazda. Wydzielone nagłówki IP i ICMP są kopiowane przez funkcję pr_pack() do buforów, nie uwzględniając, że w pakiecie po nagłówku IP mogą znajdować się dodatkowe rozszerzone nagłówki.
Podobne nagłówki są wydzielane z pakietu i włączane do bloku nagłówków, ale nie są uwzględniane przy obliczaniu rozmiaru bufora. W przypadku, gdy host w odpowiedzi na wysłane zapytanie ICMP zwróci pakiet z dodatkowymi nagłówkami, ich zawartość będzie zapisywana w obszarze poza granicami bufora w stosie. W rezultacie atakujący może nadpisać do 40 bajtów danych w stosie, co potencjalnie pozwala na wykonanie własnego kodu. Niebezpieczeństwo problemu łagodzi to, że w momencie wystąpienia błędu proces znajduje się w stanie izolacji wywołań systemowych (tryb capability), co utrudnia uzyskanie dostępu do pozostałej części systemu po wykorzystaniu luki.
Źródło: opennet.ru
