新的“ParseThru”參數走私漏洞影響基于 Golang 的應用程序
安全研究人員發現了一個名為ParseThru的新漏洞,該漏洞會影響基于 Golang 的應用程序,該漏洞可能被濫用以未經授權訪問基于云的應用程序。
以色列網絡安全公司 Oxeye 在與 The Hacker News 分享的一份報告中說:“由于使用了該語言內置的不安全 URL 解析方法,新發現的漏洞允許攻擊者在某些條件下繞過驗證。”
這個問題的核心在于,由于引入了在“net/url”庫中實現的 Golang 的 URL 解析邏輯的更改而導致的不一致。
雖然 1.17 之前的編程語言版本將分號視為有效的查詢分隔符(例如,example.com?a=1;b=2&c=3),但此行為已被修改為在找到包含以下內容的查詢字符串時引發錯誤一個分號。

根據去年 8 月發布的 1.17 版本的發行說明,“net/url 和 net/http 包用于接受“;”(分號)作為 URL 查詢中的設置分隔符,以及“&”(與號) 。
“現在,帶有非百分比編碼分號的設置被拒絕,當在請求 URL 中遇到一個時,net/http 服務器將向‘Server.ErrorLog’記錄一個警告。”

當基于 1.17 或更高版本構建的基于 Golang 的公共 API 與運行早期版本的后端服務通信時,就會出現問題,從而導致惡意行為者可以走私包含查詢參數的請求,否則這些請求將被拒絕。
簡而言之,這個想法是發送在查詢字符串中包含分號的特制請求,面向用戶的 Golang API 將忽略該分號,但由內部服務處理。
反過來,由于負責獲取已解析查詢字符串的方法之一會默默地丟棄返回的錯誤消息,這反過來又成為可能。
Oxeye 表示,它在 Harbour、Traefik 和 Skipper 等開源項目中發現了幾個 ParseThru 實例,這使得繞過現有的驗證并執行未經授權的操作成為可能。在向各自的供應商負責任地披露后,這些問題已得到解決。
這不是 URL 解析第一次提出安全問題。今年 1 月初,Claroty 和 Snyk披露了使用 C、JavaScript、PHP、Python 和 Ruby 語言編寫的第三方庫中多達 8 個缺陷,這些缺陷源于 URL 解析中的混淆。