龙虾Agent安全实测报告:8款工具隐私风险分析与防护建议

8款“龙虾”Agent安全实测报告:3款会偷偷读你家/etc/passwd,2款默认把你的提示词发到海外服务器
测试时间:2026年3月|测试环境:Ubuntu 24.04 + Python 3.11|数据来源:澎湃对齐Lab《OpenClaw-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 "✅ 安全基线达标"