티스토리 뷰

개발/Linux

[CVE-2019-12735] Vim 취약점 발견

Jaeyeon Baek 2019.06.11 14:50

https://github.com/vim/vim

https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md

 

평소 vim을 즐겨 쓰고 있는데 회사 동료가 vim 패치를 하셔야 하지 않냐며 링크를 던져주셨습니다. 링크에 취약점 내용을 살펴보니 1) 공격자는 nc(netcat)을 통해 포트를 열고 있고 2) 공격자가 배포한 특수 파일을 보통의 사람이 vim으로 열었을 때 3) 파일에 감춰져있는 코드가 동작. nc로 shell을 실행시켜 공격자에게 연결해주는 방식이네요.

 

셸을 통째로 열어주는 것이기 때문에 상당히 위험한 취약점이지만 이 모든 게 성립하려면 1) 사용자가 계속 특수 파일을 열고 있어야 하고(닫으면 공격자와 연결된 세션이 종료됨), 2) 사용자의 OS에 설치된 nc를 netcat-traditional package로 사용하고 있어야 가능 합니다. 뭐 물론 취약한 버전의 Vim을 사용하고 있어야 한다는 대전제는 필요하고요.

 

일반적으로 Ubuntu 16.04에 설치된 nc는 netcat-openbsd package라서 공격자의 코드가 동작하지 않습니다. -e 옵션(program to exec after connect [dangerous!!])이 없어서 shell을 실행시킬 수 없기 때문인데요. 위 예제가 modern nc를 겨냥해서 만들어졌기 때문에 안전하다고 생각될 수 있는데 사실 예제의 일부만 수정하면 netcat-openbsd package라도 안전하지 않게 됩니다. 그렇다면 취약점에 가장 잘 대처하는 방법은 Vim을 update하는것이겠네요.

git clone https://github.com/vim/vim.git
cd vim
./configure
make
sudo make install

혹시 make 과정에서 아래와 같은 에러가 발생하지 않았는지 확인해야 합니다.

no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.
Makefile:1934: 'config' 타겟에 대한 명령이 실패했습니다
make[2]: *** [config] 오류 1

필요한 라이브러리가 없기 때문인데 이런 경우라면 아래와 같은 패키지를 설치해주도록 합니다.

sudo apt-get install libncurses5-dev libncursesw5-dev

그리고 터미널의 새로운 세션을 열어서 vim의 버전을 확인해보면 정상적으로 업데이트가 된 것이 확인됩니다.

$ vim --version
VIM - Vi IMproved 8.1 (2018 May 18, 빌드한 날짜 Jun 11 2019 14:43:16)

도움이 되셨기를 바랍니다.

댓글
  • 프로필사진 아하하2 vim으로 파일을 열었을때 숨겨진 코드를 실행할 수 있다는게 핵심 아닐까요? 다른조건의 무의미해 보이네요. 일단 코드가 실행된다면 무엇이든 할 수 있으니까요 :) 2019.06.26 17:21
  • 프로필사진 BlogIcon Jaeyeon Baek 네. 그게 골자입니다. :-) 2019.06.26 19:31 신고
댓글쓰기 폼