W narzędziu , służy do organizowania wykonywania poleceń w imieniu innych użytkowników, słaby punkt (), co pozwala na eskalację uprawnień do użytkownika root. Problem występuje od wersji sudo 1.7.1 tylko podczas korzystania z opcji „pwfeedback” w pliku /etc/sudoers, która jest domyślnie wyłączona, ale włączona w niektórych dystrybucjach, takich jak: Linux Mint i Elementary OS. Problem został rozwiązany w wersji , opublikowano kilka godzin temu. Luka ta nadal nie została naprawiona w dystrybucjach.
Opcja „pwfeedback” włącza wyświetlanie symbolu „*” po każdym wprowadzonym znaku podczas wprowadzania hasła. Z powodu W implementacji funkcji getln() zdefiniowanej w pliku tgetpass.c ciąg hasła, który jest zbyt długi, aby zmieścić się w przydzielonym buforze w pewnych warunkach, może przepełnić bufor i nadpisać inne dane na stosie. Przepełnienie występuje podczas wykonywania kodu sudo z uprawnieniami roota.
Istota problemu polega na tym, że podczas korzystania ze specjalnego znaku ^U (czyszczenie wiersza) podczas procesu wprowadzania danych i gdy operacja zapisu się nie powiedzie, kod odpowiadający za czyszczenie znaków wyjściowych „*” resetuje dane o dostępnym rozmiarze bufora, ale nie przywraca wskaźnika do bieżącej pozycji w buforze do jego pierwotnej wartości. Innym czynnikiem przyczyniającym się do eksploatacji jest brak automatycznego wyłączania trybu „pwfeedback”, gdy dane są odbierane nie z terminala, a poprzez strumień wejściowy (ta wada pozwala na stworzenie warunków do wystąpienia błędu zapisu, np. w systemach z jednokierunkowym Błąd występuje przy próbie zapisu poza końcem kanału odczytu).
Ponieważ atakujący ma pełną kontrolę nad nadpisywaniem danych w stosie, nietrudno jest stworzyć exploit umożliwiający podniesienie uprawnień do użytkownika root. Problem ten może zostać wykorzystany przez dowolnego użytkownika, niezależnie od uprawnień sudo i ustawień użytkownika w sudoers. Aby wyeliminować ten problem, upewnij się, że ustawienie „pwfeedback” nie znajduje się w pliku /etc/sudoers, a w razie potrzeby wyłącz je („Domyślne !pwfeedback”). Aby sprawdzić, czy występuje problem, możesz uruchomić kod:
$ perl -e 'wydrukuj(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Hasło: Błąd segmentacji
Źródło: opennet.ru
