Câu trả lời ngắn: Trong nhiều tình huống, Vim dễ bị tấn công kiểu này (khi dán văn bản ở chế độ Chèn).
Bằng chứng của khái niệm
Sử dụng bài viết được liên kết làm điểm bắt đầu, tôi có thể nhanh chóng tạo một trang web với đoạn mã sau, sử dụng các phần tử nhịp HTML và CSS để ẩn phần giữa của văn bản để chỉ ls -la
hiển thị cho người xem thông thường (không xem nguồn). Lưu ý: ^[
nhân vật Escape và ^M
nhân vật trở về xe ngựa. Stack Exchange vệ sinh đầu vào của người dùng và bảo vệ chống ẩn nội dung bằng CSS vì vậy tôi đã tải lên bằng chứng về khái niệm .
ls ^[:echom "This could be a silent command."^Mi -la
Nếu bạn ở chế độ Chèn và dán văn bản này vào terminal Vim (với một số vòng loại, xem bên dưới) bạn sẽ thấy ls -la
nhưng nếu bạn chạy :messages
lệnh, bạn có thể thấy kết quả của lệnh Vim ẩn.
Phòng thủ
Để chống lại cuộc tấn công này, tốt nhất là ở trong chế độ Bình thường và dán bằng "*p
hoặc "+p
. Trong chế độ Bình thường, khi p nhập văn bản từ một thanh ghi, toàn bộ văn bản (bao gồm cả phần ẩn) sẽ được dán. Điều này cũng không xảy ra trong chế độ Chèn (ngay cả khi :set paste
) đã được đặt.
Chế độ dán khung
Các phiên bản gần đây của Vim hỗ trợ chế độ dán có khung giúp giảm thiểu loại tấn công sao chép-dán này. Sato Katsura đã làm rõ rằng Hỗ trợ cho dán dán khung xuất hiện trong Vim 8.0.210 và gần đây nhất đã được sửa trong phiên bản 8.0.303 (phát hành vào ngày 2 tháng 2 năm 2017).
Lưu ý: Theo tôi hiểu, các phiên bản của Vim có hỗ trợ cho chế độ dán có khung sẽ bảo vệ bạn khi dán bằng cách sử dụng Ctrl- Shift- V(hầu hết các môi trường máy tính để bàn GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Inserthoặc chuột Nhấp chuột giữa.
Kiểm tra
Tôi đã thực hiện một số thử nghiệm từ máy tính để bàn LubFi 16.04 sau đó nhưng kết quả của tôi rất khó hiểu và không có kết quả. Tôi đã nhận ra rằng điều này là do tôi luôn sử dụng màn hình GNU nhưng hóa ra màn hình đó lọc các chuỗi thoát được sử dụng để bật / tắt chế độ dán có dấu ngoặc (có một bản vá nhưng có vẻ như nó đã được gửi vào thời điểm khi dự án đã không được tích cực duy trì). Trong thử nghiệm của tôi, bằng chứng về khái niệm luôn hoạt động khi chạy Vim qua màn hình GNU, bất kể Vim hay trình mô phỏng đầu cuối hỗ trợ chế độ dán khung.
Thử nghiệm thêm sẽ hữu ích nhưng, cho đến nay, tôi thấy rằng sự hỗ trợ cho chế độ dán được đóng khung bởi trình giả lập thiết bị đầu cuối chặn Proof of Concept của tôi - miễn là màn hình GNU không chặn các chuỗi thoát liên quan. Tuy nhiên, người dùng nneonneo báo cáo rằng việc tạo cẩn thận các chuỗi thoát có thể được sử dụng để thoát khỏi chế độ dán có dấu ngoặc.
Lưu ý rằng ngay cả với phiên bản cập nhật của Vim, Proof of Concept luôn hoạt động nếu người dùng dán từ thanh *
ghi trong khi ở chế độ Chèn bằng cách nhập ( Ctrl- R*). Điều này cũng áp dụng cho GVim có thể phân biệt giữa đầu vào được nhập và dán. Trong trường hợp này, Vim để nó cho người dùng tin tưởng vào nội dung đăng ký của họ. Vì vậy, đừng bao giờ sử dụng phương pháp này khi dán từ một nguồn không đáng tin cậy (đó là điều tôi thường làm - nhưng giờ tôi đã bắt đầu tự rèn luyện bản thân mình không).
Liên kết liên quan
Phần kết luận
Sử dụng chế độ Bình thường khi dán văn bản (từ +
hoặc *
thanh ghi).
Khoan hoặc sử dụng Emacs. Tôi nghe nói nó là một hệ điều hành tốt. :)