짧은 대답 : 여러 상황에서 Vim은 이러한 종류의 공격에 취약합니다 (삽입 모드에서 텍스트를 붙여 넣을 때).
개념의 증거
링크 된 기사를 시작점으로 사용하여 HTML span 요소와 CSS를 사용하여 텍스트의 중간 부분을 숨겨서 ls -la
캐주얼 뷰어 만 볼 수 있도록 다음 코드로 웹 페이지를 신속하게 만들 수있었습니다 . 출처). 참고 :는 ^[
이스케이프 문자이고 ^M
캐리지 리턴 문자입니다. Stack Exchange는 사용자 입력을 삭제하고 CSS를 사용하여 콘텐츠를 숨기는 것을 방지 하므로 개념 증명을 업로드했습니다 .
ls ^[:echom "This could be a silent command."^Mi -la
삽입 모드에 있고이 텍스트를 터미널 Vim에 붙여 넣으면 (일부 한정자와 함께 아래 참조) 명령 ls -la
을 실행 :messages
하면 숨겨진 Vim 명령의 결과를 볼 수 있습니다.
방어
정상 모드를 유지하고 사용하여 붙여 넣기하는 것이 가장 좋습니다이 공격에 대한 방어 "*p
나 "+p
. 일반 모드에서는 페이지의 레지스터에서 utting의 텍스트 (숨겨진 부분 포함) 전체 텍스트를 붙여 넣습니다. 삽입 모드 (에도 :set paste
)가 설정되어있는 경우에도 마찬가지 입니다.
브라켓 붙여 넣기 모드
최신 버전의 Vim은 이러한 유형의 복사 붙여 넣기 공격을 완화 하는 브라켓 붙여 넣기 모드 를 지원 합니다. Sato Katsura는 "브래킷 붙여 넣기 지원은 Vim 8.0.210에 나타 났으며 가장 최근에는 8.0.303 (2017 년 2 월 2 일에 릴리스) 버전에서 수정되었습니다"라고 설명했습니다.
참고 : 내가 알고있는 것처럼, 괄호 붙여 넣기 모드를 지원하는 빔의 버전을 해야 사용하여 붙여 넣을 때 당신을 보호 Ctrl- Shift- V(대부분의 GNU / 리눅스 데스크톱 환경을), Ctrl- V(MS 윈도우), Command- V(맥 OS X) Shift- Insert나 마우스 가운데 클릭.
테스팅
나중에 Lubuntu 16.04 데스크톱 시스템에서 일부 테스트를 수행했지만 결과가 혼란스럽고 결정적이지 않았습니다. 나는 항상 GNU 스크린을 사용하기 때문에 이것이 깨달았다는 것을 알았지 만 스크린 은 브라켓 붙여 넣기 모드를 활성화 / 비활성화하는 데 사용되는 이스케이프 시퀀스를 필터링합니다 ( 패치가 있지만 한 번에 제출 된 것처럼 보입니다) 프로젝트가 적극적으로 유지되고 있지 않았습니다). 필자의 테스트에서 개념 증명은 Vim 또는 터미널 에뮬레이터가 브라켓 붙여 넣기 모드를 지원하는지 여부에 관계없이 GNU 화면을 통해 Vim을 실행할 때 항상 작동합니다.
추가 테스트는 유용하지만 지금까지 GNU 에뮬레이션이 관련 이스케이프 시퀀스를 차단하지 않는 한 터미널 에뮬레이터에 의한 브라켓 붙여 넣기 모드 지원이 내 개념 증명을 차단한다는 것을 알았습니다. 그러나 사용자 nneonneo 는 이스케이프 시퀀스를 신중하게 조작하여 브래킷 붙여 넣기 모드를 종료하는 데 사용할 수 있다고 보고 합니다.
최신 버전의 Vim을 사용하더라도 사용자 *
가 삽입 모드에서 ( Ctrl- R*) 를 입력 하여 레지스터 에서 붙여 넣을 경우 개념 증명이 항상 작동합니다 . 이는 입력 된 입력과 붙여 넣은 입력을 구별 할 수있는 GVim에도 적용됩니다. 이 경우 Vim은 등록 내용의 내용을 신뢰하도록 사용자에게 맡깁니다. 신뢰할 수없는 출처에서 붙여 넣을 때이 방법을 사용하지 마십시오 (내가 자주하는 일이지만 이제는하지 말아야 할 훈련을 시작했습니다).
관련된 링크들
결론
( +
또는 *
레지스터에서) 텍스트를 붙여 넣을 때 일반 모드를 사용하십시오 .
… 또는 Emacs를 사용하십시오. 괜찮은 운영 체제라고 들었습니다. :)