摘要
報告提供對開源 AI orchestration framework Chainlit 中所發現的關鍵漏洞(統稱為「ChainLeak」)之技術分析。這些漏洞具體包含一個 Arbitrary File Read (AFR)(CVE-2026-22218)與一個 Server-Side Request Forgery (SSRF)(CVE-2026-22219),暴露出現代 AI 應用程式因複雜、多層架構所衍生的根本性安全弱點。分析聚焦於漏洞的技術機制、有漏洞的程式碼路徑,以及攻擊者如何利用這些 primitive 進行資料外洩、權限提升與在雲端環境中橫向移動。研究結果強調在快速演進的 AI 基礎設施生態系中,實施穩健安全實務的必要性。
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 之核心角色。
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
的有漏洞的程式碼片段,說明缺乏路徑驗證的問題:
- class BaseSession:
- async def persist_file:
- # ...
- if path:
- # Copy the file from the given path
- # VULNERABLE: 'path' is attacker-controlled and not validated for traversal
- async with (
- aiofiles.open(path, "rb") as src, # Attacker-controlled path is opened
- aiofiles.open(file_path, "wb") as dst,
- ):
- await dst.write(await src.read()) # Content is copied to a user-accessible location
- elif content:
- # Write the provided content to the file
- async with aiofiles.open(file_path, "wb") as buffer:
- if isinstance(content, str):
- content = content.encode("utf-8")
- await buffer.write(content)
- # ...
透過提供如
/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
方法中:
- class SQLAlchemyDataLayer(BaseDataLayer):
- async def create_element(self, element):
- # ...
- content: Optional[Union[bytes, str]] = None
- if element.path:
- # ... (AFR logic)
- elif element.url:
- # VULNERABLE: 'element.url' is attacker-controlled and not validated
- async with aiohttp.ClientSession() as session:
- async with session.get(element.url) as response: # Request made to arbitrary URL
- if response.status == 200:
- content = await response.read()
- else:
- content = None
- elif element.content:
- # ...
攻擊者可將
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 攻擊流程,這是雲端認證竊取的常見手法。
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] 。