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?
security
vim
escape-characters
clipboard
special-characters
Adam Trhon
źródło
źródło
/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.Odpowiedzi:
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 .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*
).źródło
paste
tryb (: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, gdypaste
tryb jest włączony.\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?)\x1b[201~
exploit działał jak poprzednio (tzn.ls -la
Został zapisany tylko w buforze iechom
polecenie 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!):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 | pbcopy
aby uzyskać wersję Raw do wklejeniavim
.\x1b\x1b[201~[201~
) Lub coś, co oszuka filtr.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 .
źródło