自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Git嚴(yán)重漏洞,遠(yuǎn)程執(zhí)行代碼,Mac和Windows通殺!

安全 漏洞
Git中的鉤子是一些腳本,這些腳本在Git的特定事件發(fā)生時(shí)自動(dòng)執(zhí)行。鉤子允許你在Git操作的不同階段執(zhí)行自定義操作,如代碼格式化、測(cè)試運(yùn)行、通知發(fā)送等。

不得了了,家人們!

就在這幾天,Git爆出了一個(gè)嚴(yán)重漏洞,編號(hào)CVE-2024-32002,一個(gè)可以遠(yuǎn)程執(zhí)行代碼的RCE漏洞!

攻擊者精心準(zhǔn)備一個(gè)Git項(xiàng)目,只要你嘗試去Clone它,你的電腦就能執(zhí)行攻擊代碼淪陷。

比如下面這個(gè)GitHub上面的項(xiàng)目:

圖片圖片

你可以執(zhí)行一下下面的命令:

git clone --recursive git@github.com:amalmurali47/git_rce.git

不出意外的話,你的電腦將會(huì)彈出計(jì)算器程序:

圖片圖片

能讓你彈計(jì)算器,就能執(zhí)行其他更危險(xiǎn)的操作,比如給你種木馬等等。

Git是我們程序員基本離不開(kāi)的工具,這波漏洞操作,屬實(shí)是對(duì)程序員定向打擊了。

接下來(lái)我們來(lái)理一理這個(gè)漏洞的工作原理是怎么樣的。

在介紹攻擊原理之前,得先來(lái)了解幾個(gè)東西。

1、Git 鉤子

在Git里面有一個(gè)HOOK的機(jī)制,就是鉤子的意思。不過(guò)這個(gè)HOOK不是咱們二進(jìn)制安全攻擊中的那個(gè)HOOK。

Git中的鉤子是一些腳本,這些腳本在Git的特定事件發(fā)生時(shí)自動(dòng)執(zhí)行。鉤子允許你在Git操作的不同階段執(zhí)行自定義操作,如代碼格式化、測(cè)試運(yùn)行、通知發(fā)送等。

Git 設(shè)計(jì) hooks(鉤子)的初衷是為了讓用戶(hù)能夠在特定的 Git 事件發(fā)生時(shí)自動(dòng)執(zhí)行自定義腳本或操作。這些鉤子提供了一種機(jī)制,可以在 Git 操作的各個(gè)階段插入用戶(hù)自定義的邏輯,以便實(shí)現(xiàn)更強(qiáng)大的自動(dòng)化和定制化流程。

Git鉤子分為服務(wù)端和客戶(hù)端鉤子,在咱們程序員使用的Git客戶(hù)端中,有下面這幾個(gè)鉤子:

  • pre-commit:在提交之前運(yùn)行。可以用來(lái)檢查代碼格式、運(yùn)行單元測(cè)試等。
  • prepare-commit-msg:在提交信息編輯器打開(kāi)之前運(yùn)行??梢杂脕?lái)自動(dòng)生成提交消息模板。
  • commit-msg:在提交信息編輯器關(guān)閉之后運(yùn)行??梢杂脕?lái)驗(yàn)證提交消息的格式。
  • post-commit:在提交完成之后運(yùn)行??梢杂脕?lái)發(fā)送通知或執(zhí)行其他后續(xù)任務(wù)。
  • pre-rebase:在變基操作之前運(yùn)行??梢杂脕?lái)檢查變基前的狀態(tài)。
  • post-checkout:在 git checkout 命令執(zhí)行之后運(yùn)行??梢杂脕?lái)設(shè)置特定文件的狀態(tài)。
  • post-merge:在合并操作完成之后運(yùn)行??梢杂脕?lái)重新編譯項(xiàng)目或執(zhí)行其他合并后的任務(wù)。

那這些鉤子腳本是存放在哪里的呢?就是在那個(gè)神秘的.git目錄下。

大家可以去看一下自己電腦上,不管是從GitHub克隆的項(xiàng)目,還是從公司的git服務(wù)器克隆的項(xiàng)目,你們的代碼目錄下,都有一個(gè)叫.git的文件夾,它的目錄結(jié)構(gòu)大致是下面這樣的:

圖片圖片

當(dāng)我們創(chuàng)建一個(gè)新的Git項(xiàng)目時(shí),執(zhí)行完git init后,git就會(huì)為我們創(chuàng)建一個(gè).git目錄。

而我們剛才說(shuō)的鉤子腳本,就放在.git/hooks里面,git默認(rèn)為我們提供了一些鉤子腳本的示例。

圖片圖片

你可以在這里面添加一些自己的腳本程序,這樣當(dāng)你在執(zhí)行對(duì)應(yīng)的git命令操作時(shí),對(duì)應(yīng)的腳本程序就會(huì)得到執(zhí)行。

