AID-H-002.002
極高
Inference-Time Prompt & Input Validation
輸入驗證應放在狀態歷史查詢進入 checkpointer 前,檢查 filter、thread ID、namespace、key 和排序條件的結構、型別、長度與允許值,避免攻擊者把 SQL 或 Redis 命令片段塞進儲存層查詢。
Check Point Research 展示 LangGraph(LangChain 生態中用來編排有狀態 agent 工作流程的框架)的狀態檢查點儲存層,如何從使用者可控的狀態歷史查詢,被攻擊者一步步操控成遠端程式碼執行。攻擊者可以先利用 SQL 注入攻擊(SQL injection)或 Redis 命令注入影響 checkpoint 儲存內容,再讓應用程式把惡意 checkpoint 當成可信的 agent 記憶資料載入。載入的過程需要反序列化(deserialization,把儲存的位元組資料還原成程式可以操作的物件,例如把 checkpoint 裡存的 msgpack 位元組,還原成 LangGraph 用來記錄對話進度的 graph state 物件);如果這個還原過程沒有先驗證資料型別、完整性與來源,攻擊者精心構造的位元組資料就可能讓還原過程建構出會執行任意程式碼的物件,而不只是還原出單純的資料。防禦重點是把 agent 記憶資料當成安全邊界,不是被動儲存。
get_state_history() 的 filter、thread ID 或其他篩選欄位交給使用者、agent 或外部 API 控制,攻擊者就可能影響儲存層如何組合 SQL 或 Redis 查詢。get_state_history() 的查詢條件暴露給使用者、agent 或外部 API 呼叫者。LangGraph 案例提醒我們,agent 記憶不是被動儲存。checkpoint 會被查詢、寫入、反序列化、重放,最後重新回到 agent 執行流程;任何一段把不可信資料升級成可信狀態,都可能變成 RCE 路徑。AIDEFEND 在這裡的角色是把每個升級點拆開防守:輸入驗證守住查詢條件,簽章與雜湊守住記憶資料完整性,信任提升檢查決定資料能不能回到 agent,容器隔離與內網分段則限制最壞情況下的影響範圍。