近日,Wiz 研究團隊在 Azure 應用程式服務中檢測到一個不安全的預設行為——“NotLegit”漏洞。這意味著,使用 PHP、Python、Ruby 或 Node 語言編寫的“本地 Git”部署應用程式的原始碼或該遭暴露。據悉,“NotLegit”漏洞自 2017 年 9 月以來就存在,目前或已經被攻擊者利用。
據瞭解,Wiz 早在 2021 年 10 月 7 日就向微軟方面報告了這一安全漏洞,目前已得到緩解。但對小型企業客戶來說或仍有潛在暴露風險,這裡也提醒他們應採取某些行動,來保護他們的應用程式,詳細可檢視微軟於 2021 年 12 月 7日- 15 日釋出的電子郵件通知。
“NotLegit”漏洞:本地 Git 儲存庫可公開訪問
Wiz 方面提醒稱,將 Git 儲存庫部署到 Web 伺服器和 storage buckets 時,千萬要確保 .git 資料夾是未上載的。這是因為 .git 資料夾包含原始碼、開發人員的電子郵件等其他敏感資料。
而通過“本地 Git”的方式部署到 Azure 應用程式服務時,Git 儲存庫是在任何人都可以訪問的公共可訪問目錄(/home/site/wwwroot)中建立的(Wiz 稱這是微軟眾所周知的“怪癖”)。為了保護使用者個人檔案,微軟將“web.config”檔案新增到限制公用訪問的 .git 資料夾公用目錄裡,但僅 Microsoft IIS web 伺服器可以處理“web.config”檔案(如果使用 IIS 部署的 C# 或 ASP.NET 應用程式,這種緩解措施也同樣有效)。
問題來了,由於 PHP、Ruby、Python 或 Node 這些程式語言是與不同的 web 伺服器(Apache、Nginx、Flask 等)一起部署的,而這些伺服器又不處理“web.config”檔案,所以上面的緩解措施是無效,也正因為如此,使用這些程式語言的應用就非常容易受到“NotLegit”漏洞攻擊。
基本上,“NotLegit”漏洞——惡意攻擊者所要做的就是從目標應用程式獲取“/.git”目錄,並檢索其原始碼。
有趣的是,微軟 web 的配置檔案由於一個輸入錯誤(配置標記未正確關閉),這使得 IIS 無法解析該檔案,也因此在此次漏洞事件中“倖免於難”。
同時微軟也發現使用其他 Git 部署工具的使用者同樣或被暴露:若任何 Git 部署之前,在 Azure 應用程式服務容器中建立或修改了檔案(使用 FTP、Web 部署或 SSH),服務就會進入“就地部署”狀態,此狀態會強制未來在可公開訪問的目錄中啟動任何 Git 部署。
“NotLegit”漏洞:受影響範圍
自 2017 年 9 月以來,所有在 Azure 應用程式服務中使用“Local Git”部署的 PHP、Node、Ruby 和 Python 應用程式或都受到該“NotLegit”漏洞的影響。唯一未受此安全漏洞影響的應用程式,是基於 IIS 的應用程式.
眾所周知,Git 資料夾是一個常見的安全問題,但很多使用者根本沒有意識到這一點。
惡意攻擊者會不斷掃描網際網路,尋找暴露的 Git 資料夾,並從中收集機密和智慧財產權。除原始碼可能包含密碼及訪問令牌等祕密外,洩露的原始碼還經常被用於進一步複雜的攻擊,如收集科技巨頭研發部門資訊、瞭解內部基礎設施以及查詢軟體漏洞等。
通過使用者錯誤,意外的暴露了 Git 資料夾是一個安全問題,甚至會影響大型國際活動。“NotLegit 漏洞”的突出之處在於雲使用者是無辜的:他們並未錯誤地暴露他們的 Git 資料夾——Azure 服務,但因為安全問題發生在 Azure 服務中,所以雲使用者才被大規模暴露,但這是他們並不知情也無法控制的事情。
對於此次事件,推特上不少開發者使用者紛紛鼓勵所有受影響的用向微軟上報 “NotLegit 漏洞”,在瞭解此問題的嚴重性之後,微軟也及時採取了措施調查和緩解此問題。
在剛剛過去的 12 月 7-15 日,微軟已向所有受影響的使用者傳送了不同的通知。同時,微軟還為發現該問題的 Wiz 團隊提供了 7500 美元的獎金。
關於 Azure 應用程式服務
Azure 應用程式服務(又名 Azure Web 應用程式),是一款基於雲端計算用於託管網站和Web應用程式的平臺。該服務易於使用,因此非常流行:
1、選擇受支援的程式語言和作業系統。
2、使用FTP、SSH或從Git服務(如GitHub或專用Git儲存庫)提取原始碼,在Azure託管伺服器上部署應用程式原始碼或構件。
3、部署後,internet上的任何人都可以在 *.azurewebsites.net domain 域下訪問該應用程式。
關於“本地Git”:
Azure 可通過多種方式將原始碼和構件部署到Azure應用程式服務,其中一種方式就是“本地Git”。通過“Local Git”,使用者可在 Azure 應用程式服務容器中啟動一個本地 Git 儲存庫,這樣就能將程式碼直接推送到伺服器。