Krótka odpowiedź: w wielu sytuacjach Vim jest podatny na tego rodzaju ataki (podczas wklejania tekstu w trybie wstawiania).
Dowód koncepcji
Korzystając z połączonego artykułu jako punktu wyjścia, byłem w stanie szybko stworzyć stronę internetową z następującym kodem, używając elementów zakresu HTML i CSS do ukrywania środkowej części tekstu, tak aby ls -la
był widoczny tylko dla zwykłego widza (nie przeglądając źródło). Uwaga: ^[
jest to znak Escape i ^M
znak powrotu karetki. Stack Exchange dezynfekuje dane wejściowe użytkownika i chroni przed ukryciem treści za pomocą CSS, dlatego przesłałem dowód koncepcji .
ls ^[:echom "This could be a silent command."^Mi -la
Jeśli byłeś w trybie wstawiania i wkleiłeś ten tekst do terminala Vim (z niektórymi kwalifikatorami, patrz poniżej), zobaczysz, ls -la
ale jeśli uruchomisz :messages
polecenie, możesz zobaczyć wyniki ukrytego polecenia Vima.
Obrona
Aby się bronić przed tym atakiem, najlepiej pozostać w trybie normalnym i wkleić za pomocą "*p
lub "+p
. W trybie normalnym, gdy p tekst Utting z rejestru, pełny tekst (w tym ukrytej części) jest wklejony. To samo nie dzieje się w trybie wstawiania (nawet jeśli :set paste
) został ustawiony.
Tryb wklejania w nawiasach
Najnowsze wersje Vima obsługują tryb wklejania w nawiasach, który ogranicza ten typ ataku kopiuj-wklej. Sato Katsura wyjaśnił, że „Obsługa wklejania w nawiasach pojawiła się w Vimie 8.0.210, a ostatnio została naprawiona w wersji 8.0.303 (wydanej 2 lutego 2017 r.)”.
Uwaga: Jak rozumiem, wersje Vima z obsługą nawiasami trybie pasty powinien chronić cię podczas wklejania użyciu Ctrl- Shift- V(większość środowisk graficznych GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Insertlub mysz środkowe kliknięcie.
Testowanie
Później wykonałem kilka testów z komputera stacjonarnego Lubuntu 16.04, ale moje wyniki były mylące i niejednoznaczne. Od tego czasu zdałem sobie sprawę, że dzieje się tak, ponieważ zawsze używam ekranu GNU, ale okazuje się, że screen filtruje sekwencję zmiany znaczenia używaną do włączania / wyłączania trybu wklejania w nawiasach kwadratowych (istnieje łatka, ale wygląda na to, że została przesłana w czasie, gdy projekt nie był aktywnie utrzymywany). W moich testach dowód koncepcji zawsze działa podczas uruchamiania Vima przez ekran GNU, niezależnie od tego, czy Vim lub emulator terminala obsługuje tryb wklejania w nawiasie.
Przydałyby się dalsze testy, ale jak dotąd odkryłem, że obsługa trybu wklejania w nawiasach przez emulator terminala blokuje mój Dowód koncepcji - o ile ekran GNU nie blokuje odpowiednich sekwencji ucieczki. Jednak użytkownik nneonneo informuje, że do wyjścia z trybu wklejania w nawiasach można użyć starannego tworzenia sekwencji ucieczki.
Zauważ, że nawet w przypadku aktualnej wersji Vima, Proof of Concept zawsze działa, jeśli użytkownik wklei się z *
rejestru w trybie wstawiania, wpisując ( Ctrl- R*). Dotyczy to również GVim, który może rozróżniać między wpisywanymi i wklejanymi danymi wejściowymi. W takim przypadku Vim pozostawia użytkownikowi zaufanie do zawartości zawartości rejestru. Więc nigdy nie używaj tej metody do wklejania z niezaufanego źródła (jest to coś, co często robię - ale teraz zacząłem trenować, aby tego nie robić).
Powiązane linki
Wniosek
Użyj trybu normalnego do wklejania tekstu (z rejestrów +
lub *
).
… Lub użyj Emacsa. Słyszałem, że to porządny system operacyjny. :)