摘要

報告提供對開源 AI orchestration framework Chainlit 中所發現的關鍵漏洞(統稱為「ChainLeak」)之技術分析。這些漏洞具體包含一個 Arbitrary File Read (AFR)(CVE-2026-22218)與一個 Server-Side Request Forgery (SSRF)(CVE-2026-22219),暴露出現代 AI 應用程式因複雜、多層架構所衍生的根本性安全弱點。分析聚焦於漏洞的技術機制、有漏洞的程式碼路徑,以及攻擊者如何利用這些 primitive 進行資料外洩、權限提升與在雲端環境中橫向移動。研究結果強調在快速演進的 AI 基礎設施生態系中,實施穩健安全實務的必要性。

破解ChainLeak:深入剖析AI Orchestration框架中的Arbitrary File Read與SSRF漏洞利用手法 | 資訊安全新聞

1. 簡介

AI 框架與第三方元件的快速採用,已導致長期存在的軟體漏洞類別直接嵌入至關鍵 AI 基礎設施中 [1] 。這些系統通常由多個串接的層級組成——UI/Frontend、AI Agents & Tools、AI Orchestration 與大型語言模型(LLM)——引進了嶄新且複雜的攻擊面。這些層級間的相互依賴關係產生了弱點,此現象在廣泛使用的對話式 AI 應用建構框架 Chainlit 中所發現的兩個關鍵漏洞中得到凸顯 [1] 。這些漏洞無需使用者互動即可觸發,允許外洩雲端環境 API key 與敏感檔案,並對主機伺服器執行 SSRF 攻擊 [1] 。此研究深入探討這些漏洞的技術核心,詳細檢視有漏洞的元件與所產生的攻擊 primitive。

2. AI 應用架構與攻擊面

AI 應用本質上具有複雜性,其中 orchestration layer 作為連接使用者輸入與 LLM 及外部工具的關鍵樞紐。此層級通常使用 Chainlit 等框架實作,負責資料處理、專有邏輯,以及與敏感資料來源和雲端服務的整合 [1] 。下圖說明典型 AI 應用的四層架構,強調 ChainLeak 漏洞所在的 orchestration layer 之核心角色。

graph TD A[User/Client] --> B(UI / Frontend); B --> C(AI Orchestration / Backend); C --> D(AI Agents & Tools); C --> E(LLM); D --> C; E --> C; C --> F[Cloud Services / Data Stores]; style C fill:#f9f,stroke:#333,stroke-width:2px subgraph Chainlit Scope B C end click B "https://www.zafran.io/resources/chainleak-critical-ai-framework-vulnerabilities-expose-data-enable-cloud-takeover " "UI / Frontend" click C "https://www.zafran.io/resources/chainleak-critical-ai-framework-vulnerabilities-expose-data-enable-cloud-takeover " "AI Orchestration"

Figure 1: Simplified Architecture of a Modern AI Application

此架構的複雜性擴展了威脅模型,超越傳統 Web 應用。隨著先進 AI 系統日益被用於自動化安全任務(例如 Cyberspike Villager 框架案例),底層 orchestration 元件的安全性變得至關重要 [2] 。如 ChainLeak 所示,orchestration layer 的妥協可為攻擊者提供必要的 primitive,以自動化執行精密的攻擊鏈。

3. ChainLeak 漏洞的技術分析

3.1. Arbitrary File Read (AFR) - CVE-2026-22218

Arbitrary File Read 漏洞源於 Chainlit 元件持久化機制中的驗證不足。在 Chainlit 中,elements(例如檔案或圖片)會附加至訊息,並由 BaseSession.persist_file 函式處理 [1] 。此函式支援兩種處理 element 內容的模式:直接從 content 屬性寫入內容,或從伺服器上指定的 path 複製檔案 [1]

漏洞產生的原因是 API endpoint /project/element 允許攻擊者傳送一個完全控制其欄位的 element,只要將 element 的 type 設為 "custom" 即可 [1] 。關鍵在於,程式碼未驗證 element 的其他屬性,包括 path 屬性。若設定 path 屬性,有漏洞的函式會從攻擊者控制的路徑複製檔案至使用者的 session 檔案,有效繞過存取控制。

以下來自 BaseSession.persist_file 的有漏洞的程式碼片段,說明缺乏路徑驗證的問題:

  1. class BaseSession:
  2. async def persist_file:
  3. # ...
  4. if path:
  5. # Copy the file from the given path
  6. # VULNERABLE: 'path' is attacker-controlled and not validated for traversal
  7. async with (
  8. aiofiles.open(path, "rb") as src, # Attacker-controlled path is opened
  9. aiofiles.open(file_path, "wb") as dst,
  10. ):
  11. await dst.write(await src.read()) # Content is copied to a user-accessible location
  12. elif content:
  13. # Write the provided content to the file
  14. async with aiofiles.open(file_path, "wb") as buffer:
  15. if isinstance(content, str):
  16. content = content.encode("utf-8")
  17. await buffer.write(content)
  18. # ...

透過提供如 /etc/passwd 或雲端認證檔案的路徑(例如使用 Path Manipulation ../../../../etc/passwd ),經認證的攻擊者可讀取 Chainlit server process 可存取的任何檔案。外洩的內容隨後可透過後續 API 呼叫從使用者 session 中擷取 [1]

3.2. Server-Side Request Forgery (SSRF) - CVE-2026-22219

SSRF 漏洞在 SQLAlchemyDataLayer 實作中被發現,當 Chainlit 設定使用 SQLAlchemy backend 時會啟用此元件 [1] 。與 AFR 類似,此缺陷透過傳送具有受控屬性的 custom element 觸發,特別是 url 屬性 。

