一、漏洞描述
Samba是一套可使UNIX系列的操作系統與微軟Windows操作系統的SMB/CIFS網絡協議做連結的自由軟件。這個漏洞使得Samba客戶端可以主動上傳共享庫到Samba服務器同時加載並執行該動態庫導出函數。
攻擊者利用漏洞可以進行遠程代碼執行,具體執行條件如下:
1)系統開啟了文件/打印機共享端口445
2)共享文件夾擁有寫入權限
3)惡意攻擊者需猜解Samba服務端共享目錄的物理路徑
滿足以上條件時,由於Samba能夠為選定的目錄創建網絡共享,當惡意的客戶端連接上一個可寫的共享目錄時,通過上傳惡意的共享庫文件,觸發漏洞使samba服務端加載並執行它,從而實現了遠程代碼執行。根據服務器的配置情況,惡意代碼還有可能以root權限執行。
漏洞編號:CVE-2017-7494
危害評級:高危
影響範圍:所有介於 Samba 3.5.0 ~ 4.6.4之間的版本。其中(4.6.4/4.5.10/4.4.14 版本)不受影響。
二、漏洞復現
通過一個可寫賬號,上傳惡意共享庫文件,觸發惡意共享庫文件實現遠程命令執行。
安裝Samba 按照以下要求安裝即可
Samba Version < 4.6.4
Samba Version < 4.5.10
Samba Version < 4.4.14
配置samba
添加下面這些即可,如果之前conf文件中包含的註釋即可
workgroup = WORKGROUP
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
#security = share
[models]
path = /tmp
available = yes
browsable = yes
writable = yes
create mask = 0777
write list = debian
guest ok = yes
如下圖所示:
然後重新加載
/etc/init.d/samba reload
最後啟動服務
/etc/init.d/samba restart
配置 msf
Use exploit/linux/samba/is_known_pipename
Set target 0
Set RHOST localhost
Exploit
最終結果如圖所示:
三、漏洞原理分析
下載版本4.6.3 進行靜態分析漏洞原理:
漏洞通過一個具有可以權限的samba賬號上傳一個惡意共享動態庫上去,並觸發惡意功能。
,我們這裡闡述的是如何加載的惡意動態庫。
漏洞觸發位置:
在這裡可以看到pipename ,這個是管道名,需要利用這個管道名是惡意共享庫so文件參數,比如/tmp/xxx.so , 這個參數在傳遞進smb_probe_module裡,跟進下這個函數:
又把參數傳遞進入了do_smb_load_module()函數裡,再跟進
可以看到如果管道名字存在/, 會進入else 裡調用load_module()函數,把管道名傳遞進來,再繼續跟進:
可以看到把管道名傳遞進入到dlopen函數也就是打開惡意構造的共享庫文件,接著把句柄給了dlsym 加載SAMBA_INIT_MODULE,也就是說惡意共享庫的功能要寫入到samba初始化函數裡才能被加載,這樣就觸發了惡意構造的函數功能呢。
四、修復建議
官方補丁:
官方已經發布安全更新包,用戶可以通過以下2種方案進行安全更新操作。
1、通過源碼安裝的Samba使用者,從Samba官方下載補丁包或者安裝最新版Samba
(安全補丁下載地址:https://www.samba.org/samba/history/security.html)
2、使用二進制分發包(RPM等方式)的Samba使用者通過yum,apt-get update 等命令進行安全更新操作
臨時緩解策略:
1、修改samba文件系統中可寫文件共享目錄的安全屬性,使用“noexec”選項
注:noexec 選項指明在該文件系統上不允許二進制文件或腳本的執行
2、修改samba配置文件smb.conf,在[global]節中增加如下信息
“nt pipe support = no”。 修改完畢重啟samba服務。