W narzędziu , używanym do organizowania wykonywania poleceń w imieniu innych użytkowników, vulnerabilność (), co pozwala na podniesienie swoich uprawnień w systemie do użytkownika root. Problem występuje od wersji sudo 1.7.1, tylko przy użyciu w pliku /etc/sudoers opcji „pwfeedback”, która jest domyślnie wyłączona, ale aktywowana w niektórych dystrybucjach, takich jak Linux Mint i Elementary OS. Problem został rozwiązany w wersji , opublikowanej kilka godzin temu. W dystrybucjach podatność wciąż pozostaje niepoprawiona.
Opcja „pwfeedback” włącza wyświetlanie znaku „*” po każdym wpisanym znaku podczas wprowadzania hasła. Z powodu w implementacji funkcji getln(), zdefiniowanej w pliku tgetpass.c, zbyt długa linia hasła przekazywana przez standardowe wejście (stdin) w pewnych warunkach może nie zmieścić się w przydzielonym buforze i nadpisać inne dane w stosie. Przepełnienie występuje podczas wykonywania kodu sudo z uprawnieniami root.
Sedno problemu polega na tym, że przy użyciu podczas wprowadzania znaku specjalnego ^U (czyszczenie linii) oraz w przypadku awarii operacji zapisu, kod odpowiedzialny za usuwanie wyświetlanych znaków „*” resetuje dane o dostępnym rozmiarze bufora, ale nie przywraca z powrotem wskaźnika na aktualną pozycję w buforze. Innym czynnikiem sprzyjającym wykorzystaniu jest brak automatycznego wyłączania trybu „pwfeedback” przy przychodzących danych nie z terminala, lecz przez strumień wejściowy (to niedociągnięcie pozwala na stworzenie warunków do wystąpienia błędu zapisu, na przykład na systemach z jednokierunkowymi błąd występuje przy próbie zapisu za koniec kanału do odczytu).
Ponieważ atakujący może w pełni kontrolować nadpisywanie danych na stosie, nie ma trudności w stworzeniu exploita, który pozwala na podniesienie swoich uprawnień do użytkownika root. Problem może być wykorzystywany przez każdego użytkownika, niezależnie od uprawnień do używania sudo i specyficznych dla użytkownika ustawień w sudoers. Aby zablokować problem, należy upewnić się, że w /etc/sudoers nie ma ustawienia „pwfeedback” i w razie potrzeby je wyłączyć („Defaults !pwfeedback”). Aby sprawdzić obecność problemu, można wykonać kod:
$ perl -e ‘print((„A” x 100 . „\x{00}”) x 50)’ | sudo -S id
Hasło: Błąd segmentacji
Źródło: opennet.ru
