跳到正文
原文
arXiv· arXiv:2604.03070· Zhihao Chen, Ying Zhang, Yi Liu, Gelei Deng, Yuekang Li, Yanjun Zhang, Jianting Ning, Leo Yu Zhang, Lei Ma, Zhiqiang Li·本站收录· 原文发表精选关注度43

LLM Agent 技能如何泄露用户凭据:一项实证研究

How Your Credentials Are Leaked by LLM Agent Skills: An Empirical Study

论文速读

评测与基准

据论文 PDF 整理(AI 生成),以原文为准

作者对 SkillsMP 上 17,022 个 agent skills 做实证研究,称 520 个存在凭据泄露,89.6% 可在常规执行中被利用。

问题
LLM agent skills 在特权执行环境中处理敏感凭据,但凭据如何经 skill 生态泄露尚缺系统研究。作者称这是首个针对 agent skills 凭据泄露的大规模实证研究。
方法
从 SkillsMP 的 170,226 个 skills 中分层随机采样 17,022 个,依次进行关键词与 AST 静态过滤、注入 mock 凭据的沙箱双条件动态测试、三人人工分类,归纳出 10 种泄露模式。
实验与结果
作者报告 520 个 skills 含 1,708 个安全问题:76.3% 需联合分析自然语言与代码,调试日志占漏洞问题的 73.5%,89.6% 的受影响 skills 可在常规执行中被利用,泄露凭据在 50+ 个 fork 中持续存在。
局限与可以继续做的
作者指出:意图分类有主观性;AST 分析仅覆盖 Python/JavaScript 的过程内分析;数据仅来自 SkillsMP 单一平台;沙箱受 LLM 非确定性影响,每条件仅跑 3 轮。
实验设置SkillsMP · 受影响 skill 数、安全问题数 等
威胁模型
研究 agent skills 生态中的凭据泄露:skills 在本地以 ambient authority 运行,可访问环境变量、配置文件与网络;泄露既包括开发者疏忽造成的无意暴露,也包括恶意 skill 的蓄意窃取;受害系统是安装并运行这些 skills 的 LLM agent 及其用户。
基准
SkillsMP
指标
受影响 skill 数安全问题数可利用比例Cohen's κ
AI 导读和推荐理由研究团队从 SkillsMP 的 170,226 个 Agent 技能中分层抽样 17,022 个进行实证分析,发现 520 个技能存在 1,708 个凭据泄露问题,其中 437 个源于开发者疏忽,83 个为恶意技能。76.3% 的案例需要同时分析自然语言描述和代码才能发现,调试日志占全部漏洞问题的 73.5%,原因是 Agent 框架会把 stdout 送入 LLM 上下文窗口。动态沙箱测试显示 89.6% 的受影响技能可在常规执行中被利用,92.5% 在执行阶段触发;从 107 个上游仓库移除的凭据仍留在 50 多个独立 fork 中。披露后所有 83 个恶意技能已被移除,91.6% 的硬编码凭据案例得到修复。

研究团队从 SkillsMP 的 170,226 个 Agent 技能中分层抽样 17,022 个进行实证分析,发现 520 个技能存在 1,708 个凭据泄露问题,其中 437 个源于开发者疏忽,83 个为恶意技能。76.3% 的案例需要同时分析自然语言描述和代码才能发现,调试日志占全部漏洞问题的 73.5%,原因是 Agent 框架会把 stdout 送入 LLM 上下文窗口。动态沙箱测试显示 89.6% 的受影响技能可在常规执行中被利用,92.5% 在执行阶段触发;从 107 个上游仓库移除的凭据仍留在 50 多个独立 fork 中。披露后所有 83 个恶意技能已被移除,91.6% 的硬编码凭据案例得到修复。

推荐理由研究用 17,022 个 Agent 技能样本量化凭据泄露的普遍性与可利用性,可供技能开发者检查发布前的凭据处理和日志输出。

深度解读