SQLAlchemyDataLayer.create_element 函式在設定 element 的 url 屬性時,會嘗試從遠端資源擷取內容。此設計原意是允許從遠端資源建立 elements,但函式未對提供的 URL 進行清理,使攻擊者能指定內部網路位址。

有漏洞的邏輯位於 create_element 方法中:

  1. class SQLAlchemyDataLayer(BaseDataLayer):
  2. async def create_element(self, element):
  3. # ...
  4. content: Optional[Union[bytes, str]] = None
  5. if element.path:
  6. # ... (AFR logic)
  7. elif element.url:
  8. # VULNERABLE: 'element.url' is attacker-controlled and not validated
  9. async with aiohttp.ClientSession() as session:
  10. async with session.get(element.url) as response: # Request made to arbitrary URL
  11. if response.status == 200:
  12. content = await response.read()
  13. else:
  14. content = None
  15. elif element.content:
  16. # ...

攻擊者可將 url 設為內部 IP 位址或雲端 metadata service endpoint。例如,在雲端環境中,可用於針對 Instance Metadata Service (IMDS) 以取得臨時安全認證。報告指出,若伺服器部署於啟用 IMDSv1 的 AWS EC2 instance 上,SSRF 可用於存取 http://169.254.169.254/latest/meta-data/iam/security-credentials/ 以取得角色 endpoint 。回應內容隨後會被儲存,並可透過 /project/thread/{thread_id}/element/{element_id} endpoint 擷取以完成外洩 [1]

4. 攻擊鏈與權限提升

ChainLeak 漏洞提供了強大的 primitive,可串接起來達成重大危害,從受限制的應用程式缺陷擴展至完整的雲端接管。AFR primitive 的主要目標是包含機密的設定檔與環境變數。

4.1. 資料外洩與權限提升

利用 AFR 漏洞,攻擊者可鎖定包含機密的檔案。關鍵目標是 /proc/self/environ 檔案,其中通常包含高度敏感的環境變數,例如雲端認證(如 AWS_SECRET_KEY )或認證密鑰(如 CHAINLIT_AUTH_SECRET [1]

  • Data Leakage: 若 Chainlit 與 LangChain 一併使用,AFR 可用於外洩 .chainlit/.langchain.db 快取檔案,該檔案儲存所有使用者 prompts 與 responses,在多租戶(Multi-tenant)部署中導致跨租戶(Cross-tenant)資料外洩 [1]
  • Authentication Bypass: 外洩 CHAINLIT_AUTH_SECRET 可讓攻擊者為任何已知或可推斷其識別符的使用者偽造 authentication token,造成帳號接管 [1]

4.2. 透過 SSRF 進行雲端接管

SSRF 漏洞是通往雲端環境中橫向移動的直接路徑。若伺服器託管於雲端平台,SSRF 可指向該平台的 metadata service。下圖說明針對 AWS IMDSv1 endpoint 的 SSRF 攻擊流程,這是雲端認證竊取的常見手法。

sequenceDiagram participant A as Attacker participant C as Chainlit Server (Vulnerable) participant I as AWS IMDSv1 (169.254.169.254) participant D as Attacker's Server (Exfiltration) A->>C: PUT /project/element (url: http://169.254.169.254/latest/meta-data/iam/security-credentials/) C->>I: GET /latest/meta-data/iam/security-credentials/ (Internal Request) I-->>C: IAM Role Name A->>C: GET /project/thread/{id}/element/{id} (Retrieve Element) C-->>A: IAM Role Name A->>C: PUT /project/element (url: http://169.254.169.254/latest/meta-data/iam/security-credentials/{RoleName}) C->>I: GET /latest/meta-data/iam/security-credentials/{RoleName} I-->>C: Temporary AWS Credentials (Access Key, Secret Key, Token) A->>C: GET /project/thread/{id}/element/{id} C-->>A: Temporary AWS Credentials A->>D: Use Credentials for Cloud Takeover

Figure 2: SSRF Attack Chain for Cloud Credential Exfiltration

一旦取得雲端認證或 IAM tokens,攻擊者便不再侷限於應用層。他們可存取更廣泛的雲端環境,包括雲端儲存區(Storage buckets)、secrets managers 與其他關鍵資源 [1] 。從應用層漏洞轉變為基礎設施層危害,是 ChainLeak 威脅的關鍵特徵。

5. 緩解措施與結論

ChainLeak 漏洞清楚提醒我們,傳統安全漏洞正被重新引入至複雜、多層的 AI 應用堆疊中。根本原因在於處理影響檔案系統操作(AFR)或網路請求(SSRF)的使用者輸入資料時,未能強制執行嚴格的輸入驗證與存取控制。受影響系統的立即緩解措施是將 Chainlit 框架更新至 2.9.4 或更高版本,此版本已修復所發現的漏洞 [1]

除了修補之外,研究結果強調必須從根本上改變 AI 系統的安全防護方式。開發人員必須採用以安全為先的 AI orchestration 方法,確保所有使用者控制的輸入都經過嚴格清理,特別是在與檔案系統路徑或網路 URL 互動時。此外,必須嚴格套用最小權限原則至 AI 應用伺服器,限制其對敏感檔案(如 /proc/self/environ )與內部網路資源的存取。使用 IMDSv2(需要 session token,且不受簡單 GET-based SSRF 影響)是關鍵的雲端原生防禦措施 [1]

總結而言,ChainLeak 漏洞凸顯了 AI 應用建構元件的「dark side」,其中眾所周知的漏洞類別可直接危及 AI 驅動的系統 [1] 。隨著 AI 驅動的攻擊框架持續演進,資安社群必須聚焦於保護底層的 orchestration 與 agentic 元件,以防止這些關鍵 primitive 被用於自動化攻擊鏈中 [2]