33

GNU Wget 1.18 이전 버전 신규 취약점 분석

HansolNexG 제품/시장

(CVE-2016-4971 : Arbitrary File Upload / Potential Remote Code Execution)   최근 Wget의 신규 취약점이 발표 되었습니다.
CVE : CVE-2016-4971 발표 : 2016-06-07
취약점 : Arbitrary File Upload / Potential Remote Code Execution
설명 : HTTP -> FTP redirection을 통한 파일 업로드 시 파일명 체크 미흡
대상 : GNU Wget v.1.18 이전
 
Wget
Wget은 네트워크 상에서 데이터를 다운로드 받는 command 기반의 프로그램으로 HTTP, HTTPS, FTP 프로토콜을 지원합니다. 상호작용이 필요치 않으며, 백그라운드 상태에서도 cron이나 Daemon을 이용해 wget을 실행할 수 있습니다. 다양한 옵션으로 전체 사이트를 다운로드 하거나, 끊어진 다운로드를 이어서 받는 등의 기능을 가지고 있습니다. * Wget : https://www.gnu.org/software/wget/    
취약점
1.18 이전 버전의 wget에서 외부 서버로 데이터 요청 시, 302[1]와 같이 Redirection되는 응답을 만났을 때 Redirection되는 위치의 파일을 받아오게 되며, 이 때 다운로드 되는 파일은 사용자가 요청한 파일명이 아닌 Redirection된 파일의 이름을 따라갑니다. 즉 악의적으로 변조된 서버에서 응답을 받는다면, 공격자가 의도한 파일을 사용자 시스템에 업로드 할 수 있게되며, wget이 사용되는 상황에 따라 원격코드 실행 및 root 권한 상승이(wget이 root cronjob을 통해 실행) 가능할 수 있는 취약점 입니다. (요청 옵션에 따라(‘-O’-output 파일명 지정-등) 취약 하지 않을 수 있음)   아래는 취약점을 이용한 공격 중 사용자 시스템에 Webshell을 upload 하는 과정입니다. 1) Vimtim 시스템에서 외부 서버의 index.php 페이지를 요청 (wget 실행 위치 : Web Document Root) 11 2) 서버는 Victim의 요청에 302 Redirection을 response 22 3) Victim 시스템은 302 Redirection에 의해 ftp 서비스의 파일을 다운로드 33 4) Victim 시스템에 생성된 Webshell로 계정 정보 조회 44   wget 실행 위치에 따른 제약은 wget이 사용자의 home directory(/home/계정)에 실행될 경우, 취약점을 이용해 해당 위치에 악의적으로 작성된 .wgetrc(wget을 위한 default 파일)을 업로드하여 이 후 실행되는 wget의 response 변조(proxy 설정) 및 업로드 경로를 제어할 수 있습니다. 이 때 사용될 수 있는 wgetrc 항목은 아래와 같습니다.
dir_prefix = string Top of directory tree the same as -P string.   post_file = file Use POST as the method for all HTTP requests and send the contents of file in the request body. The same as –post- file=file.   recursive = on/off Recursive on/off the same as -r   timestamping = on/off Allows to overwrite existing files.   cut_dirs = n Ignore n remote directory components. Allows attacker to create directories with wget (when combined with recursive option).   http_proxy HTTP Proxy server   https_proxy HTTPS Proxy server   output_document = file Set the output filename the same as -O file   input = file Read the URLs from string, like -i file   metalink-over-http Issues HTTP HEAD request instead of GET and extracts Metalink metadata from response headers. Then it switches to Metalink download. If no valid Metalink metadata is found, it falls back to ordinary HTTP download.
    [1] 30x : HTTP Response Code 중 해당 페이지의 redirect를 알리는 코드
영향도
해당 취약점의 활용 및 발생할 수 있는 영향 중 일부 입니다. – MITM(Man In The Middle Attack) : 공격자는 Victim 서버가 포함된 네트워크에 위치하여 Victim 서버에서 발생하는 wget traffic에 대한 intercept/modify 가능 – Arbitrary File Upload : 조작된 임의의 .bash_profile, .wgetrc, webshell 등의 파일을 피해 시스템에 업로드 – Remote Code Execution : 피해 시스템에 업로드된 webshell을 이용한 원격 코드 실행    
조치 방안
– 최신 버전의 Wget 설치 * http://lists.gnu.org/archive/html/info-gnu/2016-06/msg00004.html    
결론
wget 통신 설정을 외부에서 알 수 있는 경우는 드뭅니다. 하지만 외부 서비스와의 통신은 주의 깊게 관찰되어야 하며, 공격자는 작은 정보들을 통해 언제든 취약점을 찾을 수 있기 때문에 관리자는 항상 최신 버전으로 업데이트를 유지해야 합니다.    
참고
– https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4971 – https://www.exploit-db.com/exploits/40064/ – https://bugzilla.redhat.com/show_bug.cgi?id=1343666#c1 – http://git.savannah.gnu.org/cgit/wget.git/commit/?id=e996e322ffd42aaa051602da182d03178d0f13e1  

─ 한솔넥스지  박유미 과장 ─