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 劫持, 代码分析, 凭证管理, 大语言模型, 权限分析, 沙箱, 请求拦截, 逆向工具