研究揭示 OSS 漏洞在 Agent 系统中的传播路径
Characterizing Security Effects of OSS Vulnerabilities in Agent Systems
Oscar在50例独立测试集上以96.4% F1识别已知OSS漏洞的已实现安全效应,并定位其最远表现边界。
- 已知OSS漏洞在智能体执行中的后果可能经Tool与Host进入模型可见内容,但存在、可达或被执行并不等于该效应已经实现,也不等于知道它停在哪一层。
- Oscar从公开漏洞信息与补丁抽取触发语义和补丁语义,在相同条件下执行脆弱版与修复版,构建跨Program、Resource、MCP、Host、Agent的执行图,据此归因根运行时变化并定位最大表现边界。
- 50例独立测试集上效应识别F1为96.4%、准确率96.0%;28个正例中24个最大表现边界定位正确。ARIS五个Host的25个可达实例中,9个被识别出已实现效应,人工核对与运行时证据一致。
- 作者写明负结果只针对所分析执行,归因可能受不完整漏洞描述或修复提交中无关变更影响,且结果不支持自然负载下的触发频率。论文未报告独立测试集的底层模型名与重复次数。
- Benchmarks
- OSVindependent test setARIS
- Metrics
- PrecisionRecallF1AccuracyCoverageBoundary AccuracyBoundary CoverageConditional AccuracyMacro-F1
一项研究考察了已知开源软件(OSS)漏洞在 Agent 工作流中被触发时的行为,发现安全相关后果会沿工具输出、Agent 状态和暴露给模型的信息在多个运行时层之间传播。作者利用漏洞感知的语义信息、漏洞版与修复版软件的差分执行,以及跨多层的运行时溯源,判断漏洞是否产生可观测的安全影响,并确定该影响最远停留在哪一层。评估显示,该方法能在多种漏洞场景中准确区分已实现的影响并划定其表现边界。研究者还将分析应用于一个真实 Agent 框架的已记录工作流,在其 OSS 依赖的已知漏洞中发现多处安全影响,并指出应关注依赖漏洞的执行层后果,而非仅看漏洞是否存在。
Paper analysis
What problem does this paper attempt to solve?
已知OSS漏洞在具体智能体执行中的安全效应及其最远表现边界难以仅凭漏洞存在判定。
已知 OSS 漏洞在一次具体智能体执行中实际造成何种安全相关效应,以及该效应最远仍表现到哪一层。
- 场景:智能体经由 Host、Tool、MCP Server 及协议库、解析器、HTTP 客户端和存储组件与外部系统交互。作者称这些组件中的已知漏洞效应可经 Tool 返回和 Host 处理进入模型可见 Observation,并进入后续决策。
- 缺口:作者称现有 OSS 分析能判断漏洞是否存在、可达或被执行,数据流与污点分析能跟踪信息依赖;但资源状态、授权或外部响应改变后,后续表示可能不再对应原始操作、状态或值。智能体侧工作检查 Tool 输出、Observation 及后续行为,通常不回溯到某一已知 OSS 漏洞的已实现运行时效应。
- 观察:初步研究 52 例中 51 例出现有运行时证据的已实现效应。作者将其写成根运行时变化、受影响对象或状态,以及可能的后续安全后果,并把最远仍可辨识的边界称为最大表现边界。
- 做法:作者提出 Oscar(Open-Source CVE Analysis for Agent Runtime),给定已知漏洞、任务和输入,抽取触发语义与补丁语义,对比脆弱版与修复版,再用跨层运行时溯源判定效应并定位最大表现边界。
- 范围:只分析已知漏洞且受影响组件已识别的给定执行。作者写明不发现栈内漏洞、不生成触发输入、不估计自然负载下的触发可能性,也不分析未知漏洞。
What related research exists?
作者将本文定位为连接OSS漏洞运行时效应与智能体跨层表现的分析,而非可达性或污点跟踪本身。
作者把相关工作分成 OSS 侧与智能体/MCP 侧,并认为两侧都没有直接判定:目标漏洞在一次执行中造成的效应,经表示变换后是否仍表现、最远到哪一层。
OSS 组件与补丁
- 组件与脆弱代码:OSSPolice(Duan 等,2017)、CENTRIS(Woo 等,2021)、OSSFP(Jiahui Wu 等,2023)识别复用组件或第三方库;VulSCA(Hu 等,2026)与 Ponta 等(2018)做代码级或下游确认;DSHGT(Zhang 等,2024)与 LLMxCPG(Lekssays 等,2025)在程序依赖图上分析。作者称这些研究不捕获漏洞的具体运行时效应。
- 触发与补丁:PatchFinder(Li 等,2024)、E-SPI(Wu 等,2022)、GraphSPD(Wang 等,2023)定位或表示修复;PS3(Zhan 等,2024)、Robin(Yang 等,2023)、P3(Sharma 等,2025)以及 Gao 等(2025)的修复语义抽取,区分补丁是否存在或补丁前后行为。作者称它们恢复触发条件与修复动作,但不重建运行时效应,也不追踪到脆弱程序之外。
智能体、MCP 与溯源
- 程序分析与运行时测试:LLMSmith(Liu 等,2023)、TaintP2X(He 等,2026)、AgentFlow(Wang 等,2026)、Agent-BOM(Li 等,2026)、Agentproof(Xavier 等,2026)把分析扩展到模型与程序的交互。ToolEmu(Ruan 等,2024)、AgentFuzz(Liu 等,2025)、AGENTVIGIL(Wang 等,2025)、MELON(Zhu 等,2025)、ChainFuzzer(Wu 等,2026)在仿真、模糊测试或再执行中检查智能体行为;引言把 IPIGuard(An 等,2025)列入对后续行为的考察。作者称前者不追踪某一 OSS 漏洞的跨层效应,后者不把观察到的行为归因到已知 OSS 漏洞。
- 溯源与 MCP:KAIROS(Cheng 等,2024)、R-CAID(Goyal 等,2024)、ORTHRUS(Jiang 等,2025)以及 MAGIC、FLASH、SHADEWATCHER、DEPIMPACT 基于溯源做检测、根因或依赖影响分析。作者称其主要面向系统级事件,而非漏洞特定效应。MCP Safety Audit(Radosevich 与 Halloran,2025)、Hasan 等(2026)、MCP-BiFlow(Hou 等,2026)、DCIChecker(Shi 等,2026)、MCPZoo(Chen 等,2026)和 MindGuard(Wang 等,2025)分析 MCP 工作流、双向数据流、描述–实现不一致或工具投毒。作者称其聚焦 Agent–Tool 边界,未建立已知 OSS 漏洞与智能体运行时效应的端到端联系。
基线与数据
- 基线:Code Reachability(Yulun Wu 等,2023)检查漏洞相关代码区能否从当前 Tool 入口到达;AgentFuzz 观察任务执行中的触发行为;MCP-BiFlow 恢复请求侧与返回侧路径。比较时输出归一为 Effect Yes、Effect No 或 Unassessed。
- 数据:案例来自公开 MCP server、Agent tool 及其依赖在 OSV 中的已知漏洞;真实环境为 ARIS。
作者将 Oscar 放在这一缺口上:要判定的是目标漏洞造成的运行时变化在后续层是否仍表现,而不是漏洞是否存在、路径是否可达,或是否出现任意不安全数据流。
How does the paper address this problem?
Oscar用漏洞语义、脆弱/修复配对执行和跨层溯源图重建已实现效应并定位最大表现边界。
Oscar 在给定已知漏洞、智能体任务和输入后分三阶段工作:抽取漏洞语义,构建脆弱版与修复版的跨层执行图,再重建已实现效应并定位最大表现边界(Figure 3)。
问题抽象
- 效应结构:初步研究把一次案例写成根运行时变化、受影响对象或状态,以及随后的安全相关值、状态或外部结果。若前两者已构成效应且没有进一步后果,则第三项为空。越界读文件的例子中,根变化是越界读,对象是目标文件,后果是读到的内容。
- 表现边界:按工具增强智能体的结构检查底层运行时、Tool Result、Host 处理与模型可见 Observation。一次 Tool 调用及其对应 Observation 的处理称为一个执行轮次。最大边界只取 Runtime、Tool、Observation;Host 是中间变换,不是单独的最大边界。
- 两个问题:RQ1 问已知 OSS 漏洞在具体执行中产生什么安全相关效应;RQ2 问这些效应沿执行栈表现到多远。
漏洞语义分析
- 触发语义 A_V:从 CVE 描述、安全通告、PoC 及相关文档抽取接口、参数和触发条件,用于构造相关执行,并约束后续归因。满足 A_V 只表示到达相关路径,不确立已实现效应。
- 补丁语义 P_fix:用 Gao 等(2025)的修复语义抽取,并结合漏洞描述、安全通告和补丁相关文本,刻画修复所消除或约束的脆弱行为,用来判断运行时差异是否对应补丁处理的行为。
跨层执行图
- 节点:任务级执行记为 G = (N, R)。Program 层有 Function、Statement、Value;Resource 层有外部资源或状态;MCP 层有 Tool Invocation、Tool Parameter、Tool Result、MCP Message;Host 层有 Host Processing;Agent 层有 Agent Observation 与 Agent Action(Table 1)。
- 关系:Call 只表示调用,返回值由 Data 或 Bind 表示;另有 Control、Resource、Serialize、Transport、Observe、Action(Table 2)。节点是具体运行时实例,同一函数或资源可因不同轮次多次出现;关系只实例化当前执行中观察到的依赖。
- 配对执行:相同 Tool 输入、Host 配置和外部环境下分别运行脆弱版与修复版,得到 G_v 与 G_f。设置时只有目标 OSS 版本不同,图中只放入实际发生的事件。若 Agent Action 再触发 Tool,则追踪到任务完成。运行示例是带路径穿越的文件读取 Tool:脆弱版访问预期目录之外的文件,修复版在访问前拒绝。
效应重建与边界定位
- 根变化:按执行语义对齐两图,比较事件、关系、状态和值。候选差异有三类:只出现在一次执行中的事件或关系;对齐实体的值或状态不同;同一操作交互的资源或结果不同。再用 A_V 确认触发条件,用 P_fix 判断差异是否对应补丁消除或约束的行为。最早的、可归因的安全相关变化定义为 r_V。若不存在,则报告效应为空并停止。
- 重建:从 r_V 沿 Resource 与 Data 关系得到受影响对象或状态 O_V,再沿 Data、Resource、Control 关系得到后续后果 S_V。表示为 EV=(rV,OV,SV),即根变化、受影响对象或状态,以及额外安全后果;若前两者已构成完整效应,则 S_V 为空。
- 边界:从构成效应的实体沿 G_v 的跨层溯源前进。后层实体若仍通过溯源连接 r_V、O_V 或 S_V,并保留相应安全相关行为、状态、值或结果,则视为效应表示;不要求与原始值逐字节相同。仅携带漏洞相关诊断信息、但效应本身不再被表示,则不够。B(EV)∈{BRuntime,BTool,BObservation}:没有效应表示进入 Tool Result 则为 Runtime(Program 与 Resource);进入返回路径但未进入 Observation 则为 Tool(MCP 与 Host);在模型可见 Observation 中仍可辨识则为 Observation。
What experiments did the paper conduct?
独立测试集上效应识别F1为96.4%,28个正例中24个边界定位正确;ARIS上9例有已实现效应。
实验设置
- 实现与机器:Python 3.12。环境为 Ubuntu 24.04.2 LTS、两颗 64 核 AMD EPYC 7B13、188 GiB 内存、40 GiB 与 80 GiB 的 NVIDIA A100 各一,Docker 28.5.1 隔离案例。配对执行只改变目标 OSS 版本。
- 初步研究:MCP server、Agent tool 及依赖映射到 OSV,52 例、49 个项目。每例构造满足漏洞相关条件的输入并执行完整任务。三名研究者独立分析轨迹,统一准则后复查全部案例。
- 独立测试集:与初步研究按项目分开,开发/测试再按项目–漏洞族分组。Table 3 为 50 例:Effect Yes 28、Effect No 22;正例边界为 Runtime 10、Tool 8、Observation 10。任务与上下文用 DeepSeek Harness 构造,效应标签及正例的效应与边界由人工按漏洞语义和执行上下文标注,不是 LLM 评审。
- 基线与指标:Code Reachability、AgentFuzz、MCP-BiFlow,输出归一为 Effect Yes、Effect No 或 Unassessed。效应识别报告 Precision、Recall、F1、Accuracy、Coverage。边界指标只在 28 个正例上计算:Boundary Accuracy 覆盖全部 28 例,Conditional Accuracy 只覆盖产出了边界的案例,Macro-F1 覆盖 Runtime、Tool、Observation。
- 论文未写明的设置:独立测试集的底层模型名称、该集合的重复次数、标注人数与一致性数值。Table 4 也未按模型拆分。
- ARIS:固定 commit 2132036。论文写截至 2026-10-02 该仓库有 16901 stars、1428 forks。五个 Host 为 DeepSeek Harness、Qwen-Agent、PraisonAI、Goose、OpenCode,差异在 Tool 调用、MCP 集成、会话表示和模型请求构造。OSV-Scanner 2.6.0 扫描 5941 个依赖条目,得到 117 个脆弱包版本、303 个 CVE,再保留 25 个可通过正常功能行使的可达实例。同一任务下脆弱版与修复版各重复 3 次。
主结果
据 Table 4,50 例独立测试集以 Effect Yes 为正类。四种方法 Coverage 均为 100.0%。
Swipe horizontally to read the table
方法 Prec. Rec. F1 Acc. Code Reachability 63.6% 100.0% 77.8% 68.0% AgentFuzz 95.8% 82.1% 88.5% 88.0% MCP-BiFlow 85.7% 64.3% 73.5% 74.0% Oscar 96.4% 96.4% 96.4% 96.0% - 基线误差:作者报告 Oscar 的 F1 比三者高 18.6、7.9、22.9 个百分点。Code Reachability 的 16 个假正例中,9 例到达相关代码但未满足触发条件,7 例有中间行为但没有预期的资源、值或控制状态变化。作者称无假负例是因为已实现效应必然走过相关路径,可达本身不表示效应已发生。
- 触发与传播:AgentFuzz 有 1 个假正例、5 个假负例。假正例有漏洞相关控制信号,但没有目标资源、敏感值或持久状态的对应变化;假负例改变了外部资源、文件或持久状态,却没有其用于触发检测的返回值、异常或崩溃。MCP-BiFlow 检出全部 10 个 Observation 与 8 个 Tool 边界效应,漏掉全部 10 个 Runtime 边界案例;3 个假正例虽有 source-to-sink 路径,传播值本身不能确立目标 CVE 的后果已实现。
- Oscar 的错例:27 个正例与 21 个负例判断正确,包括全部 10 个 Observation、全部 8 个 Tool 和 10 个 Runtime 中的 9 个。22 个负例中,到达脆弱代码但无效应的 9 例、未触发或路径不可达的 6 例全部被拒绝;机制执行但无具体后果的 7 例中拒绝了 6 例。唯一假正例把中间控制行为归因到目标效应,但没有资源变化、敏感值或持久状态修改。唯一假负例发生在外部资源或持久状态,状态变化无法可靠关联到对应 Tool 调用。作者称三种基线各自提供路径、触发或传播证据,但单独都不足以同时确立预期后果已发生且可归因于目标 CVE。
最大表现边界定位
- 总体:28 个 Effect Yes 上,Oscar 对 27 例给出边界,正确 24 例。Boundary Accuracy 85.7%,Boundary Coverage 96.4%,Conditional Accuracy 88.9%,Macro-F1 87.1%(Section 4.3)。Table 5 中 Runtime、Tool、Observation 的 F1 分别为 88.9%、82.4%、90.0%。
- 错例:Runtime 10 例中 8 例正确;1 例因 Tool Result 中的诊断信息被当成效应表示而标到 Tool,1 例因外部状态证据不完整标为 Unassessed。Tool 8 例中 7 例正确,1 例把 Host 处理误判为效应进入了 Observation。Observation 10 例中 9 例正确,1 例因嵌套 Host 变换改变表示结构、对应关系中断而停在 Tool。
- 作者解读:没有 Runtime 案例被直接标到 Observation,也没有 Observation 案例被降到 Runtime。作者称其余错误集中在后层信息是否仍表示同一已实现效应;Tool Result 可以含诊断信息却不承载效应,效应也可以在表示改变后仍留在模型可见内容中。
ARIS 真实环境
- 结果:25 个可达实例中,Oscar 识别出 9 个已实现效应并给出边界(Table 7)。对其余实例,作者报告要么没有可归因效应,要么证据不足以完成归因;论文未给出这两类的分项数量。人工检查 9 例完整轨迹后,作者报告效应与边界都与运行时证据一致:4 例最大边界为 Runtime,5 例为 Observation。
- 分布:Runtime 为 DeepSeek Harness、Qwen-Agent、PraisonAI 上的 CVE-2026-33989/mobile-mcp(截图文件创建于预期目录外),以及 Goose 上的 CVE-2025-11849/Mammoth(文档转换造成越界文件状态修改)。Observation 为 Qwen-Agent、PraisonAI、OpenCode 上的 CVE-2024-47081/Requests(.netrc 派生凭证或 Authorization 进入模型请求),Goose 上的 CVE-2026-32871/FastMCP(未授权管理员响应进入模型请求),OpenCode 上的 CVE-2026-44243/GitPython(非法 ref 路径被写入并随后由 diff Tool 返回)。
- 两例:Qwen-Agent 上,脆弱版 mobile-mcp 0.0.48 在预期目录外创建截图文件,修复版 0.0.49 在写入前拒绝;Tool Result 没有该文件系统效应的表示,边界为 Runtime。OpenCode 上,脆弱版 Requests 2.32.3 出现非预期的 .netrc 凭证选择,并把得到的 Authorization 值发往受控 HTTP 服务,修复版 2.32.4 不再如此;该值进入 Tool Result 并出现在下一次模型请求中,边界为 Observation。作者称这对应两种模式:底层资源或状态改变但未进入 Tool Result,或效应经 Tool Result 与 Host 处理到达 Observation。
消融:归因证据与图表示
- 去掉归因证据:Table 6 中,去掉 P_fix 后 Precision/Recall/F1/Accuracy 为 80.6%/89.3%/84.7%/82.0%,相对完整流程多 5 个假正例、2 个假负例。去掉修复版执行后为 83.9%/92.9%/88.1%/86.0%,多 4 个假正例、1 个假负例。作者称没有补丁语义时,与目标漏洞无关的版本差异和形似脆弱操作的行为更容易被归因到目标 CVE;没有修复版执行时,无法核对该行为是否在修复实现上消失。
- 换表示:Figure 4 中,Raw Trace 的效应识别 P/R/F1 为 71.8%/100.0%/83.6%,边界 Acc./Coverage/F1 为 57.1%/100.0%/53.2%。Generic Provenance Graph 为 78.8%/92.9%/85.2% 与 64.3%/92.9%/63.5%。Full Oscar 为 96.4%/96.4%/96.4% 与 85.7%/96.4%/87.1%。三种表示使用相同的脆弱/修复执行、源码、补丁信息、候选证据、Host 证据、重复运行和决策阈值;论文未给出阈值和重复次数。
- 作者解读:Raw Trace 把 22 个负例中的 11 个标为 Effect Yes,边界只对 16/28 正确,其中 6 个 Runtime 与 6 个 Tool 被提升到 Observation。Generic Provenance 的效应假正例为 7、漏 2 个正例;边界 26/28 给出、正确 18,Runtime 正确 8/10,Tool 仅 2/8,6 个 Tool 被提升到 Observation,2 个 Observation 为 Unassessed。作者称后层出现相关差异不足以确立效应本身传到了该层;通用溯源不显式编码效应三元组中的角色,也不判断后层表示是否保留安全相关语义。
其他消融与分析
- 初步研究:51/52 有已实现效应;Figure 1(a) 中 51/51 含根变化与受影响对象,42/51(82.4%)有后续安全后果。
- Figure 1(b),非互斥:CWE-200 32/51(62.7%),CWE-610 28/51(54.9%),CWE-863 18/51(35.3%),CWE-642 15/51(29.4%)。
- Figure 2(a):Observation 32/51(62.7%),Tool 15/51(29.4%),Runtime 4/51(7.8%)。
- Figure 2(b),未到 Observation 的 19 例:Host 文本/字段 redaction 9/19(47.4%),Host native-carrier down-projection 6/19(31.6%),Tool Result omission 4/19(21.1%)。
- Table 6 混淆计数:w/o P_fix 为 TP/FP/FN/TN = 25/6/3/16;w/o Fixed Run 为 26/5/2/17。
What are some points that can be further explored?
作者指出负结果只针对所分析执行,且自然负载下的触发频率不在本研究范围内。
作者指出的局限与后续方向
- 负结果的含义:负结果只表示所分析执行中未建立可归因的安全相关效应,不表示该漏洞在其他输入下无害或不可达(Section 6, Scope of Analysis)。
- 归因材料:作者写明,归因仍可能受不完整的漏洞描述或修复提交中的无关变更影响(Section 6, Vulnerability Attribution)。
- 可观察见证:效应确认需要与相关执行关联的可观察见证;评估中唯一假负例来自无法可靠关联到对应 Tool 调用的外部状态变化(Section 6, Runtime Evidence Completeness)。
- Host 变换:复杂的 Host 侧变换仍可能使下游表示是否保留同一安全相关效应变得难以判断;作者称这对应 RQ2 中其余定位错误(Section 6, Cross-Layer Effect Correspondence)。
- 自然负载:自然发生的智能体负载与用户输入不可得,作者构造了与漏洞相关的任务;结果支持的是跨 Agent 运行时的可移植性,而不是自然负载下的漏洞触发频率(Section 6, Generalizability and Realism)。
实验覆盖范围
- 初步研究为 52 例、49 个 OSS 项目,来自 MCP server、Agent tool 及依赖到 OSV 的映射;51 例有已实现效应(Section 2)。
- 独立测试集为 50 例,Effect Yes 28、Effect No 22,正例边界为 Runtime 10、Tool 8、Observation 10;与初步研究按项目分开(Table 3,Section 4.1)。
- 效应识别基线为 Code Reachability、AgentFuzz、MCP-BiFlow;边界定位只在 28 个正例上评估(Section 4.2–4.3)。
- 真实环境为 ARIS commit 2132036 上的 DeepSeek Harness、Qwen-Agent、PraisonAI、Goose、OpenCode;OSV-Scanner 2.6.0 得到 5941 个依赖条目、117 个脆弱包版本、303 个 CVE,保留 25 个可达实例,每个版本重复 3 次(Section 5.1)。
- 论文未报告独立测试集的底层模型名称、该集合的重复次数和标注一致性数值;也未报告 A_V、P_fix 抽取是否调用模型及模型名,以及 Section 4.4.2 消融中的决策阈值和重复次数。
Summarize the main content of the paper
Oscar把已知OSS漏洞分析从“是否存在”推进到一次执行中的已实现效应与最远表现边界。
Oscar 是面向已知 OSS 漏洞的运行时分析框架,用来判断一次智能体执行里该漏洞是否造成安全相关效应,以及效应最远表现到哪一层。
- 问题:依赖存在、代码可达或被执行,都不等同于安全后果已经在这次执行中实现;后果经过 Tool 与 Host 后,表示还可能改变。
- 方法:抽取触发语义与补丁语义,在相同条件下运行脆弱版和修复版,用跨 Program、Resource、MCP、Host、Agent 的执行图归因最早的安全相关变化,再重建受影响对象与后续后果,并在 Runtime、Tool、Observation 中取最大边界。
- 测试集:50 例独立测试集上,Oscar 的效应识别 Precision、Recall、F1 均为 96.4%,Accuracy 为 96.0%(Table 4)。作者报告其 F1 比 Code Reachability、AgentFuzz、MCP-BiFlow 分别高 18.6、7.9、22.9 个百分点。
- 边界与消融:28 个正例中正确定位 24 个最大表现边界,Boundary Accuracy 为 85.7%(Section 4.3)。去掉补丁语义或修复版执行后,F1 分别为 84.7% 与 88.1%(Table 6)。
- 真实环境:ARIS 上 25 个可达实例中识别出 9 个已实现效应;作者报告人工核对与运行时证据一致,其中 4 例停在 Runtime、5 例到达 Observation(Section 5.2,Table 7)。
- 作者结论:作者称应按脆弱依赖在执行中的后果来分析,而不是只看漏洞是否存在;负结果只针对所分析的那次执行。