Vim kopyala-yapıştır saldırısına bağışık mı?


112

Sen olmalıdır terminalinize web'den yapıştırın asla . Bunun yerine, metin düzenleyicinize yapıştırmanız, komutu kontrol etmeniz ve ardından terminale yapıştırmanız gerekir.

Sorun değil, peki ya Vim metin editörümse? Birisi Vim'i komut moduna geçiren ve kötü amaçlı komutu yürüten bir içerik oluşturabilir mi?


2
@ ryekayo Komutu arka planda çalıştırmayı biliyorum. Asıl soru,
vim'i

3
Vim'in son sürümlerinde, bu tür saldırıları engellemesi beklenen parantez içindeki macunu kullandık.
Satō Katsura

2
@ EmilJeřábek Mesajdaki link size bunun yerine tepelere koşmanız için yeterli nedenler sunar.
Satō Katsura

1
@ EmilJeřábek Kaçış karakteriyle gizli metin oluşturabileceğiniz için, EOF ile de metin oluşturabileceğinizi varsayıyorum. Sonra gizli metin gibi bir şey içerebilir /bin/bash ; EOF rm -rf ~. Terminale yapıştırıldığında bash başlar, sonlandırır ve evinizi siler. Kedinin içine yapıştırıldığında, kedinin komutu yazdırmasına, kedinin sonlandırmasına ve evinizi silmesine izin verir.
Adam Trhon

Yanıtlar:


106

Kısa cevap: Pek çok durumda, Vim bu tür saldırılara karşı savunmasızdır (metni Metin modunda yapıştırırken).

Kavramın ispatı

Bağlantılı makaleyi bir başlangıç ​​noktası olarak kullanarak, metnin orta kısmını gizlemek için HTML yayılma öğelerini ve CSS'yi kullanarak, yalnızca ls -lageçici görüntüleyicinin görebilmesi için hızlı bir şekilde aşağıdaki kodla bir web sayfası oluşturabildim . kaynak). Not: ^[Escape karakteri ve ^Msatır başı karakteridir. Yığın Değişimi, kullanıcı girişini temizler ve CSS kullanarak içeriğin gizlenmesine karşı korur, bu nedenle konseptin kanıtını yükledim .

