mrahm65/Trust-Me-I-m-an-Agent-Measuring-the-Security-Exposure-of-Open-Source-LLM-Agents
GitHub: mrahm65/Trust-Me-I-m-an-Agent-Measuring-the-Security-Exposure-of-Open-Source-LLM-Agents
该项目是一个针对开源 LLM Agent 仓库的权限暴露测量框架,通过结合文档声明、静态代码分析和沙箱运行时监控来检测未声明的潜在安全风险。
Stars: 0 | Forks: 0
# 相信我,我是一个 Agent:开源 LLM Agent 中权限与特权暴露的安全测量
## 1. 概述
开源 LLM-agent 仓库越来越频繁地向用户请求广泛的权限——API 密钥、文件系统访问、网络出站、本地服务器、shell 执行、浏览器自动化、数据库访问,有时甚至包括 root 级别的操作系统操作。然而,关于这些 agent 在*任何攻击发生之前*向用户要求的**基准权限暴露面**,人们知之甚少。
本项目旨在测量这一暴露面。针对一个经过精心筛选的、活跃且独特的开源 LLM-agent 仓库语料库,我们对比了三个层面的权限证据:
1. **声明的权限** —— README、配置文件和安装脚本中说明的 agent 所需的权限。
2. **静态权限** —— 源代码实际能够执行的操作,通过 grep 和 AST 分析得出。
3. **运行时权限** —— agent 在沙箱内执行时实际进行的操作。
最重要的发现类别是**未声明 + 已使用**:在运行时可达、但文档中从未提及的行为。这正是安全与隐私风险所在,而现有的研究尚未在语料库规模上对此进行测量。
## 2. 研究问题
| ID | 问题 |
| --- | --- |
| **RQ1** | 开源 LLM agent 在安装设置和运行期间实际需要哪些权限和特权? |
| **RQ2** | 我们如何检测开源 LLM agent 中异常、过度或未文档化的权限? |
| **RQ3** | 我们如何量化和缓解 LLM agent 中意外或未经授权的权限访问所带来的安全风险? |
## 3. 方法论 —— 三角验证
```
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ Layer 1: Declared │ │ Layer 2: Static │ │ Layer 3: Runtime │
│ README, .env.exa- │ │ Source code grep │ │ Sandboxed exec │
│ mple, Dockerfile, │ │ + AST analysis │ │ with dummy keys, │
│ config.yml, docs │ │ for permission │ │ monitored network │
│ │ │ patterns │ │ and filesystem │
└─────────┬──────────┘ └─────────┬──────────┘ └─────────┬──────────┘
│ │ │
└─────────────────────────┴─────────────────────────┘
│
▼
Triangulation + Anomaly Detection
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Permission classification: │
│ Declared+Used | Declared+Not Used | Undeclared+Used │
│ Static Only | High-Risk Used | Runtime Blocker │
│ Declared+Not Present (docs claim, repo missing artefact) │
└──────────────────────────────────────────────────────────────────┘
```
影响最深远的类别是**未声明 + 已使用**——在运行时可达、但 README 中从未提及的行为。这正是我们的框架旨在解决的盲区。
## 4. 权限分类
该审计框架将发现结果分为 15 个权限类别:
| 类别 | 示例证据 |
| --- | --- |
| 密钥 / 凭据 | API 密钥(OpenAI, Anthropic, Polygon)、token、磁盘上的凭据文件 |
| 文件系统读取 | `open()`, `FileReader`, 路径遍历、密钥文件读取 |
| 文件系统写入 | 日志、生成的代码、凭据复制、缓存文件 |
| 网络访问 | 指向非 localhost 主机的外部 HTTP / TCP、API 基础 URL |
| 本地服务器暴露 | FastAPI, Flask, Streamlit, Gradio、`0.0.0.0` 绑定、开放的 CORS |
| Shell / 进程执行 | `subprocess`, `os.system`, `exec`, `eval`, `ProcessBuilder`, `sudo` |
| 浏览器自动化 | Selenium, Playwright, `browser-use`, WebSurferAgent |
| 数据库访问 | JDBC, SQLAlchemy, MongoDB, Redis, Chroma, Pinecone |
| 云端访问 | AWS, GCP, Azure SDK, 云函数 |
| 通信访问 | 电子邮件、Slack, Discord, Twilio |
| 设备 / 浏览器权限 | 麦克风、摄像头、地理位置、通知 |
| 区块链 / 钱包 | web3, eth_account, 私钥、RPC URL |
| Docker / 系统运行时 | Dockerfile, compose, `chown`, sudoers, host volume |
| 金融 / 市场数据 API | Polygon, Yahoo Finance, 市场数据 SDK |
| 遥测 / 日志 / 监控 | Sentry, PostHog, LangSmith, DataDog, 自定义遥测 endpoint |
## 5. 仓库内容
| 路径 | 用途 |
| --- | --- |
| `repos_1000_live_unique.json` | 语料库快照 v1 —— 1,000 个精选的活跃 LLM-agent 仓库。 |
| `repos_1000_set2_live_unique.json` | 语料库快照 v2 —— 额外 1,000 个活跃的 LLM-agent 仓库,与 v1 完全不重叠。 |
| `repo_health_check.json` / `.csv` | 语料库构建期间使用的每个 URL 的 HTTP 状态快照。 |
| `pilots/` | 每个仓库的权限审计报告(Markdown + 结构化 JSON)。*试点审计目前由 AI 辅助,尚待人工验证。* |
| `taxonomy/` | 机器可读的权限分类法和异常规则。 |
| `framework/` | 审计脚本、JSON schema、沙箱模板。*(开发中。)* |
| `docs/` | 方法论笔记、伦理 / 负责任披露协议、相关工作总结。 |
| `README.md` | 本文档。 |
## 6. 语料库
合并后的语料库包含跨越两个快照的 **2,000 个独特的、经过 HTTP 验证的开源 LLM-agent 仓库**,两者之间零重叠。
| 快照 | 文件 | 大小 | 选择方式 |
| --- | --- | ---: | --- |
| v1 | `repos_1000_live_unique.json` | 1,000 | 精选清单 + GitHub Search 扩展。 |
| v2 | `repos_1000_set2_live_unique.json` | 1,000 | 跨越 25+ 查询的 GitHub Search 扩展,与 v1 完全不重叠。 |
| **总计** | | **2,000** | 全部唯一,在快照日期均处于活跃状态。 |
**应用于每条记录的过滤条件。** 未被归档、不是 fork、至少有两个 star、在快照日期可通过 HTTP HEAD 访问或由 GitHub Search API 返回。
**每条记录的字段。** `owner_repo`, `url`, `description`, `language`, `stars`, `pushed_at`, `created_at`, `archived`, `license`, `source_query`, `from_github_search`, `http_status_on_check`, `redirected_to`。
**筛选方法。** 仓库通过 GitHub Search API 跨主题查询(`topic:llm-agent`, `topic:ai-agent`, `topic:autogen`, `topic:langgraph`, `topic:crewai`, `topic:agentic`, `topic:multi-agent`, `topic:browser-use`, `topic:mcp-server`, `topic:rag`, `topic:llamaindex`, `topic:llmops` 等)和关键字查询(例如,`"llm agent" language:python`, `"coding agent"`, `"research agent"`, `"computer use" agent`)获取。结果按最近 push 的时间优先排序,以使语料库偏向于活跃开发的项目。
### 注意事项
- *“活跃”* 意味着 GitHub 页面在快照日期响应了 HTTP 200。这**并不**代表该仓库能够构建、运行、包含可执行的 agent 代码或具有实质性内容。运行时试点的筛选属于本研究的后续阶段。
- 计划针对 GitHub REST API 进行一次元数据扩充,以标准化少数缺乏丰富元数据的记录。
## 7. 初步试点结果
四个开源 agent 仓库已作为初步试点完成了端到端的审计。
| 仓库 | 风险分类 | 代表性发现 |
| --- | --- | --- |
| **ag2ai/ag2** | 高 | 在 `captainagent/tool_retriever.py:212,282` 中存在 `exec(code)`;Agent 到 Agent 的网络服务器;作为子进程启动的 Jupyter 内核网关;基于 SQLite 的对话日志记录;通过 Selenium WebDriver、`WebSurferAgent` 和 `browser-use` 进行的浏览器自动化;九个以上的 API 密钥提供者——其中几个未在文档中说明,但与安全相关。 |
| **virattt/financial-agent** | 中 | 带有 `allow_origins=['*']` 和 `allow_credentials=True` 的 FastAPI 服务器(高,未声明 + 已使用);`0.0.0.0:8000` 绑定;通过传递依赖的 `langchain-core` 进行的 LangSmith 遥测。README 中均未披露。 |
| **wzf2000/MACRec** | 严重 | 在 `main.py:21` 中存在 `eval(init_args.main + 'Task')()`(来自 CLI 参数的任意代码执行);在 `amazon.py:30,35` 中存在 `subprocess.call('mkdir ' + dir, shell=True)`(shell 命令注入);在 `rank_metric.py:26` 中存在 `exec(...)`。均未在文档中说明。 |
| **wrxck/AgentCraft** | 高(触发时为严重) | 在 `ClaudeClient.java:41-50,119-138` 中每次调用 LLM 时使用 `sudo -n -u claude … claude --dangerously-skip-permissions`;在 `AgentManager.java:329-333` 中使用 `chown -R claude:claude`;未记录的 `/minecraft/fleet-secrets.env` 读取;每个 agent 复制长期有效的 Claude 凭据;静默向 Mojang API 发起外部调用;README 声称存在一个由三个服务组成的 Docker Compose 栈,但仓库中并不存在。 |
**早期模式。** 四个试点中的每一个都暴露了未记录的系统级功能——shell 执行、使用 `eval` / `exec`、开放的 CORS 策略、公共接口服务器绑定、第三方遥测或 root 级别的操作系统操作。四个中有两个达到了**严重**的威胁级别。
**对该问题类别的独立佐证。** 近期在该确切暴露面上发生的 CVE 证实了这些问题并非理论上的:
- LangChain — CVE-2025-68664 *"LangGrinch"*(CVSS 9.3),序列化注入 → 密钥提取。
- Langflow — CVE-2025-3248,未经身份验证的 decorator-payload 远程代码执行。
- mcp-remote — CVE-2025-6514(CVSS 9.6),通过不受信任的 MCP 服务器执行任意 OS 命令。
- Microsoft Semantic Kernel — CVE-2026-25592 和 CVE-2026-26030(CVSS 9.9),prompt 注入 → 宿主机级别的 RCE。
## 8. 相关工作
四大顶级安全会议上与之密切相关的已录用工作:
| 会议 | 论文 | 研究内容 | *未*研究的内容 |
| --- | --- | --- | --- |
| USENIX Security 2025 | *Make Agent Defeat Agent* (AgentFuzz) | LLM agent 中基于污点的漏洞检测。 | 仓库级别的权限测量。 |
| arXiv 2025 | *Progent: Programmable Privilege Control for LLM Agents* | 运行时特权控制。 | 测量声明权限与运行时权限之间的差异。 |
| IEEE S&P 2026 | *Investigating the Impact of Dark Patterns on LLM-Based Web Agents* | Agent 在对抗性 UI 下的决策。 | 权限暴露面测量。 |
| IEEE S&P 2026 | *When AI Meets the Web: Prompt Injection in Third-Party AI Chatbot Plugins* | 插件侧的 prompt 注入。 | 整个仓库的权限审计。 |
| NDSS 2026 LAST-X workshop | *Towards Automating Data Access Permissions in AI Agents* | 权限预测和控制。 | 仓库级别的测量。 |
四大会议之外的相邻工作——*You Told Me to Do It*(指令文本泄漏)、*Security in the Wild* (AIware 2025)、*LLM-Enabled OSS in the Wild* (FSE 2026)、*Agent Skills in the Wild*、*Agent Audit*——要么是对事后发生的攻击和通告进行分析,要么是在单一技能层面而非整个仓库规模上进行操作。
据我们所知,**此前没有任何工作在开源 LLM-agent 仓库的语料库中进行过“声明权限-静态权限-运行时权限”的三角验证**。
## 9. 路线图
| 阶段 | 交付成果 |
| --- | --- |
| **试点(已完成)** | 对 4 个仓库进行 AI 辅助审计,在 AgentCraft 上进行框架验证。 |
| **人工验证(进行中)** | 手工重新验证试点审计中的每个文件/行引用;冻结已验证的结果。 |
| **语料库扩充** | GitHub REST API 元数据处理;整合两个语料库快照中的元数据。 |
| **规模化审计** | 将框架应用于从 2,000 个仓库的语料库中提取的更大样本,包括最小权限基线仓库。 |
| **风险评分模型** | 每个仓库的风险评分;通过针对 LangChain CVE-2025-68664、Langflow CVE-2025-3248、mcp-remote CVE-2025-6514 和 Semantic Kernel CVE-2026-25592 / -26030 的 CVE 回测进行验证。 |
| **异常检测框架** | 基于规则 + 统计异常 + 功能与权限匹配的检测框架。 |
| **缓解措施工件** | 权限清单规范、权限扫描器、沙箱策略模板。 |
| **论文手稿** | 关于开源 LLM agent 中权限度和过度授权的测量研究。 |
## 10. 伦理与负责任的披露
- 所有接受审计的仓库均在 GitHub 上公开可用。
- 所有执行均在具有虚拟凭据的隔离沙箱内进行。不涉及真实的 API 密钥、真实的个人文件,也没有挂载宿主机的家目录。
- 对于仍在维护的仓库中发现的**高**或**严重**级别的漏洞,我们将通过 GitHub Security Advisories 报告给维护者,并设有 90 天的禁运期,之后才会在任何出版物中公开披露。
- 语料库仅包含指向公开仓库的链接;不收集、重新分发或分析任何私有代码、私有凭据或个人数据。
## 11. 引用
如果您使用了本语料库或审计框架,请按以下格式引用:
```
@misc{trustmeagent2026,
title = {Trust Me, I'm an Agent: A Security Measurement of Permission
and Privilege Exposure in Open-Source LLM Agents},
note = {Corpus snapshots v1 and v2, 2026-06-13},
year = {2026},
url = {https://github.com/mrahm65/Trust-Me-I-m-an-Agent-Measuring-the-Security-Exposure-of-Open-Source-LLM-Agents}
}
```
## 12. 许可证
许可证**待定 (TBD)**。该语料库编目了指向公开仓库的*链接*及其公开可用的元数据。每个链接的仓库均受其自身许可证的约束;本项目不重新分发其源代码。
## 13. 致谢与联系方式
这项工作是在项目负责人的监督下进行的。在整个工作流程中使用了 AI 工具进行初步的静态分析、起草和语料库收集;研究方向、框架构建、权限分类法、仓库选择、对结果的解释以及最终验证均由作者本人完成。
**维护者:** Saidur Rahman (`saidur@eub.edu.bd`)
**仓库:** https://github.com/mrahm65/Trust-Me-I-m-an-Agent-Measuring-the-Security-Exposure-of-Open-Source-LLM-Agents
标签:DLL 劫持, 代码分析, 凭证管理, 大语言模型, 权限分析, 沙箱, 请求拦截, 逆向工具