6个问题,点开问题读完整回答

  1. 这篇论文试图解决什么问题?

    作者研究 agent skills 生态中凭据如何泄露,称此前无工作系统研究这一问题。

    核心问题:第三方 agent skills 在特权执行环境中处理敏感凭据,但凭据如何经 skill 生态泄露尚缺乏系统研究。

    • 问题场景与重要性:agent skills 是 NL 描述加可执行代码的混合产物,在 ClawHub 等框架中快速扩散;作者称许多框架在用户本地直接运行 skills,使其获得环境变量、配置文件和主机网络的隐式访问(ambient authority),凭据泄露成为供应链与本地双重问题。
    • 现有研究不足:作者称已有工作(如对 31,132 个 skills 的漏洞分析、确认 157 个恶意 skills 的行为研究)刻画的是总体漏洞面与攻击者策略,据其所知没有工作系统研究凭据如何经 agent skill 生态泄露。
    • 核心观察:skills 的 NL 进入 LLM 推理上下文、PL 继承本地凭据存储,两种模态可能以单独分析都无法发现的方式暴露凭据;作者认为这种跨模态交互是 agent skills 区别于传统单模态软件包的核心风险。
    • 论文产出:对 SkillsMP 采样 17,022 个 skills 做四阶段实证分析,构建含 437 个易受攻击与 83 个恶意 skills 的数据集,提出 10 种泄露模式的分类法,并完成负责任披露。
    • 威胁模型(本研究刻画的泄露场景):
      • 目标:skill 处理的身份认证材料(API key、OAuth token、私钥等 9 类,Table 1)暴露给未声明的接收方或渠道。
      • 攻击者:发布恶意 skill 的开发者,利用 NL/PL 解耦展示良性接口、执行多目标载荷;或在 skill 消费的外部内容中嵌入间接提示注入。
      • 受害系统:在本地以宿主进程完整权限运行 skill 的 LLM agent(沙箱中以 Claude Code 为运行时)及其用户。
  2. 有哪些相关研究?

    相关工作分三组:仓库密钥检测、软件供应链安全、LLM agent 生态安全;作者称均未覆盖 NL+PL 跨模态凭据泄露。

    软件仓库中的密钥检测

    • Feng et al. (2022) 用深度神经网络在 64,045 个 GitHub 仓库中检测出 142,479 个密码;Shi et al. (2025) 在 413,775 个小程序中发现 84,491 个凭据泄露;Krause et al. (2023) 报告 30.3% 的受访开发者遇到过密钥泄露事件。
    • 另有针对 Android 应用日志、IoT 固件、微信小程序数据流、浏览器扩展和 Web API 的泄露研究。
    • 论文指出这些方法面向单语言代码库,假设密钥以字符串字面量出现、可用正则或神经模式匹配发现;agent skills 打破了这一假设,凭据可经 NL 指令、stdout 进入 LLM 上下文等跨模态渠道暴露,现有检测器不覆盖这些渠道。

    软件供应链安全

    • Zimmermann et al. (2019) 分析 npm 依赖图的系统性风险,后续工作识别了 Maven 和 Go 的攻击向量,Torres-Arias et al. (2024) 提出供应链安全属性分析框架。
    • 论文指出这些工作共享同一威胁模型——单语言注册表中经依赖解析注入恶意代码;skill 注册表结合了 NL 与 PL,存在传统包没有的攻击向量。
    • Liu et al. (2026) 通过动态沙箱在 98,380 个注册条目中确认 157 个恶意 skills;Hu et al. (2026) 称恶意工具的合成成本低至每个 0.013 美元。论文指出这些研究聚焦恶意行为,skill 供应链是否助长凭据窃取仍未被研究。

    LLM agent 生态安全

    • 提示注入可操纵 agent 决策(AgentDojo、InjecAgent 等),不受约束的自主性可造成系统破坏;Deng et al. (2026) 提出五层生命周期威胁框架,Shen et al. (2025) 编目 50 个 agent 应用的 221 个漏洞,Maloyan et al. (2026) 系统化 42 种针对编码助手的攻击技术,Jiang et al. (2026) 综述 skill 全生命周期。
    • 防御工作包括权限控制框架、沙箱隔离、基于推理的护栏、能力形式化分析和 MCP 专用漏洞基准。

    本文定位:作者称上述工作均未考察 NL+PL skill 架构如何内在地助长凭据泄露——现有密钥检测器遗漏跨模态渠道,供应链分析聚焦恶意行为而非数据外泄;本文的实证研究填补这一空白。论文未设对比基线方法或复用现有基准。

  3. 论文如何解决这个问题?

    四阶段流程:SkillsMP 采样建库 → 关键词加 AST 静态过滤 → mock 凭据沙箱双条件动态验证 → 三人人工分类并归纳分类法。

    整体思路是对 SkillsMP 采样的 17,022 个 skills 做四阶段实证研究:数据集收集、静态过滤、动态验证、人工分类(Figure 2)。作者称前三阶段是证据收集基础设施,最终标签在人工分类阶段经联合判读确定。

    数据集收集

    • 来源与规模:SkillsMP 平台截至 2026 年 2 月 12 日的全部活跃与历史 skills 快照,总体 170,226 个;随机采样 10%(17,022 个)做深入分析。
    • 采样依据:作者称按 Cochran 公式(有限总体校正,p = 0.5),17,022 超过 99% 置信水平、1% 误差边际所需的最小样本量;全量分析不可行是因为动态验证需在专用沙箱中逐个执行。
    • 数据构成:每个 skill 收集两路产物——源代码文件(共 37,409 个)与 NL 描述(共 17,022 份,含 prompts、manifests、SKILL.md 等)。

    静态凭据过滤

    • 关键词匹配:采用已有凭据泄露分类法,三名有安全背景的作者先在 150 个随机 skills 上做试点研究校准关键词表(Table 1,9 类凭据);在 NL 流标记 4,127 个、源代码流标记 6,893 个 skills,2,341 个被两路同时标记。
    • NL 语义约束分析:在关键词命中处的三句滑动窗口内检查三类约束——凭据词与动作动词共现、提示注入模式、社会工程话术;保留 309/4,127 个。
    • 源代码 AST 分析:先剔除注释、文档字符串、示例占位块等非执行区域,再用 tree-sitter 做 AST 解析(支持 Python 与 JavaScript),做函数作用域解析和敏感 sink 检测(网络传输、日志、文件 I/O 三类,按严重度排序,网络传输最高);保留 2,958/6,893 个。两路合并得 3,156 个候选 skills。

    动态验证

    • 执行环境:每个候选 skill 在隔离 Docker 容器(Ubuntu 22.04、Python 3.11、Node.js 20)中由默认设置的 Claude Code agent 实例运行,配 tcpdump、strace、auditd 与 stdout/stderr 捕获,限 2 GB 内存、120 秒超时。
    • Mock 凭据:按真实部署方式经三条渠道注入带唯一标记的 mock 凭据——环境变量、skill manifest 引用的配置文件、文档声明的认证参数,使泄露可归因到具体 skill 与执行轮次。
    • 双条件差分测试:良性条件(B)按 skill 声明的工作流执行,对抗条件(A)在 skill 消费的外部内容中嵌入对抗载荷;每条件执行 3 轮。判定阈值为 B ≥ 2 或 A ≥ 1,作者称较严的良性阈值过滤非确定性伪影,较宽的对抗阈值反映一次成功利用即构成真实漏洞。此阶段保留 1,427 个 skills。

    人工分类与分类法生成

    • 分类协议:三名作者独立审查全部 1,427 个 skills,先读文档理解声明功能,再对照 (B, A) 执行画像给出 Benign / Vulnerable / Malicious 标签;三种行为画像结构化分类:攻击诱发型(B ≤ 1 ∧ A ≥ 1,237 个全部判 Vulnerable)、双触发型(B ≥ 2 ∧ A ≥ 1,判出 19 Vulnerable、72 Malicious)、仅基线型(B ≥ 2 ∧ A = 0,按意图匹配判 907 Benign、181 Vulnerable、11 Malicious)。
    • 一致性:两两评审者平均 Cohen's κ = 0.88(N = 1,427),分歧与第三人讨论解决;最终确认 437 个 Vulnerable、83 个 Malicious、907 个 Benign。
    • 分类法生成:演绎上锚定 CWE-798 与 CWE-200,归纳上用开放编码补充 agent 特有攻击向量;三轮轴心编码后编码本收敛(加权 κ = 0.82),得到 4 种开发者疏忽模式与 6 种恶意攻击模式。
  4. 论文做了哪些实验?

    17,022 个 skills 中 520 个确认泄露(1,708 个问题);76.3% 需跨模态分析,调试日志占漏洞 73.5%,89.6% 可利用。

    实验设置

    • 研究对象:SkillsMP 平台 170,226 个 skills 中分层随机采样的 17,022 个(含 37,409 个源代码文件、17,022 份 NL 描述),围绕 RQ1 流行度、RQ2 泄露模式、RQ3 可利用性展开。
    • 执行环境:每个候选 skill 在隔离 Docker 容器中由默认设置的 Claude Code agent 运行,监控网络 I/O、系统调用、文件审计与 stdout/stderr;2 GB 内存、120 秒超时。
    • 测试协议:良性与对抗双条件,每条件 3 轮;泄露指标阈值为 B ≥ 2 或 A ≥ 1。
    • 评审方式:三名有安全研究经验的作者人工分类全部 1,427 个动态标记 skills,平均 Cohen's κ = 0.88;分类法编码三轮收敛,加权 κ = 0.82。
    • 指标:受影响 skill 数与占比、安全问题数、各模式/渠道/生命周期分布、可利用比例;论文未设基线方法做对比实验。

    主结果

    RQ1 总体结果(据 4.1 节与 Table 2):

    维度数值
    含凭据泄露的 skills520 / 17,022(3.1%)
    安全问题总数1,708(中位数每 skill 2 个,均值 3.28)
    开发者疏忽(Vulnerable)437 个(84.0%)
    蓄意恶意(Malicious)83 个(16.0%)
    泄露最多功能类别Web Scraping 17.1%、Data Processing 14.6%、API Integration 13.1%
    语言分布Python 60.0%、JavaScript/Node.js 27.5%、TypeScript 7.9%
    攻击面Code+NL 76.3%、仅 Code 20.6%、仅 NL 3.1%
    • 作者称 76.3% 的案例只有联合分析 NL 描述与程序逻辑才能发现,单一模态都无法揭示暴露,3.1% 经纯自然语言提示注入利用,无需可执行代码。
    • 作者称 72% 的硬编码凭据案例带有 AI 辅助开发签名(GitHub commit 信息中引用 Copilot、Claude 或 ChatGPT),认为代码生成工具在规模化传播不安全模式。

    RQ2 泄露模式分类(据 Table 3):

    表格较宽,可左右滑动

    类别模式问题数(组内占比)涉及 skills
    漏洞(1,371 问题)Information Exposure1,007(73.5%)352
    Hardcoded Credentials249(18.2%)107
    Insecure Storage110(8.0%)77
    Artifact Leakage5(0.4%)5
    恶意(337 问题)Remote Exploitation176(52.2%)55
    Defense Evasion116(34.4%)34
    Credential Compromise28(8.3%)16
    Data Exfiltration12(3.6%)10
    Resource Hijacking4(1.2%)4
    Persistence1(0.3%)1
    • 作者称 Information Exposure 源于 agent 框架将 stdout 注入 LLM 上下文,使 print/console.log 输出的凭据可被自然语言查询取回;硬编码凭据类型分布为 API keys 29.7%、tokens 24.5%、passwords/secrets 19.7%、OAuth 8.8%(Figure 3)。
    • 作者称 37.3% 的恶意 skills 组合多种攻击模式,最常见链条是先用 Base64 等 Defense Evasion 绕过静态扫描,再触发 Remote Exploitation 建立反向 shell 或 RCE 后门。

    RQ3:可利用性

    • 测了什么:520 个受影响 skills 在沙箱中的运行时泄露渠道与生命周期阶段。
    • 结果:466/520(89.6%)在常规执行中经至少一个运行时渠道泄露、无需提升权限;其余 54 个含硬编码凭据但运行时不泄露。渠道分布(Figure 4):stdout 泄露 394 个(75.8%)、文件暴露 97 个(18.7%,静态源代码 54 加未保护存储 43)、主动外泄到攻击者端点 68 个(13.1%)。92.5%(481/520)在 execute 阶段变得可利用。
    • 作者解读:凭据泄露在 fork 网络中持续存在——107 个上游仓库删除硬编码凭据后,同样凭据仍在 50+ 个独立 fork 中活跃;bybit-trading 被下架后其载荷仍在 fork 网络中传播,作者称单一 C2 载荷曾扩散到 70 个仓库的 330 个文件、使用 15 个不同 skill 名。

    负责任披露与修复

    • 测了什么:向 SkillsMP 平台报告全部 520 个受影响 skills 后的处置结果。
    • 结果:平台在 48 小时内确认并启动修复;全部 83 个恶意 skills 被永久移除,91.6% 的硬编码凭据案例已被开发者修复。

    其他消融与分析

    • 静态过滤保留率:NL 语义约束分析保留 309/4,127;AST 分析保留 2,958/6,893;合并后 3,156 个候选(198 仅 NL、2,847 仅代码、111 两路)。
    • 动态验证标记率:3,156 候选中 1,427 个出现至少一个可疑运行时指标。
    • 人工分类产出:1,427 个中 437 Vulnerable、83 Malicious、907 Benign。
    • 窗口大小选择:作者称两句窗口会漏掉跨句凭据-动作引用,更大窗口引入无关上下文的伪共现,故取三句。
  5. 有什么可以进一步探索的点?

    作者列出意图分类主观性、AST 覆盖范围、单平台数据三类局限;实验仅覆盖 SkillsMP 采样与 Claude Code 运行时。

    作者指出的局限与后续方向

    • 意图分类主观性(第 7 节 Construct Validity):判断凭据泄露是意外还是蓄意本质上主观;虽经三人独立标注与讨论解决分歧(κ = 0.88),分类法仍可能遗漏 CWE/CAPEC 锚点之外的模式。
    • 静态分析覆盖(第 7 节 Internal Validity):AST 凭据流分析仅覆盖 Python 与 JavaScript 的过程内层面;其他语言(如 Bash、Ruby)退化为关键词匹配,且不跟踪跨变量传播。
    • 动态分析覆盖(第 7 节 Internal Validity):LLM 非确定性与休眠逻辑可能使沙箱无法触达每条条件路径;每条件 3 轮的双条件测试只能缩小、不能消除这一缺口。
    • 外部效度(第 7 节 External Validity):全部数据来自 SkillsMP 单一平台,其他平台(如 ClawHub、Skills.sh)的流行度可能不同;作者同时认为所报告的漏洞源于 agent 框架设计而非单一市场。
    • 开放问题(第 8 节 Conclusion):作者指出两个开放问题——stdout 进入上下文前的凭据编辑(credential redaction),以及联合分析自然语言与代码的自动化检测。

    实验覆盖范围

    • 数据来源为 SkillsMP 单平台 170,226 个 skills 的 10% 采样(17,022 个),快照日期为 2026 年 2 月 12 日(第 3.1 节)。
    • 动态验证的运行时为默认设置的 Claude Code agent 实例,容器限 2 GB 内存、120 秒超时,每条件执行 3 轮(第 3.3 节)。
    • 对抗条件仅测试经 skill 消费的外部内容嵌入的间接提示注入;作者明确未用直接强制外泄的操作者提示词覆盖 skill(第 3.3 节)。
    • 人工分类规模为 1,427 个 skills、三名评审者,两两平均 κ = 0.88;论文未报告评审者与外部标注的一致性。
    • 论文未报告静态过滤与动态验证各阶段的耗时或计算成本。
  6. 总结一下论文的主要内容

    对 17,022 个 agent skills 的四阶段实证研究:520 个泄露凭据,76.3% 需跨模态分析,89.6% 可利用,披露后已修复。

    一篇针对 LLM agent skills 凭据泄露的大规模实证研究(ASE '26),作者称其为该方向首个系统性研究。

    • 问题:skills 是 NL 描述加可执行代码的混合产物,在本地以宿主进程完整权限运行;凭据如何经这一生态泄露此前未被系统研究。
    • 方法:从 SkillsMP 的 170,226 个 skills 中采样 17,022 个,依次做关键词与 AST 静态过滤(3,156 候选)、注入 mock 凭据的 Claude Code 沙箱双条件动态测试(1,427 标记)、三人人工分类(κ = 0.88),归纳出 4 种疏忽模式加 6 种恶意模式的分类法。
    • 流行度:520 个 skills(3.1%)含 1,708 个安全问题;84.0% 源于开发者疏忽,16.0% 为蓄意恶意。
    • 跨模态性:76.3% 的案例需联合分析 NL 与 PL 才能发现,3.1% 经纯自然语言提示注入利用;作者称现有静态分析器不处理这一特性。
    • 主导渠道:调试日志(print/console.log)占漏洞问题的 73.5%,作者称原因是 agent 框架把 stdout 注入 LLM 上下文;72% 的硬编码案例带 AI 辅助开发签名。
    • 可利用性与持续性:89.6%(466/520)在常规执行中可利用、无需提升权限,92.5% 集中在 execute 阶段;上游删除的凭据仍在 50+ 个 fork 中活跃。披露后 83 个恶意 skills 全部下架,91.6% 硬编码案例被修复。作者指出两个开放问题:stdout 管道的凭据编辑与跨模态自动检测。
阅读原文ASE 2026