要注意,.git目錄下的內(nèi)容,是git程序自己在維護(hù),不會(huì)受到Git項(xiàng)目里的內(nèi)容的影響。你在上傳代碼的時(shí)候,.git目錄也不會(huì)被傳到服務(wù)器上去。

所以,正常情況下,你從服務(wù)器克隆一個(gè)項(xiàng)目的時(shí)候,只是把項(xiàng)目拉到本地,不用擔(dān)心執(zhí)行惡意的HOOK腳本,因?yàn)?git目錄是你本地的git客戶(hù)端程序創(chuàng)建的,除非你手動(dòng)去把鉤子腳本放到里面去,否則里面是不會(huì)有惡意鉤子腳本的。

但是,我要說(shuō)但是了,這一次漏洞的操作就很騷,騷在哪里呢?騷就騷在,它巧妙的利用了一個(gè)特性,把攻擊腳本給寫(xiě)到.git目錄下面去了!

這是怎么辦到的呢?這需要了解另一個(gè)Git的知識(shí)。

2、子模塊

子模塊是嵌套在一個(gè) Git 倉(cāng)庫(kù)中的另一個(gè) Git 倉(cāng)庫(kù),可以讓你在一個(gè)項(xiàng)目中包含其他項(xiàng)目,比如某個(gè)開(kāi)源項(xiàng)目要依賴(lài)于其他的開(kāi)源項(xiàng)目。

在這種情況下,主項(xiàng)目下面會(huì)存在一個(gè).gitmodules文件,里面會(huì)記錄該項(xiàng)目包含的其他Git項(xiàng)目的信息。

圖片圖片

其中,path指定子模塊存放的位置,url指定子模塊的Git倉(cāng)庫(kù)地址。

我們?cè)趫?zhí)行g(shù)it clone克隆項(xiàng)目的時(shí)候,如果指定了一個(gè)遞歸的參數(shù):--recursive,就會(huì)在拉取主項(xiàng)目之后,然后根據(jù)這個(gè)文件中的內(nèi)容,遞歸的去拉取所依賴(lài)的其他子模塊,然后放到對(duì)應(yīng)的文件目錄位置。

不僅主項(xiàng)目有一個(gè).git目錄來(lái)記錄項(xiàng)目相關(guān)的信息,子模塊也有。你去上面這個(gè)path目錄下去看,會(huì)發(fā)現(xiàn)這里也有一個(gè).git,不過(guò)這個(gè).git不是一個(gè)文件夾,而是一個(gè)文件,里面記錄了這個(gè)子模塊對(duì)應(yīng)的真正的.git目錄的位置。

這個(gè)位置一般在主項(xiàng)目.git目錄下的modules文件夾下面。

3、符號(hào)鏈接

接下來(lái)了解與這個(gè)漏洞相關(guān)的第三個(gè)知識(shí)點(diǎn):符號(hào)鏈接。

在 Git 中,符號(hào)鏈接(symbolic link,簡(jiǎn)稱(chēng) symlink)是指向另一個(gè)文件或目錄的特殊類(lèi)型的文件。符號(hào)鏈接本身不包含文件的內(nèi)容,而是包含指向目標(biāo)文件或目錄的路徑。當(dāng)訪問(wèn)符號(hào)鏈接時(shí),系統(tǒng)會(huì)自動(dòng)重定向到其指向的目標(biāo)。

簡(jiǎn)單理解的話,這玩意兒有點(diǎn)像快捷方式。

4、漏洞成因

好了,了解了上面這些知識(shí)背景,接下來(lái),就要說(shuō)說(shuō)這個(gè)漏洞的成因了。

剛才說(shuō)過(guò),鉤子腳本位于.git目錄中,而這個(gè)目錄是與項(xiàng)目本身的內(nèi)容無(wú)關(guān)的,它的內(nèi)容是git客戶(hù)端在維護(hù),除非你手動(dòng)放置腳本程序到hooks目錄中,否則項(xiàng)目中的內(nèi)容是不會(huì)跑到.git目錄中的。

而這次漏洞就采用了一個(gè)騷操作:

攻擊者準(zhǔn)備一個(gè)Git項(xiàng)目,在這個(gè)Git項(xiàng)目中,又依賴(lài)一個(gè)子項(xiàng)目。當(dāng)采用--recursive參數(shù)的時(shí)候,遞歸去拉取對(duì)應(yīng)的子項(xiàng)目,放到對(duì)應(yīng)的位置。

圖片圖片

就像上面這樣,它指示git,把url中的項(xiàng)目拉下來(lái)放到A/modules/x目錄中。

然后騷操作來(lái)了:在這個(gè)項(xiàng)目下,有一個(gè)名字叫a的符號(hào)鏈接,并且讓它指向了.git目錄。

圖片圖片

