Czy Vim jest odporny na atak kopiuj-wklej?

112

Nigdy nie należy wklejać z Internetu do terminala . Zamiast tego należy wkleić do edytora tekstu, sprawdzić polecenie, a następnie wkleić do terminala.

Zgadza się, ale co jeśli Vim jest moim edytorem tekstu? Czy można sfałszować treść, która przełącza Vima w tryb poleceń i wykonuje złośliwe polecenie?

Adam Trhon
źródło
2
@ryekayo Wiem, jak uruchomić polecenie w tle. Pytanie dotyczy raczej tego, czy można przełączyć vima z trybu wstawiania do trybu poleceń, a następnie wykonać cokolwiek
Adam Trhon
3
Najnowsze wersje Vima mają nawias klamrowy, który ma zapobiegać tego rodzaju atakom.
Satō Katsura,
2
@ EmilJeřábek Link do postu daje ci wystarczające powody, by biegać po wzgórzach, a nie robić to.
Satō Katsura,
1
@ EmilJeřábek Ponieważ możesz fałszować ukryty tekst za pomocą znaku Escape, zakładam, że możesz także fałszować tekst za pomocą EOF. Wtedy ukryty tekst może zawierać coś takiego /bin/bash ; EOF rm -rf ~. Po wklejeniu do terminala zaczyna bash, kończy go, a następnie usuwa dom. Po wklejeniu do kota, kot wydrukuje polecenie, zakończy kota i usunie twój dom.
Adam Trhon

Odpowiedzi:

106

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 -labył widoczny tylko dla zwykłego widza (nie przeglądając źródło). Uwaga: ^[jest to znak Escape i ^Mznak 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 -laale jeśli uruchomisz :messagespolecenie, możesz zobaczyć wyniki ukrytego polecenia Vima.

Obrona

Aby się bronić przed tym atakiem, najlepiej pozostać w trybie normalnym i wkleić za pomocą "*plub "+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. :)

Anthony Geoghegan
źródło
2
Powinieneś włączyć pastetryb ( :set paste) przed wklejeniem w Vimie. Następnie wklej nawias kwadratowy powinien zadziałać, pod warunkiem, że twój terminal również go obsługuje. Twój dowód koncepcji nie działa, gdy pastetryb jest włączony.
Satō Katsura,
1
Nie widzę, jak bezpieczny jest tryb wklejania w nawiasach. Jeśli atakujący wie, że używasz wklejania w nawiasach, po prostu \e[201~wklei sekwencję w poleceniu wklejania, aby wyjść z trybu wklejania w nawiasach, i i tak cię przekręci. (Chyba, że brakowało mi kilka szczegółów na temat sposobu nawias prac pasty?)
nneonneo
2
@SatoKatsura: Próbowałem na Vimie 8.0.540, który nie był wrażliwy na oryginalny atak. Po dodaniu \x1b[201~exploit działał jak poprzednio (tzn. ls -laZostał zapisany tylko w buforze i echompolecenie zostało wykonane). Dlatego myślę, że wklej w nawiasach jest nadal podatny na atak ukierunkowany i nie jest wystarczająco silnym rozwiązaniem. (Rzeczywiście, każda forma sygnalizacji wewnątrzpasmowej jest wrażliwa!)
nneonneo
2
Próbowałem zarówno z, jak i bez :set paste- exploit nadal działa. Aby być w pełni jasne, wklejony następujące (base64 kodowane) blob: bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=. W systemie OS X możesz to skopiować, uruchomić, pbpaste | base64 -D | pbcopyaby uzyskać wersję Raw do wklejenia vim.
nneonneo
1
Aby jeszcze bardziej wyjaśnić, testuję połączenie SSH z komputerem Ubuntu 16.04, używając macOS Terminal.app. Jeśli emulator terminala usuwa sekwencję ucieczki podczas wklejania, prawdopodobnie możesz zagnieździć sekwencję (np. \x1b\x1b[201~[201~) Lub coś, co oszuka filtr.
nneonneo,
0

Jeśli używasz funkcji schowka X11 lub odpowiednika specyficznego dla platformy i używasz wklejania środkowego przycisku z włączoną obsługą myszy lub polecenia wklejania vim, a nie żadnego polecenia wklejania terminalu (przycisk środkowy shift lub jakiekolwiek skróty terminalu oferty), możesz być bezpieczny.

Jeśli nie, to jeśli masz emulator terminala, który obsługuje tryb wklejania z nawiasami klamrowymi i masz włączone to w swoim terminalu i vimie, a ten emulator terminala implementuje ochronę przed wstrzyknięciem sekwencji ucieczki, która kończy tryb wklejania nawiasów, wtedy możesz być bezpieczny.

Jeśli nie, możesz być narażony na opisany tutaj atak .

sh1
źródło