別讓桌面應用程式變成內網掃描器:AI Agent 的 SSRF 防護
AI 助理可能把指向你家路由器的連結交給桌面應用程式。KwaFlux 如何像瀏覽器一樣解析主機、再次檢查 DNS 解析結果,以及防護範圍到哪裡為止。
重點速覽
- 如果 AI 助理能要求桌面應用程式抓取連結,一段被動過手腳的指令,就能讓它連向你的路由器、本機服務或雲端中繼資料位址,而不是影片。
- 同一個位址有很多種寫法:
127.1、2130706433、0x7f000001和[::ffff:127.0.0.1]都會連到這台電腦。KwaFlux 用瀏覽器的方式解析主機名稱,所以每一種寫法都會還原成它真正代表的位址再檢查。 - 下載即將開始時,KwaFlux 還會解析主機名稱;如果名稱指向這台電腦或私人網路,就會拒絕,但不會擋到代理工具在 fake-IP 模式下使用的位址範圍。
- 下載過程中的重新導向和 DNS rebinding 目前尚未涵蓋。我們直接說清楚,這兩項已列入我們的開發計畫。
AI 助理要求 KwaFlux 下載連結時,負責連線的是 KwaFlux 的下載引擎。這個引擎在你的電腦上、在你的網路裡執行。如果連結指向的是 http://192.168.1.1/,而不是影片頁面,不夠謹慎的應用程式就會二話不說,替 AI 助理連到你的路由器。
KwaFlux 會阻止 AI 助理提交的連結連到這台電腦和私人網路。以下說明做法,以及這項防護在哪裡止步。
本文會說明:SSRF 對桌面應用程式代表什麼、為什麼封鎖清單擋不住同一位址的其他寫法、KwaFlux 如何同時檢查寫出來的主機和解析後的位址,以及哪些情況仍有缺口。
目錄
- 什麼是 SSRF?
- 為什麼由 AI 操作的桌面應用程式會暴露在風險中
- 同一個位址,很多種寫法
- 第 1 層:用瀏覽器的方式解析主機
- 第 2 層:檢查名稱解析到哪裡
- fake-IP 例外
- 防護在哪裡止步
- 常見問題
什麼是 SSRF?
伺服器端請求偽造(SSRF)是一種攻擊:有人讓某個程式把請求送到攻擊者指定的目的地,通常是攻擊者自己無法直接連到的地方,例如同一台機器上的服務或內部網路。
這個名稱源自網頁伺服器,但只要是替別人抓取 URL 的程式,都適用同樣的模式。MCP 的安全指引列出了常見的目標:像 http://192.168.1.1/admin 這樣的內部 IP、位於 http://169.254.169.254/ 的雲端中繼資料端點,以及像 http://localhost:6379/ 這樣的 localhost 服務。
為什麼由 AI 操作的桌面應用程式會暴露在風險中
有三個條件同時成立:
- 應用程式會抓取 URL。 KwaFlux 的檔案下載功能,會連到交給它的任何連結。
- 應用程式位在你的網路裡。 從你的電腦看出去,
192.168.x.x是你的路由器、NAS 或印表機,而127.0.0.1則是你在本機執行的每一項服務。 - 連結可能來自模型讀到的文字。 影片說明或網頁可以叫 AI 助理「先檢查這個連結」。這是怎麼發生的,請見網路影片標題中的提示詞注入。
抓取內部位址的下載引擎,也許不會把回應顯示給任何人看,但即使只是一則錯誤訊息,也能讓攻擊者知道那個位址上有沒有裝置。這就是我們說的,把桌面應用程式變成內網掃描器。
同一個位址,很多種寫法
用字串比對封鎖 127.0.0.1 和 localhost 並不夠。URL 解析器接受同一個位址的許多其他寫法。以下是 Node.js 20 裡的 WHATWG URL 解析器對其中幾種寫法的解析結果:
| 連結裡的寫法 | 解析出的主機 |
|---|---|
http://127.0.0.1/ | 127.0.0.1 |
http://127.1/ | 127.0.0.1 |
http://2130706433/ | 127.0.0.1 |
http://0x7f000001/ | 127.0.0.1 |
http://0x7f.0.0.1/ | 127.0.0.1 |
http://0177.0.0.1/ | 127.0.0.1 |
http://017700000001/ | 127.0.0.1 |
http://127.0.0.1./ | 127.0.0.1 |
http://[0:0:0:0:0:0:0:1]/ | [::1] |
http://[::ffff:127.0.0.1]/ | [::ffff:7f00:1] |
http://10.1/ | 10.0.0.1 |
http://0xa9fea9fe/ | 169.254.169.254 |
除了最後兩列,每一列都會連到這台電腦。10.0.0.1 是私人位址,而 169.254.169.254 是雲端平台用來提供執行個體中繼資料的鏈路本機位址。
WHATWG URL 標準說明了原因:以 0x 開頭的部分以十六進位解讀,以 0 開頭的部分以八進位解讀,而不滿四段的位址,會由最後一段補滿剩下的位元組。OWASP 的 SSRF 防範指南也針對同樣的「Hex、Octal、Dword」編碼提出警告,MCP 的安全指引則補充:「避免自行實作 IP 驗證。攻擊者會利用自訂解析器經常漏掉的編碼技巧(八進位、十六進位、IPv4 對映的 IPv6)。」
第 1 層:用瀏覽器的方式解析主機
KwaFlux 不比對字串。它用和瀏覽器相同的規則解析主機,再檢查解析結果:
- WHATWG 主機解析會在任何檢查之前,把簡寫、八進位與十六進位的部分、單一數字的位址,以及結尾的點,轉換成真正的位址。
- IPv6 會檢查全部 16 個位元組,所以像
[::ffff:7f00:1]這樣的 IPv4 對映寫法,會被認出是迴路位址,而不是被當成某個陌生的 IPv6 位址。 - **包含
%的主機一律拒絕。** 這排除了主機裡的 IPv6 區域 ID 和百分比編碼的花招。 - 迴路、私人和鏈路本機位址都會被拒絕,例如
127.0.0.0/8、::1、10.0.0.0/8、192.168.0.0/16和169.254.0.0/16。
這符合 OWASP 的建議:檢查時「使用該方法或程式庫的輸出值作為 IP 位址」,而不是使用者輸入的文字。
第 2 層:檢查名稱解析到哪裡
主機名稱看起來可能無害,卻仍然指向你的網路內部。router.example.net 的 DNS 記錄可以寫著 192.168.1.1。
所以在已登入的下載即將排入佇列時,KwaFlux 還會解析主機名稱,逾時設為 2 秒。如果名稱解析到這台電腦或私人網路,下載就會被拒絕。
能抓出 DNS 記錄指向 127.0.0.1 或私人位址的公開主機名稱,靠的就是這項檢查。
fake-IP 例外
有些代理工具會以「fake-IP」模式執行:對每一次 DNS 查詢,都回覆一個 198.18.0.0/15 範圍內的位址,再自行轉送真正的連線。IANA 的登錄表把這個範圍列為「Benchmarking」(RFC 2544),而不是私人或迴路範圍。
如果 KwaFlux 把這個範圍當成內部位址,在使用這類代理的電腦上,每一次下載都會失敗。所以解析後位址的檢查不包含這個範圍。
防護在哪裡止步
這裡我們希望說得精確,因為 SSRF 防護很容易被講得太過頭。
- 涵蓋的範圍: AI 助理提交的連結。寫出來的主機,以及名稱解析出的位址,兩者都會檢查。
- 尚未涵蓋的範圍: 下載過程中發生的事。連結在檢查時可能解析到公開位址,片刻之後卻解析到私人位址(DNS rebinding);公開頁面也可能重新導向到內部位址。MCP 的安全指引把前者稱為檢查時間與使用時間不一致(time-of-check to time-of-use)的問題,OWASP 也指出:「在驗證與連線之間,若再進行一次未經檢查的 DNS 查詢,就可能繞過這些檢查。」
根本的解法,是讓下載引擎的連線都經過一個元件,在每次連線(包括每一次重新導向)建立的當下進行檢查。這已列入我們的開發計畫。我們還沒做,是因為這會改變下載引擎在三個不同程式碼庫裡連上網路的方式,也會影響每一次下載,包括你自己啟動的下載,所以需要獨立的版本和測試。
所以準確的說法是:KwaFlux 會阻止 AI 助理指使它連到這台電腦和私人網路上的位址。 這並不代表任何連線都不可能最後落到那裡,我們也不會把它說成「只連公開網際網路」。
在此之前,還有另外兩項限制可以幫上忙。Agent 下載預設關閉,而在每次確認模式下,任何內容被抓取之前,你都會先看到連結。請見為什麼 AI 不能替你核准下載。
結語
檢查的是位址,不是寫法。用瀏覽器的方式解析主機、在下載開始前檢查名稱解析到哪裡、不去動代理工具的 fake-IP 範圍,並且清楚交代還有哪些缺口。KwaFlux 就是這樣,不讓 AI 助理給的連結把它變成你網路裡的掃描器。
讓 AI 助理只抓該抓的東西
KwaFlux 的本機 MCP 伺服器,讓 Codex、Claude、Cursor 和其他 MCP 應用程式能處理你的檔案,並檢查 AI 助理提交的每一個連結。AI 處理在你自己的 GPU 上執行,媒體檔案不會為了處理而上傳。可在 Windows 10(64 位元,1809 或更新版本)、Windows 11,以及搭載 Apple Silicon 的 macOS 12 或更新版本上執行。匯入檔案和瀏覽應用程式都不需要帳號。僅在匯出、轉換、檔案修復和從連結下載檔案時需要登入並購買付費方案。
用你自己的素材試試效果
下載 KwaFlux,付費前先用自己的素材免費預覽效果——無需註冊,在你的 GPU 上處理,處理不需要上傳媒體檔案。 影片預覽可選 1、3或5 秒;防抖預覽可選 5、15或30 秒。
常見問題
SSRF 用白話來說是什麼?
就是誘使某個程式替你發出請求,送到你自己連不到的地方,例如路由器的管理頁面,或同一台電腦上的服務。任何替別人抓取連結的程式,都可能被這樣利用。
為什麼 127.1 等於 127.0.0.1?
因為遵循 WHATWG 標準的 URL 解析器,允許 IPv4 位址少於四段,並由最後一段補滿剩下的位元組。127.1 會變成 127.0.0.1。十六進位和八進位的寫法也會被接受。
封鎖私人 IP 位址能防止 DNS rebinding 嗎?
不能。rebinding 會在檢查和連線之間,改變名稱解析的結果。要防止它,就得在連線當下檢查,例如固定使用解析出的位址,或讓連線經過一個逐一檢查連線的出口代理。
198.18.0.0/15 這個範圍是做什麼用的?
它依照 RFC 2544 保留給網路效能測試使用。有些代理工具也把它用在 fake-IP 模式,以這個範圍內的位址回覆 DNS 查詢。它不是私人或迴路範圍。
桌面應用程式也需要擔心 SSRF 嗎?
需要,前提是它會抓取別人能影響的 URL。桌面應用程式位在你的家用或辦公室網路裡,所以被抓取的內部位址,能連到網站連不到的裝置。請見如何保護本機的 AI 通道。
參考資料
- OWASP, SSRF prevention guide (encodings; DNS rebinding; redirects) (2026-10-25 查閱)
- WHATWG, "URL Standard" (IPv4 parser; IPv4 number parser; ends-in-a-number checker) (2026-10-25 查閱)
- IANA, "IPv4 Special-Purpose Address Registry" (198.18.0.0/15 Benchmarking, RFC 2544; 127.0.0.0/8; 169.254.0.0/16; last updated 2025-10-09) (2026-10-25 查閱)
- Model Context Protocol, security guidance for implementers (2026-07-28; Server-Side Request Forgery) (2026-10-25 查閱)


