Gotenberg 三個嚴重 CVE:ExifTool 注入、URL 方案繞過、Webhook SSRF
GitHub Security Advisories · 2026-04-29
PDF 轉換服務 Gotenberg v8(Go 語言)在版本 8.30.1 及以下存在三個嚴重漏洞,均已在 8.31.0 修復。三個漏洞彼此獨立但可組合利用,允許未授權攻擊者讀取內部服務、注入 ExifTool 指令,並在容器內任意移動或覆蓋檔案。
CVE-2026-40281:ExifTool stdin 注入(CVSS 10.0)
8.30.0 修補了一個 metadata key 注入漏洞,但遺漏了 metadata 值的驗證。Gotenberg 透過 go-exiftool 將 metadata 傳給 ExifTool 時,使用 fmt.Fprintln(e.stdin, "-"+k+"="+str) 格式化。若 str(metadata 值)包含換行符(\n),字串會分裂為獨立的 ExifTool 引數行,從而注入任意的偽標籤(pseudo-tag)。
攻擊者可在 Title 欄位插入 \n-Directory=/tmp\n-FileName=inject_proof,將產生的 PDF 移至容器內任意路徑,或透過 -SourceFile 偽標籤覆蓋現有檔案。修復方式為拒絕值中包含 \n、\r、\0 的 metadata。
CVE-2026-40280:URL 方案大小寫繞過(CVSS 9.3)
Gotenberg 的 webhook deny-list(--webhook-deny-list)和 downloadFrom deny-list 使用區分大小寫的正規表示式過濾 URL。Go 的 net/http 在建立連線前會將 URL 方案(scheme)正規化為小寫,因此 HTTP://172.17.0.1:12345/ 可繞過針對 http:// 的過濾規則,但實際建立的連線與小寫 URL 完全等效。
實測:http://172.17.0.1:12345/ 回傳 HTTP 403(被阻擋);HTTP://172.17.0.1:12345/ 回傳 HTTP 202(成功)。此漏洞允許存取內部網路、雲端 metadata endpoint(如 169.254.169.254)及任何被 deny-list 覆蓋的位址。修復為過濾前先將 scheme 正規化為小寫。
CVE-2026-39383:Webhook 盲 SSRF(CVSS 8.6)
當 --webhook-allow-list 與 --webhook-deny-list 均為空(即預設配置)時,filter.go 中的 FilterDeadline 函式無條件回傳 nil(允許所有 URL)。攻擊者可將 webhook URL 指向任意內部服務,透過觀察 Gotenberg 是否回傳錯誤來推斷端口是否開放,並對接受 POST 請求的服務發出無回應的強制請求。這屬於盲 SSRF(blind SSRF),無法直接讀取回應內容,但可用於內網偵查。修復為在預設情況下封鎖 RFC 1918 私有位址範圍。
升級建議
三個漏洞均影響 Gotenberg ≤ 8.30.1,建議立即升級至 8.31.0。在修補前,可透過設定 GOTENBERG_API_WEBHOOK_ALLOW_LIST 為受信任端點清單來緩解 SSRF 風險。
原始來源:GHSA-q7r4-hc83-hf2q (CVE-2026-40281)、GHSA-5q7p-7jgv-ww56 (CVE-2026-40280)、GHSA-5vh4-rgv7-p9g4 (CVE-2026-39383)
Hickory DNS 快取中毒:旁系區域 NS 記錄注入(GHSA-83hf-93m4-rgwq,CVSS 8.7)
GitHub Security Advisories · 2026-04-29
Rust 實作的 DNS 函式庫 Hickory(前身為 Trust-DNS)的遞迴解析器元件(hickory-recursor)存在 DNS 快取中毒漏洞,允許控制任意名稱伺服器的攻擊者將偽造的 NS 記錄注入解析器快取,進而劫持旁系(sibling)網域的 DNS 解析。漏洞已在 hickory-resolver 0.26.0(含 recursor feature)修復;獨立的 hickory-recursor crate 已棄用,不再更新。
Bailiwick 驗證失敗
DNS 快取中毒的防禦核心是 bailiwick 規則:解析器只應信任與查詢區域一致的 NS 記錄。例如,在查詢 a.example.com 時,回應的 AUTHORITY 區段可以合法地包含 example.com 的 NS 記錄,但不應包含 attacker.com 的 NS 記錄。
Hickory 的 cache_response() 函式在驗證 AUTHORITY 區段時,使用的是提供查詢服務的 NS pool 的區域上下文,而非被查詢區域本身的上下文。這個偏移使攻擊者可透過控制 ns1.example.net,在回應 a.example.net 查詢時,在 AUTHORITY 區段中包含 sibling.example.net 的偽造 NS 記錄。解析器接受並快取這筆記錄,後續對 sibling.example.net 的查詢便會被導向攻擊者控制的名稱伺服器。
影響版本
受影響版本:hickory-recursor 0.24.0 至 0.25.2 及 0.1.x。CVSS 評分 8.7(High),主要影響完整性(DNS 解析結果被篡改),無直接機密性影響。
修復
修復位於 hickory-resolver 0.26.0(啟用 recursor feature 時)。修正後,cache_response() 在驗證每筆 AUTHORITY 記錄時,使用被查詢區域的上下文而非 NS pool 的區域。使用 hickory-recursor 0.x 獨立 crate 的專案應遷移至 hickory-resolver 0.26.0,因為前者將不再收到安全修補。
Citizen Lab:跨 18 國的 SS7/Diameter 電信監控網絡技術解析
Citizen Lab · 2026-04-23
多倫多大學 Citizen Lab 由 Gary Miller 與 Swantje Lange 發表研究,揭露兩個持續運作的電信監控組織(STA1、STA2)如何結合 SS7、Diameter 信令協定操控與裝置層級漏洞,對目標進行跨越 18 個以上國家的隱蔽位置追蹤。
信令協定的安全假設
SS7(Signalling System No. 7)是 1970 年代設計的電話網路控制協定,Diameter 是其 4G/LTE 時代的繼任者。兩者均設計於「受信任的電信業者社群」前提下,缺乏 IP 網路的基本安全機制(認證、訊息來源驗證)。協定信任的是節點身份(SCCP Global Title、Diameter Origin-Host),而不是通訊內容的完整性。第三方「信令服務提供商」的興起讓惡意行為者可以租用合法業者身份,從而在全球路由表中偽裝為受信任節點。
STA1:Ghost Operator 攻擊
STA1 採用「幽靈業者」技術,透過在以色列(019Mobile)、英國(Tango Networks)、澤西島(Airtel Jersey/Sure)的中繼節點發送 SS7 和 Diameter 訊息。在單一四小時的攻擊視窗中,STA1 使用了 11 個國家的業者識別符輪流發出請求,並透過操縱 Diameter 的 Route-Record 頭欄位隱藏真實的訊息路徑。
STA1 的 Diameter session ID 具有異常的 37–39 位數字格式(RFC 6733 規範使用更短的格式),這是識別其流量的一個特徵。攻擊成功率取決於目標業者的防火牆配置:部分業者對 Diameter 的 Send-Routing-Information(SRI)請求來自非漫遊夥伴的情況未做任何過濾。
STA2:SIMjacker 零點擊 SMS 攻擊
STA2 結合了網路層與裝置層的攻擊。SIMjacker 利用 S@T(SIM Application Toolkit)瀏覽器——一個存在於部分 SIM 卡上的隱藏應用程式,負責解析 STK(SIM Toolkit)指令。攻擊者發送包含 S@T 字節碼的二進位 SMS(OTA SMS,Over-the-Air),SIM 卡在使用者完全不知情的情況下靜默執行 STK 指令:
- 從 SIM 卡讀取目標裝置的基地台識別碼(Cell ID / LAC)
- 透過隱蔽 SMS 將位置資料回傳至攻擊者控制的號碼
整個過程不產生任何可見的 SMS 收件提示,在目標裝置上沒有任何明顯痕跡。SIMjacker 漏洞已於 2019 年由 AdaptiveMobile Security 首次披露,但受影響 SIM 卡在全球仍廣泛存在。
結構性防禦缺陷
報告強調這些攻擊能夠成功,根本原因在於業者普遍未部署可用的防禦機制:Diameter 的 TLS/IPsec 傳輸層加密未被強制要求;SS7 防火牆的規則集更新缺乏業界標準;業者間的點對點信任模型沿用了幾十年前的假設。研究建議電信業者部署信令防火牆並封鎖來自非漫遊夥伴的 SRI 和 PSI 請求。