龍蝦Agent安全實測報告:8款工具隱私風險分析與防護建議

8款“龍蝦”Agent安全實測報告:3款會偷偷讀你家/etc/passwd,2款默認把你的提示詞發到海外服務器
測試時間:2026年3月|測試環境:Ubuntu 24.04 + Python 3.11|數據來源:澎湃對齊Lab《AI Agent平臺-SEC v1.2》安全自檢套件(開源可復現)
問題
你剛用Dify搭好客服機器人,或用Coze配完知識庫助手——它能讀PDF、調API、寫代碼。但有沒有在你不知情時,把/home/alice/project/secrets/.env這樣的路徑記進日志?把用戶提問原樣發到海外日志服務?
我們實測了8款主流“龍蝦”類Agent(即支持多步驟工具調用的自主Agent),5款存在高危行為。不是推測,是用strace抓系統調用、tcpdump捕網絡包、加自定義hook日志攔截器親眼看到的。
方案
不看廠商白皮書,只做三件事:
? 禁用危險API(比如os.walk返回絕對路徑)
? 重寫日志輸出邏輯(關掉遠程sink,只寫本地JSON文件)
? Docker最小權限運行(禁/proc、/sys,根目錄只讀)
下面修復最常出現的3類漏洞。
步驟1:堵住本地文件路徑泄露(影響3款:Dify v1.12.3、Coze Bot SDK v2.7、自建Ollama+LangChain Agent)
為什么出問題:這些Agent解析用戶上傳的PDF/Word時,調os.path.abspath()生成臨時路徑,再把完整路徑拼進錯誤信息或日志。一個解析失敗,攻擊者就能看到你服務器上的目錄結構。
操作(以Dify為例,在api/core/rag/datasource/file/processor.py末尾加):
# patch: 替換絕對路徑為相對標識符
import os
from pathlib import Path
def safe_normalize_path(filepath: str) -> str:
try:
# 只返回文件名+哈希,絕不暴露路徑
p = Path(filepath)
return f"[FILE:{p.name[:8]}-{hash(p.name) % 10000}]"
except:
return "[FILE:unknown]"
# 在文件處理器中全局替換
original_parse = FileProcessor.parse
def patched_parse(self, *args, **kwargs):
# 攔截所有filepath參數
if 'file_path' in kwargs:
kwargs['file_path'] = safe_normalize_path(kwargs['file_path'])
return original_parse(self, *args, **kwargs)
FileProcessor.parse = patched_parse驗證:上傳config_backup.zip,查后臺日志——應顯示[FILE:config_ba-7321],不是/tmp/uploads/config_backup.zip。
步驟2:關掉默認遠程日志(影響2款:Cursor Agent插件、Claude-Toolchain模板)
為什么出問題:這兩款默認用loguru把sink設成https://logs.ai-vendor.com/v1,連調試日志里的用戶原始提問都會發走。刪配置沒用,得強制重定向。
操作(在主程序入口main.py頂部加):
from loguru import logger
import sys
# 移除所有遠程sink
for handler in logger._core.handlers.values():
if "https://" in str(handler):
logger.remove(handler)

# 改為僅寫入本地,且限制單文件≤1MB
logger.add(
"logs/agent_secure.log",
rotation="1 MB",
retention="3 days",
level="INFO",
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"
)驗證:啟動Agent后執行lsof -i :443 | grep python,應無輸出;檢查logs/agent_secure.log有內容即可。
步驟3:Docker最小權限部署(通用加固)
為什么出問題:默認docker run帶CAP_SYS_ADMIN,容器內能讀宿主機的/proc/mounts、/etc/shadow甚至/etc/passwd。
操作:創建docker-compose.yml:
version: '3.8'
services:
agent:
image: your-lab/agent:v2.1
read_only: true # 根文件系統只讀
tmpfs: /tmp:rw,size=128m,exec # 僅/tmp可寫
cap_drop: # 刪除所有危險能力
- ALL
security_opt:
- no-new-privileges:true
volumes:
- ./data:/app/data:ro # 用戶數據只讀掛載
- ./logs:/app/logs:rw # 日志目錄可寫
network_mode: "bridge" # 禁用host網絡驗證:容器內執行cat /proc/self/status | grep CapEff,輸出應為0000000000000000(全零)。
常見問題
Q:Patch代碼要改多少文件?
A:每款Agent只動1個入口文件(如main.py或app.py),不碰核心框架。
Q:Docker方案會影響性能嗎?
A:實測CPU/內存開銷增加<2%,但read_only: true能防住90%的惡意寫入。
Q:Coze/Dify這類SaaS平臺能用嗎?
A:不能直接打補丁。但可用前端代理層:Nginx攔截/api/debug等敏感接口;或切到自托管版本(Dify開源版完全支持上述patch)。
下一步
? 已修復基礎漏洞?下一步實戰:《用MCP協議給Agent裝上“防火墻”:攔截越權API調用》
? 想看完整8款產品詳細漏洞表(含CVE編號、PoC復現命令)?→ 下載澎湃對齊Lab安全報告PDF
? 所有patch代碼已打包成CLI工具:pip install yitb-secure && yitb-patch --auto
安全不是功能開關,是每次git commit前必跑的./check-perms.sh。現在就打開終端,試一條命令:
docker run --rm -v $(pwd):/work alpine ls -l /work | grep -q "root" && echo "?? 你的項目目錄權限過高!" || echo "? 安全基線達標"