Hacking The Edge: Real-World ESI Injection Exploits by Robert Vulpe | Bug Bounty Village, DEF CON 33
三句話摘要
利用邊緣端包含 (Edge Side Include, ESI) 技術漏洞進行跨域攻擊與帳戶接管的真實案例研究。 ESI 技術雖已過時但廣泛存在,其強大函數與現代安全工具的盲點結合,成為一個被忽視的高風險漏洞來源——重點不在複雜的 XSS,而在於 CDN 層面對動態內容的誤判與 SCI 變數的直接濫用。 ESI 規格已過時但仍被使用:ESI 最新開發指南來自 2004 年,現代開發者多數不了解其完整功能,導致配置錯誤。Akamai 等 CDN 廠商仍支持 SCI 標籤的多種函數(如讀取 HTTP cookie、新增請求頭、重導向),造成隱藏攻擊面。
重點整理
重點- 1
ESI 規格已過時但仍被使用:ESI 最新開發指南來自 2004 年,現代開發者多數不了解其完整功能,導致配置錯誤。Akamai 等 CDN 廠商仍支持 SCI 標籤的多種函數(如讀取 HTTP cookie、新增請求頭、重導向),造成隱藏攻擊面。
- 2
內容類型誤認導致漏洞:靜態內容(.json、.jpg)不會處理 SCI 標籤,但 URL 編碼的點(%2E)可欺騙代理認為是動態內容,使 SCI 被處理。不同瀏覽器對 URL 編碼的處理差異(Firefox/Safari 在地址欄保留編碼,Chrome 轉換),成為利用的突破口。
- 3
多層編碼繞過 WAF:四次 URL 編碼組合 hack vectors(交替編碼與解碼)可完全繞過關鍵字過濾(script、iframe、onerror 等),無 WAF 工具會進行四層解碼檢查,因此變成實際不可能的防禦。
- 4
無需 XSS 的帳戶接管:利用 SCI 的 set_redirect 或 set_header 函數直接外洩 HTTP-Only cookie(SCI 可讀取任何進入請求的 cookie),不需要傳統 XSS 漏洞,但同站 cookie 政策限制了利用方式,需配合其他漏洞(如 iframe 載入 wildcard 子域)突破限制。
實用技巧與重點
乾貨- 技術與工具
- ESI 規格:2001 年初版、2004 年 Akamai Suite 5.0 版本
- SCI 核心函數:set_header、set_redirect、get_http_variable
- HTTP 變數:HTTP_COOKIE(可讀任何 cookie,即使 httpOnly)
- 繞過技術:URL 編碼四層 + hack vectors
- 自動化工具:GAU(Web Archive 爬蟲)、Katana by Project Discovery(含 GC-Luis 提取 JavaScript 鏈接)、QS Replace(響應比對)
- 具體漏洞數據
- 在同一 Bug Bounty 計畫中發現 10-15 個類似 ESI 漏洞
- Content-Type 為 JSON 時,無人進行 HTML 標籤驗證
- Firefox 版本支援 iframe 內保留 URL 編碼字符(早期特性),最新 Firefox/Safari 在地址欄原生支援
- 漏洞賞金等級
- 帳戶接管 (Account Takeover):High 級別
結論
結論“ESI 技術雖已過時但廣泛存在,其強大函數與現代安全工具的盲點結合,成為一個被忽視的高風險漏洞來源——重點不在複雜的 XSS,而在於 CDN 層面對動態內容的誤判與 SCI 變數的直接濫用。”
完整解析
詳細邊緣端包含(ESI)是 2001 年設計的舊技術,用於 CDN 和代理在快取頁面中動態插入內容片段。儘管已有 20 多年歷史,許多現代企業仍然使用 Akamai 等服務並啟用 ESI,但開發者對其功能鮮少了解。講者發現這個技術領域存在巨大的攻擊面:SCI 標籤內建多種強大函數,能讀取 HTTP cookie、新增或移除請求頭、執行重導向,而大多數安全研究者從未深入探索過。
第一個漏洞涉及一個返回 JSON 內容的端點,其中 SCI 標籤被完整渲染而非過濾。起初看似無害——JSON 不會在瀏覽器中作為 HTML 執行——但講者利用 SCI 的 set_header 函數改變 Content-Type 為 text/html。為繞過 WAF 對敏感關鍵字的阻止,他採用四次 URL 編碼配合 hack vectors(反覆編碼解碼)的組合技巧。WAF 不可能進行四層解碼檢查(成本過高),因此這個技巧幾乎無法被偵測。更關鍵的是,講者利用 SCI 內建的 HTTP_COOKIE 變數讀取進入請求中的任何 cookie——即使這些 cookie 標記為 HttpOnly。最終他可以將 session cookie 外洩至自己的伺服器,實現完整的帳戶接管。
第二個漏洞更狡猾。JSON 檔案(.json)在 Akamai 被認定為靜態內容,不會處理 SCI 標籤。但講者發現,URL 編碼的點符號(%2E)會欺騙代理系統誤認為這是動態內容。在現代瀏覽器中直接輸入會自動轉換為普通點,無法利用;但 Firefox 的 iframe 實現了一項獨特行為,保留了 URL 編碼字符。經多次測試,講者確認最新版本的 Firefox 和 Safari 甚至在地址欄也支持此功能。利用 SCI 的 set_redirect 函數,他同樣可以外洩 cookie。然而同站 cookie 政策阻止了跨域 iframe 存取 cookie,講者需要找到另一個漏洞配合——他幸運地發現了一個允許 iframe 載入 wildcard 子域的漏洞,由此成功證明了帳戶接管的完整攻擊鏈。
為系統化發現這類漏洞,講者使用 GAU 搜集 Web Archive 歷史頁面,用 Katana(Project Discovery 工具)從 JavaScript 檔案中提取 API 端點,再透過 QS Replace 等工具手動比對響應。這個暴力但有效的方法最終發現了 10-15 個類似漏洞,大多數出現在 JSON、圖像等無人檢查的內容類型中。講者還提及,SCI Include 函數本身雖被 WAF 阻止,但其他 SCI 標籤的功能卻被忽視,甚至可以用 set_header 移除 CSP 防護頭。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。


