在企業對外提供網頁應用程式的時候,使用者電腦的瀏覽器或是應用程式API,通常要發出請求,經由代理伺服器(Proxy)引導,連線到實際的應用程式伺服器,才能存取相關服務,但在過程中用戶端發出的連線資訊,也可能被攻擊者濫用。在2021年的臺灣資安大會上,IBM軟體工程師陳孝勇首度揭露在協作平臺Slack發現的漏洞(目前尚未取得CVE編號),攻擊者可藉由這項防護上的瑕疵,進而發動伺服器端請求偽造(SSRF)攻擊。這項漏洞經陳孝勇通報後,Slack已經完成相關修補,並即將在漏洞懸賞平臺HackerOne上公布。

為何Slack會出現這樣的漏洞?陳孝勇說,現在的雲端服務非常普及,而用戶端的每個API發出呼叫請求後,都會經由許多的代理伺服器轉傳,最終才會到達真正提供服務的目標伺服器,而在轉傳的過程裡,企業的網頁應用程式要如何得知原始用戶端來源IP位址、要引導的應用程式伺服器位置等資訊?這時就是利用X-Forwarded-For、X-Forwarded-Host等HTTP標頭(Header)來取得有關資訊。而陳孝勇所發現的漏洞,就是Slack在對於X-Forwarded-Host資訊的處理上不夠嚴謹,一旦有人發現就能用來發送惡意請求,進而對應用程式伺服器為所欲為,例如,探測Slack的內部網路環境。

這些由用戶端發出的HTTP標頭資訊,包含了X-Forwarded-For、X-Forwarded-Host、X-Forwarded-Port,以及X-Forwarded-Proto等。X-Forwarded-For提供了來源的IP位址與經過的代理伺服器位址;X-Forwarded-Host則是指定要連線的應用程式伺服器位址;而X-Forwarded-Port、X-Forwarded-Proto分別是指定存取的連接埠和通訊協定。由於這些資訊是用戶端提供,對於網站應用程式而言,很有可能接收到攻擊者刻意下達的指令,而成為系統被入侵的破口。

更進一步來說,在本次揭露漏洞的概念性驗證展示中,陳孝勇利用可修改發送標頭資訊的工具,向Slack存放用戶附件的file.slack.com網域下手,發送特定的X-Forwarded-Host資訊--將「file.slack.com」當成帳號名稱放在前端,再接上「@」與他自己事先架設的網站網址35.229.x.x(下圖紅線標示處),如此一來,這組字串代表的意思,是要求Slack的代理伺服器將使用者引導到陳孝勇的網站,而這樣的做法卻又能騙過Slack代理伺服器的檢查機制:X-Forwarded-Host資訊必須是「file.slack.com」開頭的網址。

照理來說,Slack限制X-Forwarded-Host開頭的做法,目的是使用者只能存取「file.slack.com」網域下的資源,這乍聽之下似乎很合理,卻無法防範上述把該網域當成帳號名稱的手法。由於這樣防護瑕疵很有可能存在於其他企業的網頁應用程式,因此陳孝勇呼籲網站管理者,必須使用較為嚴格的過濾政策,來防範這種濫用X-Forwarded-Host的攻擊行為。

對於前述Slack的漏洞中,可讓攻擊者操弄X-Forwarded-Host的攻擊手法,陳孝勇指出其他網站應用程式的管理者也要防範相關攻擊,例如,可從應用程式伺服器下手,並使用圖中的正規表示法,限制用戶端存取應用程式伺服器的網址,來避免攻擊者挾帶其他字元的情況。

熱門新聞

Advertisement