ls ^[:echom "This could be a silent command."^Mi -la

Ekleme modundaysanız ve bu metni Vim terminaline yapıştırdıysanız (bazı niteleyiciler ile aşağıya bakın) göreceksiniz, ls -laancak :messageskomutu çalıştırırsanız , gizli Vim komutunun sonuçlarını görebilirsiniz.

Savunma

O Normal modda kalmasını sağlamak için kullanarak yapıştırmak için en iyisi bu saldırıya karşı savunmak "*pveya "+p. Normal modunda, p bir kasadan Utting metin, (gizli kısmı dahil) tam metin yapıştırılır. Bu aynı :set pasteayarlanmış (hatta ) ayar modunda olmaz .

Parantezli macun modu

Vim'in son sürümleri, bu tür kopyala yapıştır saldırısını azaltan köşeli ayraç modunu destekler . Sato Katsura, “Braketli hamur desteği Vim 8.0.210'da ortaya çıktığını ve en son 8.0.303 versiyonunda (2 Şubat 2017'de yayımlandı) düzeltildiğini” açıkladı.

Not: Anladığım kadarıyla, parantez macun modu desteği ile Vim sürümleri gerekmektedir kullanarak yapıştırırken sizi korumak Ctrl- Shift- V(çoğu GNU / Linux masaüstü ortamları), Ctrl- V(MS Windows) Command- V(Mac OS X), Shift- Insertya da bir fare Orta tıklama.

Test yapmak

Daha sonra Lubuntu 16.04 masaüstü bilgisayardan bazı testler yaptım ancak sonuçlarım kafa karıştırıcı ve sonuçsuzdu. Bunun sebebini her zaman GNU ekranını kullandığımdan farkettim, ancak ekranın , braketli yapıştırma modunu etkinleştirmek / devre dışı bırakmak için kullanılan kaçış sırasını filtrelediği ortaya çıktı (bir yama var, ancak bir zamanda gönderildiği gibi göründü. proje aktif olarak sürdürülmedi). Testlerimde, Vim veya terminal emülatörünün braketli pasta modunu destekleyip desteklemediğinden bağımsız olarak, Vim çalışırken GNU ekranı üzerinden çalışırken konseptin kanıtı her zaman çalışır.

Daha fazla test yapmak yararlı olacaktır, ancak şu ana kadar, terminal emülatörü tarafından braketli yapıştırma modu desteğinin, Kanıt Kanıtlarımı engellediğini - GNU ekranı ilgili kaçış dizilerini engellemediği sürece. Bununla birlikte, nneonneo kullanıcısı, parantez içindeki macun modundan çıkmak için kaçış dizilerinin dikkatli bir şekilde hazırlanabileceğini bildiriyor .

Vim'in güncel bir sürümüyle bile, Kullanıcı Bilgilendirme *( Ctrl- R*) yazarak Kayıt modundayken kullanıcı tarafından yapıştırıldığında, Proof of Concept'in her zaman işe yaradığını unutmayın . Bu aynı zamanda girilen ve yapıştırılan giriş arasında ayrım yapabilen GVim için de geçerlidir. Bu durumda Vim, kayıt içeriğinin içeriğine güvenmesini kullanıcıya bırakmaktadır. Bu nedenle, asla güvenilmeyen bir kaynaktan yapıştırırken bu yöntemi kullanmayın (sık sık yaptığım bir şey - ama şimdi kendimi değil, kendimi eğitmeye başladım).

İlgili Bağlantılar

Sonuç

Metin yapıştırırken Normal modunu kullanın ( +veya *kayıt defterinden).

… Veya Emacs kullanın. İyi bir işletim sistemi olduğunu duydum. :)


2
Vim'e yapıştırmadan önce pastemode ( :set paste) özelliğini etkinleştirmeniz gerekir . Ardından , terminalinizin de desteklemesi koşuluyla parantez içindeki macun etkin olmalıdır . Kavram pasteetkinleştirildiğinde mod etkinleştirildiğinde çalışmaz .
Satō Katsura

1
Basamaklama modunun ne kadar güvenli olduğunu anlamıyorum. Saldırgan, \e[201~köşeli ayraç kullandığınızı biliyorsa, yalnızca köşeli ayraç modundan çıkmak için yapıştır komutuna bir dizi ekler ve yine de bir adım atmaya devam eder. (Braketli hamurun nasıl çalıştığına dair bazı ayrıntıları
kaçırmazsam

2
@SatoKatsura: Orijinal saldırıya açık olmayan Vim 8.0.540 da denedim. Eklemeden sonra \x1b[201~, istismar eskisi gibi işlev gördü (yani yalnızca ls -latampon belleğe yazıldı ve echomkomut çalıştırıldı). Bu nedenle, parantez içine macun hala hedeflenen saldırılara karşı daha savunmasız olduğunu ve olduğunu düşünüyorum değil yeterince güçlü bir çözüm. (Gerçekten de, herhangi bir bant içi sinyalleşme şekli savunmasızdır!)
nneonneo

2
Deneme ile hem de olmadan denedim :set paste- istismar hala çalışıyor. Gayet açık olmak gerekirse, ben şu (Base64 kodlanmış) damla yapıştırılan: bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=. OS X'te, bunu kopyalayabilir, pbpaste | base64 -D | pbcopyyapıştırılacak ham bir sürüm elde etmek için çalıştırabilirsiniz vim.
nneonneo

1
Daha net olmak gerekirse, macOS Terminal.app'i kullanarak bir Ubuntu 16.04 kutusuna bir SSH bağlantısıyla test ediyorum. Terminal emülatörünüz kaçış sırasını macun üzerinde sıyırıyorsa, muhtemelen sırayı (örn. \x1b\x1b[201~[201~) Veya filtreyi kandıracak bir şeyi yuvalayabilirsiniz .
nneonneo

0

X11 pano özelliğini veya platforma özgü bir eşdeğeri kullanıyorsanız ve fare desteği etkinleştirilmiş orta düğmeli yapıştırmayı veya vim paste komutunu kullanın ve herhangi bir terminal yapıştır komutunu kullanmayın (shift-orta buton veya terminali ne kısaltırsa) Teklifler) o zaman güvende olabilirsiniz.

Eğer değilse, o zaman parantezli macun modunu destekleyen bir terminal emülatörünüz varsa ve bunu terminalinizde ve vim'de etkinleştirmişseniz ve bu terminal emülatörünün parantezli macun modunu sona erdiren kaçış dizisinin enjeksiyonuna karşı koruma sağlaması durumunda, o zaman güvende olabilirsin.

Aksi takdirde, burada açıklanan saldırıya karşı savunmasız olabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.