Starlette 的網址重建邏輯,在請求的「路由路徑」與「授權路徑」之間,製造了一個危險的認知落差。當一個 HTTP 請求送達時,路由引擎會正確地從原始請求行中識別出目標端點。然而,當應用程式稍後檢查 request.url 來判斷使用者是否已獲授權時,Starlette 會將 Host 標頭與請求路徑拼接起來重新解析成一個新網址 。
攻擊者可以對一個受保護的端點(例如 /admin/secure)發送請求,並附帶一個被污染的 Host 標頭,手法如下:
Host: legitimate.com/health?x=
此時,路由引擎仍會將請求正確分派給 /admin/secure 的處理常式——但當授權中介層檢查 request.url.path 時,它看到的卻是 /health。如果中介層有一份信任 /health 為公開健康檢查端點的允許清單,攻擊者就能輕而易舉地溜過去。授權檢查就這樣悄然無聲地被繞過了,無需憑證、無需密碼、也無需任何使用者互動 。
X41 D-Sec 的公告簡潔有力地證實了其極低的攻擊門檻:「只需在 HTTP Host 標頭中插入一個字元,就足以欺騙伺服器」。能觸發此混淆的特定字元包括了常見的網址分隔符號,如斜線、問號和井字號,而這些字元 Starlette 從未進行過驗證
。
此漏洞的影響範圍極為驚人。Starlette 是幾乎所有主流 Python AI 服務與編排工具底層的隱形引擎,每週下載次數高達約 3.25 億次 。所有使用 1.0.1 版以前 Starlette 的下游專案都受到影響:
針對 CVE-2026-48710 的官方嚴重性評級,在資安社群中引起了相當大的分歧:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N 將對機密性和完整性的影響評為「低」,範圍設為「未改變」,並回報無可用性影響 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N支撐研究人員認為 6.5 分過低論點的,有以下三個關鍵因素:
SC:H/SI:H 指標終於將其捕捉 於 2026 年 5 月 22 日發布的 Starlette 1.0.1 版包含了決定性的修補程式。此修補被記錄於 GitHub 安全通報 GHSA-86qp-5c8j-p5mr 和 X41 通報 X41-2026-002 中 。
修補程式實作了兩項核心保護機制:
升級 Starlette 套件是必要的第一步,但全面的防禦需要多層次的策略:
立即修補。 在每一個運行AI基礎設施的虛擬環境、容器映像檔和部署管線中,執行:
pip install --upgrade starlette
重新啟動所有受影響的服務。這適用於直接安裝的 Starlette,以及 FastAPI、vLLM、LiteLLM 和 MCP 伺服器執行個體 。
審計並鎖定相依性。 FastAPI 和其他框架未必會自動強制執行 Starlette 的最低版本。請在 requirements.txt、pyproject.toml、poetry.lock 或等效的鎖定檔案中,明確要求 starlette>=1.0.1。並在所有環境中執行 pip list | grep starlette。
掃描 AI 堆疊中的每個元件。 任何提供 HTTP 服務的 Python 服務——包含自訂的 FastAPI 應用程式、LLM 推論端點、代理編排層、模型評估面板和 OpenAI 相容代理——都可能內嵌了有漏洞的 Starlette 版本。請進行全面的基礎設施審計 。
強化反向代理和 WAF。 設定 nginx、Envoy、HAProxy、Cloudflare 或 AWS ALB,使其在將流量轉發到 Python 應用程式之前,拒絕或淨化格式錯誤的 Host 標頭。這提供了縱深防禦,即使在應用程式修補延遲的情況下,也能阻止漏洞被利用 。
將路徑安全檢查從 request.url.path 改寫。 根本原因在於路由路徑與 request.url.path 之間的不匹配。盡可能將授權中介層切換為使用 request.scope["path"],此值源自原始的 ASGI 作用域(scope),無法被 Host 標頭污染 。X41 D-Sec 建議完全避免使用基於路徑的授權,轉而採用端點固有的驗證機制
。
測試暴露風險。 目前已釋出線上掃描工具,可協助組織驗證其伺服器是否存在漏洞 。結合針對身分驗證邊界的全面滲透測試,可用以發現可能被忽略的攻擊面。
對於基於 Debian 的部署,CVE-2026-48710 在 Debian 安全追蹤系統中被標記為「重要」等級,受影響的發行版也已提供相對應的 starlette 修補版本 。請從 bullseye-security 或等效的儲存庫中,執行對應的
apt 更新指令,並重新載入受影響的 systemd 單元檔案 。
Comments
0 comments