因?yàn)閃indows和Mac平臺(tái)的文件和目錄名稱(chēng)是大小寫(xiě)不敏感,注意這點(diǎn)很重要,導(dǎo)致在放置子模塊到A/modules/x的時(shí)候,實(shí)際上就是放到了.git/modules/x目錄下去了。

Git項(xiàng)目?jī)?nèi)容寫(xiě)到.git目錄下了!事情就出在這里了!.git目錄是git程序的私家花園,被項(xiàng)目?jī)?nèi)容闖了進(jìn)來(lái)!

你可能會(huì)問(wèn),一定要大小寫(xiě)不一樣嗎,我直接在.gitmodules文件里面指定讓它寫(xiě)到小寫(xiě)的a/modules/x路徑下不行嗎?

還真不行,我試過(guò)了,git直接報(bào)錯(cuò)了:

圖片圖片

看來(lái),git基本的檢查工作還是做了的,只是疏漏了大小寫(xiě)不一樣的情況。

繼續(xù)我們剛剛的分析,.git目錄這個(gè)git程序的私家花園,被人給闖進(jìn)來(lái)了。

而且關(guān)鍵是它闖進(jìn)來(lái)的位置是在.git/modules/x下面,前面說(shuō)過(guò),這個(gè)目錄下面,是子模塊所屬的.git目錄,然后這個(gè)闖進(jìn)來(lái)的家伙,還按照.git目錄的結(jié)構(gòu),里面放置一個(gè)hooks文件夾,里面放上相關(guān)的鉤子腳本,等下git clone完成的時(shí)候,就會(huì)去執(zhí)行這里的腳本程序了。

圖片圖片

克隆完成之后的整個(gè)目錄結(jié)構(gòu)變成了這樣:

圖片圖片

圖片圖片

我用procmon抓了一下執(zhí)行下面這條克隆命令到彈出計(jì)算器進(jìn)程中間的過(guò)程:git clone --recursive git@github.com:amalmurali47/git_rce.git

大家從進(jìn)程的父子關(guān)系樹(shù)和進(jìn)程的命令行參數(shù),就能看到這條攻擊鏈路了:

圖片圖片

最后總結(jié)一下:

1、攻擊者精心構(gòu)造了一個(gè)Git項(xiàng)目,這個(gè)項(xiàng)目依賴(lài)一個(gè)子項(xiàng)目,并且指定了這個(gè)子項(xiàng)目存儲(chǔ)的路徑為A。

2、在這個(gè)Git項(xiàng)目下,有一個(gè)名為a的符號(hào)鏈接,指向了.git目錄。

3、子項(xiàng)目里面構(gòu)造了一個(gè)hooks目錄,攻擊腳本存放在里面。

4、最后,遞歸克隆項(xiàng)目的時(shí)候,因?yàn)槟夸洿笮?xiě)不敏感的原因,子項(xiàng)目實(shí)際上被寫(xiě)到了.git目錄下。

5、相關(guān)的克隆動(dòng)作,觸發(fā)了post-checkout鉤子的執(zhí)行,而現(xiàn)在的hooks目錄下,被寫(xiě)入了攻擊者的惡意鉤子腳本,于是就執(zhí)行了這個(gè)惡意腳本。

Windows:

圖片圖片

Mac:

圖片圖片

以上就是本次漏洞的大致過(guò)程了。

本次漏洞受影響的版本有:

  • v2.45.0
  • v2.44.0
  • <=v2.43.3
  • <=v2.42.1
  • v2.41.0
  • <=v2.40.1
  • <=v2.39.3

趕緊來(lái)執(zhí)行g(shù)it --version看看你的版本有沒(méi)有在上面的范圍里,是的話趕緊升個(gè)級(jí)吧!

圖片 圖片

責(zé)任編輯:武曉燕 來(lái)源: 軒轅的編程宇宙
相關(guān)推薦

2011-08-04 13:53:04

2021-02-28 13:29:16

黑客漏洞網(wǎng)絡(luò)安全

2021-09-16 14:06:55

遠(yuǎn)程代碼漏洞微軟

2017-06-15 17:28:36

2017-06-14 10:02:22

2017-05-11 22:53:49

2021-01-26 10:00:45

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2015-03-06 15:31:01

2014-10-31 09:46:25

FTP遠(yuǎn)程執(zhí)行漏洞安全漏洞

2013-07-08 11:29:21

2015-04-22 09:18:25

2021-07-27 11:01:02

Windows

2021-07-01 13:22:11

遠(yuǎn)程代碼零日漏洞微軟

2015-04-18 21:00:11

2014-10-30 14:02:26

LinuxFTP漏洞

2021-04-13 16:40:18

0Day漏洞遠(yuǎn)程代碼

2020-10-08 13:44:27

漏洞

2019-05-15 15:20:01

微軟漏洞防護(hù)

2017-08-22 13:45:27

2014-08-27 16:22:19

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)