不久前因揭露攻擊手法HTTP/2 Bomb而聲名大噪的資安研究公司Calif,本週公開代號為Squidbleed的資安漏洞CVE-2026-47729,顧名思義,這個漏洞存在於知名的開源網頁代理伺服器(Proxy)與網路快取軟體Squid,而且是類似Heartbleed類似的記憶體洩漏漏洞,原因主要是過去到近期版本Squid的預設配置皆可能導致內部記憶體的內容洩漏,影響範圍相當廣泛。例如,網站伺服器的HTTP存取,以及透過官方套件庫提供 Squid套件的多個Linux發行版,都可能受到影響。
值得注意的是,Squidbleed同樣是透過先進AI模型所發現的漏洞,該公司表示,他們運用Anthropic Claude Mythos探索Squid的內部結構,因此發現這個已存在29年之久的漏洞,而且,也在MADBugs(Month of AI-Discovered Bugs)的GitHub帳號公布利用此漏洞的概念驗證程式碼。Calif表示,這項報告與修正方式在今年4月17日提出,兩天後修正方式納入Squid master/v8分支,5月17日修正方式納入Squid master/v7分支,6月8日發布的Squid v7.6已包含此項修正,目前多個Linux發行版均已公告此項漏洞與列出受影響的版本,像是SUSE、Amazon Linux、Debian。至於CVSS嚴重度評分,出現多家廠商意見不同的現象,例如Rapid7評為 10分,SUSE評為6.5分,Tenable評為9.1分。
簡而言之,Squidbleed的問題涉及FTP與NetWare——Squid預設也支援FTP協定,Claude Mythos在Squid找到FTP目錄列表(directory listing)解析器的漏洞;NetWare是80年代晚期與90年代相當普及的網路作業系統,可供企業用於檔案與列印伺服器,上面也附帶提供FTP服務,用於電腦的檔案傳輸,NetWare FTP伺服器產生目錄列表時,會在檔案修改時戳與名稱之間額外輸出4個空格,但一般FTP伺服器目錄列表的這兩個欄位之間,只間隔1個空格。
當這樣的狀況遇上後續FTP目錄列表擷取檔案名稱的程式碼實作,一旦處理到在字串中尋找字元的函式strchr(w_space,'\0'),在 C 語言中會回傳非 NULL,導致程式把字串結尾誤當成可繼續跳過的空白字元,進而讓字元指標變數copyFrom越界掃描後續記憶體,導致堆緩衝區越界讀取(out-of-bounds read),因此可能隨機洩露用戶的HTTP請求,而這些HTTP請求可能包含密碼或 API金鑰。
Calif建議,在if條件式與while迴圈條件式的前半段加上*copyFrom&&,先計算前面的條件式,如果結果為假(false),後面的條件式就不會被計算。因此,程式會先檢查 *copyFrom 是否為非零值。若 *copyFrom 已是字串結尾字元 '\0',條件判斷立即結束,不會再呼叫 strchr()。
Comments (0)