Kate Li (Taiwan)的部落格

首頁

通過xss漏洞竊取amazon ec2金鑰

作者 iacona 時間 2020-03-10
all

在最近的一次活動中,我們的測試人員面對的是一個用於生成PDF檔案的單頁web應用程序,這個web應用程序包含一個多步驟表單,最終允許用戶下載包含他們輸入的詳細資訊的PDF檔案。

當用戶在表單中前進時,輸入的數據偶爾會在以後的問題中重新顯示。我們試圖在此工作流中找到XSS漏洞;儘管應用程序本身正確地轉義了用戶輸入,但在下載PDF檔案時發現了一個有趣的發現:PDF檔案似乎首先呈現為HTML頁面。這一結論來自於這樣一個事實:在應用過程中提交的HTML標記(特別是John Doe)在PDF檔案中呈現為粗體文字。

使用帶有腳本標記的有效負載可以檢索視窗位置(<script>document.write(window.location);</script>)。我們發現該頁面是從localhost訪問的;通過將“localhost”替換為實際的宿主功能變數名稱,可以直接查看包含XSS漏洞的頁面。

囙此,為了概括我們現時的理解,我們有一個web應用程序接受用戶輸入,不安全地將數據反映到HTML頁面中,允許JavaScript執行,在本地呈現頁面,並將其保存為可供下載的PDF檔案。

使用影像標籤(<img src=“attack.ip/owned.jpg”>)負載可以讓我們(通過用戶代理頭)看到Chrome 59 headless正在伺服器端創建PDF檔案。反向DNS查找也在連接IP上執行,顯示為Amazon EC2實例。

由於易受攻擊的頁面允許在遠程服務器上執行JavaScript,此XSS攻擊實際上已成為伺服器端請求偽造(SSRF)漏洞。這允許我們的測試人員攻擊在本地主機或內部網絡上運行的軟件和服務。枚舉環境時發現沒有任何易受攻擊的服務來進一步擴展攻擊鏈。

不過,由於主機運行在Amazon EC2上,囙此可能會發生另一次攻擊。Amazon EC2有一個web API來訪問實例中繼資料,並且使用JavaScript重定向(<script>window.location=“http://169.254.169.254/latest/meta data/iam/security credentials/”</script>),可以公開機器標識和訪問管理(iam)角色。找到了單個角色,並選取了該角色對應的AWS訪問金鑰。這些訪問金鑰可用於對AWS API進行程式設計調用。在此實例中,附加到角色的許可權限制太大,無法進一步利用。

總之,覈心漏洞是用戶數據不安全地反映到網頁中並在遠程服務器上執行。這一點在一天之內就得到了修補,並引起了應用程序開發人員的注意。提出了一些附加的硬化科技,這些科技在一開始會限制攻擊面。使用檔案範本庫實現PDF生成本來是一個更安全和優化的解決方案。所涉及的開銷將更少,而且無需依賴潜在的風險HTML呈現。

儘管用於生成PDF的網頁是可公開訪問的(如果知道正確的URL),但這並不是有意或必需的。該頁應僅限於本地主機訪問。在包含用戶數據的頁面上禁用JavaScript會降低影響,儘管即使如此,iframes也可能在某些配寘中允許其他攻擊。

附加到EC2實例的所有IAM角色都應具有所需的絕對最小許可權集。這似乎是在這個約定中列舉的角色的情况。此外,應該限制對實例中繼資料API本身的訪問,只允許那些需要訪問的用戶訪問。這可以通過iptables來執行,並顯著减少在Amazon EC2實例上發現的SSRF漏洞的影響。