在廣泛使用的開源代理(轉發網路通訊的伺服器)Squid 中,發現了一個能窺看他人通訊內容的漏洞。資安公司 Calif.io 於 6 月公布,並將其命名為「Squidbleed」(CVE-2026-47729)。造成問題的程式碼寫於 1997 年,在長達 29 年間都無人察覺。而找出它的關鍵,正是 Anthropic 開發的 AI 模型 Claude。

「Squidbleed」是什麼

Squidbleed 是一個讓本不該擁有存取權限的一方,得以讀取 Squid 正在使用的部分記憶體的漏洞。其名稱源自 2014 年引發廣大關注的「Heartbleed」,因為兩者都以相同方式外洩記憶體內容。

外洩的是經過同一個 Squid 的其他使用者的通訊資料。若是未加密的 HTTP 通訊,其中所夾帶的密碼與工作階段權杖(session token,用來維持登入狀態的驗證資訊)也有被竊取的風險。在技術上,它屬於「堆積區溢位讀取(heap over-read)」(讀取超出程式所配置記憶體範圍之外的瑕疵)。

起因是 1997 年寫下的一行程式碼

問題出在 Squid 解析 FTP(檔案傳輸機制)目錄清單的部分。為了相容於會以多餘空格填充清單的老舊裝置,程式碼中寫有如下略過空格的處理:

while (strchr(w_space, *copyFrom)) ++copyFrom;

此時,若攻擊者一方的 FTP 伺服器回傳一個不含檔名的殘缺清單行,讀取位置便會抵達標示字串結尾的「空字元(null 結束字元)」。C 語言的字元搜尋函式 strchr 會把這個結束字元也當作搜尋字串的一部分,因此回傳的是指標,而非本應回傳的 NULL。結果迴圈無法停止,讀取便越過所配置記憶體的邊界繼續進行。

Squid 接著會把越界讀取到的區域當成「檔名」回傳給攻擊者。由於 Squid 會在不清除內容的情況下重複使用已釋放的記憶體,前一刻還存放著其他使用者 HTTP 請求的區域,就這樣原封不動地落入攻擊者手中。

攻擊成立的條件

話雖如此,並非任何人都能隨意利用。能夠發動攻擊的,僅限於已獲准使用該代理的內部人員。主要設想的是學校、辦公室、公共 Wi-Fi 等多人共用一台代理的環境。

外洩的只有 Squid 能夠讀取的通訊,一般的 HTTPS 通訊會以加密通道的形式直接放行,不在此列。此外,攻擊者還需要自行架設一台代理能夠連到的 FTP 伺服器。但由於 FTP 功能與通訊連接埠(21 埠)在 Squid 的預設設定中即為開啟,這項條件實在稱不上特殊。

揪出 29 年前疏漏的 AI

最早指出這個漏洞的,是 Anthropic 的 AI 模型「Claude Mythos Preview」。Calif.io 在以防禦為目的的資安研究專案「Project Glasswing」中使用該模型檢查 Squid 的 FTP 處理,據稱它幾乎瞬間就看穿了 strchr 的這項怪癖。

一行躲過 29 年人工程式碼審查與稽核的程式碼,被 AI 輕鬆找出。類似「埋藏在解析處理中的瑕疵」,在影片處理函式庫 FFmpeg 等其他軟體中也接連被 AI 發現。Calif.io 暗示,Squid 的 FTP 程式碼中或許還殘留著同類疏漏。

因應與嚴重程度

因應方式有兩種。其一是將 Squid 更新至修正版。修正本身很小,也就是在呼叫有問題的 strchr 之前先檢查是否為空字元;它於 4 月併入開發版,5 月併入正式的 v7 系列。不過,修正究竟從哪個版本開始納入,在開發者之間的說法也一再反覆。更新後最好別只看版本號,而應確認相關程式碼是否確實已修正。

其二是乾脆停用 FTP 功能。主流瀏覽器 Chromium 已經廢除 FTP 支援,如今幾乎沒有使用 FTP 的場合。研究者也更推薦這種做法。

嚴重程度在 CVSS 上被評為 6.5 的「中等」。由於攻擊需要代理的使用權限,影響也僅限於資訊外洩,不會造成竄改或服務中斷。概念驗證程式碼已經公開,但截至目前尚未確認有實際攻擊發生。

總結

Squidbleed 儘管成立條件有限,卻是一個利用潛藏長達 29 年疏漏的棘手漏洞。同時,人眼多年未能察覺的區區一行程式碼,竟被 AI 瞬間看穿,這一點本身也備受矚目。可以說,它正是將 AI 運用於資安調查這股潮流的縮影。若你正在運行 Squid,不妨更新至修正版,或在不需要 FTP 時將其停用。