Back to skill

Security audit

enterprise-skills-studio

Security checks across malware telemetry and agentic risk

Overview

The skill is a mostly coherent enterprise-skill toolkit, but its self-update and local file-writing powers are broader and less well supported than its safety claims suggest.

Review before installing in managed environments. Disable write-capable self-update with ESS_SELF_UPDATE=off unless an administrator approves the source, regenerate or fix SHA256SUMS before relying on checksum validation, avoid broad natural-language update triggers, and treat generated training/portal outputs as drafts that need human security review.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The generated FAQ asserts that data will not leave the company, but this script only templates training materials and performs no verification of network behavior, storage destinations, or deployment controls for the referenced skill. In an enterprise training context, this can mislead users and approvers into trusting a skill's data handling posture without evidence, creating governance and compliance risk.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The FAQ states that write operations use confirmation, least privilege, and audit controls by default, yet the generator has no mechanism to inspect whether the target skill actually implements those safeguards. This creates a security design integrity issue: users may rely on nonexistent controls and execute risky operations under false assumptions.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The script claims operations are idempotent and that key actions have rollback or point-of-no-return protections, but it cannot determine whether any given skill satisfies those operational safety properties. In enterprise training material, this can encourage unsafe reruns or overconfidence during incident handling, potentially worsening data corruption or irreversible changes.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The document says a user can trigger self-update with a casual phrase like “升级一下”, which is broad and easy to invoke unintentionally in normal conversation. Because the action chain can progress from a natural-language utterance into network retrieval and eventual self-modification, ambiguous activation raises the risk of accidental or socially engineered updates.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The invocation section lists multiple broad natural-language triggers for update behavior without strict activation boundaries. In an agent environment, this increases the chance that unrelated user text, quoted content, or prompt-injected instructions could cause the skill to enter an update workflow that touches the network and local files.

Unvalidated Output Injection

High
Category
Output Handling
Content
sys.stderr.write(f"[studio] 目录内无 SKILL.md: {skill}\n")
        return 2

    r1 = subprocess.run([sys.executable, review, skill], capture_output=True, text=True)
    cargs = [sys.executable, cross, "--skill", skill]
    if platform:
        cargs += ["--platform", platform]
Confidence
85% confidence
Finding
The code captures stdout/stderr from a child script operating on an attacker-controlled skill directory and then prints that output directly to the terminal. If the downstream script emits untrusted file content or attacker-crafted escape sequences, this can enable terminal control-sequence injection, log spoofing, or misleading operator output during a security gate step.

Unvalidated Output Injection

High
Category
Output Handling
Content
cargs = [sys.executable, cross, "--skill", skill]
    if platform:
        cargs += ["--platform", platform]
    r2 = subprocess.run(cargs, capture_output=True, text=True)

    review_block = (r1.returncode == 1)   # review 返回 1 = 存在 FAIL
    cross_block = (r2.returncode == 2)     # cross 返回 2 = BLOCK
Confidence
85% confidence
Finding
This subprocess processes attacker-influenced skill content and its captured output is later rendered verbatim in the parent CLI. In an enterprise review/gate workflow, malicious report content could manipulate terminal display, conceal failures, or poison logs, making this more dangerous because operators may rely on the gate output for release decisions.

Self-Modification

High
Category
Rogue Agent
Content
- **🟠 合并白名单(新增)**:自更新仅覆盖白名单路径(`SKILL.md`/`references/*`/`scripts/*`/`assets/*` 等),越界文件一律跳过。
- **🟠 触发收窄 + 确认警告(修复,置信度 93–97%)**:自更新默认**仅检查**,`--apply` 才写盘且确认提示明确警告"将覆盖本地技能文件";自然语言触发词从"升级一下"收敛为"检查/更新本技能"。
- **🟠 缺失警告(修复,置信度 81–97%)**:`portal.py` 生成后提示"产物含技能元数据,外发前请审查";`update_skill.py` 确认前提示将修改本地文件。
- **🟡 文案精修(低危)**:`framework.md` 模板增加"触发词须具体带边界、写操作须声明需确认";`SKILL.md` capabilities 补 `ESS_SELF_UPDATE`/`ESS_ALLOWED_REPOS` 治理说明;自更新描述与 README 示例同步收敛。
- **🟢 自我改造(设计内)**:5 条"自我修改"类发现确认属受控治理能力,并补充 SHA256SUMS + 白名单 + 禁用开关三重加固。
- **⚪ 误报澄清**:2 条"未验证输出注入"(studio.py 的 subprocess)经核查仅为打印子脚本输出,未 eval/未进 shell,非注入向量。
- **新增 `SECURITY.md`**:面向企业安全/合规评审,系统说明能力声明、自更新信任模型、合并白名单、企业可落地管控项(禁用开关/仓库白名单/审计日志)、发布侧校验流程,以及第三方扫描发现的处置对照。
Confidence
85% confidence
Finding
The changelog describes a built-in self-update capability that can overwrite local skill files, which is a real self-modification risk class even if governance controls exist. In this context the danger is reduced by explicit confirmation, path whitelisting, checksums, and repo allowlisting, but compromise of the trusted source or operator misuse could still alter the skill's behavior.

Self-Modification

High
Category
Rogue Agent
Content
- **供应链·未钉置依赖(修复)**:自更新器 `update_skill.py` 默认从易变的 `main` 分支拉取归档,改为**默认解析最新发布标签(经人工发布、不可变)**作为更新源;新增 `--ref` 可强制钉置到指定标签/提交。未发布 Release 时优雅回退 `main` 并告警,不报错。
- **MCP 最低特权·能力申报不足(修复)**:`SKILL.md` frontmatter 新增显式 `capabilities` 声明(网络 / 文件系统 / 执行 / 特权 / 自治 / 数据处理边界),明确"仅 HTTPS GET 下载、不发送本地数据、不访问凭据、不提权、写操作须用户显式触发"。
- **叛变特工·自我修改(声明)**:`references/self-update.md` 新增「安全审查说明」段,逐条说明自更新为何属受控受治理更新(用户显式触发、硬编码可信源、只复制不执行、路径穿越校验、可回滚),便于安全官审阅采信。
- **数据外流(澄清)**:明确自更新仅向固定仓库发 HTTPS GET 下载,不回传任何本地数据。
- 扫描器其余 11 类(过度能动 / 输出处理 / MCP 工具中毒 / 提示注入 / 特权升级 / 系统提示漏出 / 记忆中毒 / 工具滥用 / 行为 AST-exec-eval / 污染追踪 / YARA)经代码核查均**为误报**:全库无 `exec`/`eval`/动态导入、无 sudo/凭据访问、无隐藏指令或零宽字符,纯文档 + 标准库代码。
Confidence
84% confidence
Finding
This entry documents self-update behavior and trust assumptions around downloading and applying remote content. Even with a fixed repository, release pinning, and no credential access, any mechanism that fetches and replaces local skill files creates a meaningful supply-chain and self-modification attack surface if the source, release process, or configuration is abused.

Self-Modification

High
Category
Rogue Agent
Content
- 支持 `--dry-run`(只预览差异)、`--force`(跨版本也更新)、`--no-backup`、自定义 `--backup-dir`。
    - 信任边界:只从固定仓库 `jiwei1122/enterprise-skills-studio` 下载源码,仅覆盖技能自身目录,不改外部配置/凭据。
    - 企业内网可 `--repo` 指向私有可信源,实现私有化自更新。
  - 新增 `references/self-update.md`:自更新方法论、信任边界、关闭自动拉取的开关说明。
  - `scripts/studio.py` 接入 `update` 子命令(`studio update --check` / `studio update --apply`)。
- 新增 `.gitignore`:忽略 `__pycache__` 与更新备份目录。
Confidence
88% confidence
Finding
This changelog section describes a self-update command that can download remote code and apply it to the local skill directory. Although the documented trust boundary limits scope and avoids direct execution, enabling file replacement from a remote source remains a genuine self-modification and supply-chain risk if the source is tampered with or users are socially engineered into applying updates.

Self-Modification

High
Category
Rogue Agent
Content
- **可治理、可审计**:版本、弃用、审计、责任归属都有对应工具与文档支撑,符合企业对"可控 AI"的要求。
- **自包含、可移植的知识库**:技能本身即是方法论载体,新窗口、新团队拿来即用,不依赖某次对话的上下文。
- **安全语义层检测**:映射 OWASP AST10,覆盖编码绕过、敏感路径、裸 IP 外联、提权、未声明装包、声明-能力一致性、供应链投毒;并能识别"防御性提及"避免误报安全类技能。
- **自更新(检查 / 确认后升级)**:从钉置到不可变发布标签的可信仓库拉取、SHA256SUMS 校验、合并白名单、增量更新本技能自身,可备份回滚、git 仓库自动保护;企业可经 `ESS_SELF_UPDATE`/`ESS_ALLOWED_REPOS` 管控;内网可指向私有可信源。
- **技能安全审计(SkillSec 16 类)**:借鉴 NVIDIA SkillSpector 公开 16 类漏洞模式(自有开源实现),对任一技能(含本技能自身)做类 SkillSpector 式静态安全审计,输出「类别/严重度/置信度/证据/发现」报告,可作 CI 卡点。

---
Confidence
81% confidence
Finding
The skill advertises self-update capability that can modify its own files by fetching remote releases. Even though the README describes safeguards like immutable tags, checksums, allowlists, and confirmation, self-modification materially increases the attack surface: compromise of the trusted source, weak verification, or misconfiguration could lead to unauthorized code/content replacement in a privileged local skill environment.

Self-Modification

High
Category
Rogue Agent
Content
- **完整性**:归档内含 `SHA256SUMS` 时逐文件校验,不匹配即中止;合并仅接受白名单路径,越界文件跳过。
- **增量合并**:只覆盖/新增远程有的文件,保留你本地额外文件;`--backup` 可更新前快照,随时回滚。
- **安全**:只解包 + 复制,绝不执行远程代码;归档做路径穿越校验,且要求根目录含 `SKILL.md` 才认可;若技能目录本身是 git 仓库则默认保护不误覆盖。
- **企业管控**:设 `ESS_SELF_UPDATE=off` 可禁用写盘更新;设 `ESS_ALLOWED_REPOS="a/b"` 限定可拉取仓库。详见 `SECURITY.md`。
- 企业内网可 fork 到内部仓库,用 `--repo` 指向私有可信源(并加入白名单),实现私有化自更新。

---
Confidence
84% confidence
Finding
This section gives operational detail for applying self-updates, including remote repository selection and local file merge behavior. Although the documented controls reduce risk, the ability to write local skill contents from a remote source remains a high-impact primitive: if the allowed repository list, integrity checks, or confirmation flow are bypassed or misused, an attacker could persist malicious behavior through the update channel.

Self-Modification

High
Category
Rogue Agent
Content
| 自治(autonomy) | 所有写操作与自更新均须**用户显式触发**(`--apply` 默认交互确认,并明确警告将覆盖本地文件);不做自主决策。 |
| 数据处理(data_handling) | 不采集、不上传、不持久化用户业务数据;分析仅在本机文件内进行。 |

## 2. 自更新(Self-Update)的信任模型

自更新是设计内的受治理能力,采用多层防护:
Confidence
89% confidence
Finding
The file documents an intentional self-update capability that can overwrite local skill files. Even with stated safeguards like confirmations, fixed repositories, and checksum validation, self-modification materially expands the attack surface because compromise of the trusted source, release process, checksum file, or user approval flow can still lead to unauthorized code/content replacement.

Self-Modification

High
Category
Rogue Agent
Content
| 管控项 | 机制 | 作用 |
|---|---|---|
| **禁用自更新** | 环境变量 `ESS_SELF_UPDATE=off` | 彻底关闭写盘更新(检查仍可用),适合强管控环境。 |
| **限定可拉取仓库** | 环境变量 `ESS_ALLOWED_REPOS="a/b,c/d"`(逗号分隔) | 仅允许从这些仓库拉取;未设置则仅允许默认仓库 `jiwei1122/enterprise-skills-studio`。私有化部署时把 `--repo` 指向内部可信源并写入白名单。 |
| **审计日志** | 自更新运行会向 stderr 输出动作摘要(下载引用、变更文件数、是否校验通过) | 可重定向到企业日志采集;建议结合 release 流水线统一审计。 |
Confidence
84% confidence
Finding
This section shows the skill can be configured to permit pulling updates from repositories, including non-default sources via allowlists. That means the security model depends heavily on environment configuration; if allowlists are broadened, misconfigured, or attacker-controlled, the self-update path becomes a supply-chain ingress for modifying the skill's local contents.

Self-Modification

High
Category
Rogue Agent
Content
filesystem: "读取/写入严格限制在本技能自身目录;绝不访问 ~/.ssh、.env 或任何凭据文件"
  execution: "仅运行本技能自带的标准库 Python 脚本;自更新仅复制文件,绝不执行远程下载的代码"
  privilege: "不使用 sudo/root,不提权,不读取环境变量或系统凭据"
  autonomy: "所有写操作与自更新均须用户显式触发(--apply 默认交互确认,并明确警告将覆盖本地文件);不做自主决策;企业可设 ESS_SELF_UPDATE=off 禁用写盘更新、ESS_ALLOWED_REPOS 限定可拉取仓库"
  data_handling: "不采集、不上传、不持久化用户业务数据;分析仅在本机文件内进行"
---
Confidence
90% confidence
Finding
The skill advertises a self-update capability that writes to its own directory. Even with stated safeguards like fixed source, HTTPS GET, integrity checks, confirmation gates, and no remote execution, self-modifying behavior expands the attack surface through supply-chain compromise, verifier mistakes, rollback abuse, or incorrect merge logic.

Self-Modification

High
Category
Rogue Agent
Content
20. **成本/计量追踪** — 半自动 usage 日志采集 token/调用/成本,外推月用量直接喂给 ROI 判定,给 sponsor 算账(`scripts/usage_tracker.py` + `references/roi.md` 闭环)
21. **技能门户生成器** — 技能库 → 门户目录/README/HTML,提升可发现性与治理可视化,可结合 lifecycle 注册表标注状态(`scripts/portal.py`)
22. **发布前卡点(gate)** — 一键同时跑【安全体检 + 移植体检】,任一 BLOCK 即整体 BLOCK,发布/移植前必过(`scripts/studio.py gate --skill <dir> [--platform codex]`)
23. **自更新(Self-Update)** — 说"检查/更新本技能"即检查并(确认后)应用自身最新版本:从钉置到不可变发布标签的可信仓库拉取归档、SHA256SUMS 完整性校验、合并白名单、可备份回滚、git 仓库自动保护、非默认仓库强制确认(`scripts/update_skill.py` + `references/self-update.md`,默认 `studio update` 仅检查,需 `--apply` 并经确认才写盘)
24. **技能安全审计(SkillSec 16 类)** — 对任一技能(含本技能自身)做类 NVIDIA SkillSpector 式静态安全审计:覆盖过度能动/输出处理/叛变特工/触发滥用/MCP 最低特权/MCP 工具中毒/提示注入/数据外流/特权升级/供应链/系统提示漏出/记忆中毒/工具滥用/危险 AST/污染追踪/YARA 签名 16 类,输出「类别/严重度/置信度/证据/发现」报告,可作 CI 卡点(`scripts/skillsec_audit.py` + `references/skill-spector-method.md`,`studio audit <skill> [--json|--md]`;方法论借鉴 SkillSpector 公开分类,本实现为自有开源代码)

> 增强项(扩展既有模式):成熟度模型新增 **Agentic 维度**(模式 8 / `scripts/maturity_assess.py`,向后兼容);审查器新增 **AI 安全维度** PII/凭据/外部输入校验(模式 5 / `scripts/review_checklist.py`);审查器再新增 **安全语义层维度**(模式 5 / `scripts/review_checklist.py`,借鉴腾讯朱雀 `skill-scanner` 的编码绕过/零宽走私检测 + `skill-vetter` 的敏感路径/裸IP/提权/未声明装包/声明-能力一致性红标清单);新增 **技能安全审计能力**(模式 24 / `scripts/skillsec_audit.py`,方法论借鉴 NVIDIA SkillSpector 公开 16 类漏洞模式,自有开源实现,与 `review` 体检互补)。
Confidence
91% confidence
Finding
This duplicate finding points to the same self-update mechanism and therefore the same underlying risk: the skill is capable of modifying its own installed files based on remotely retrieved content. The surrounding safeguards reduce severity, but self-modification remains security-relevant because it can be abused via compromised upstream artifacts, flawed checksum handling, or user-social-engineering into applying an unsafe update.

Self-Modification

High
Category
Rogue Agent
Content
20. **成本/计量追踪** — 半自动 usage 日志采集 token/调用/成本,外推月用量直接喂给 ROI 判定,给 sponsor 算账(`scripts/usage_tracker.py` + `references/roi.md` 闭环)
21. **技能门户生成器** — 技能库 → 门户目录/README/HTML,提升可发现性与治理可视化,可结合 lifecycle 注册表标注状态(`scripts/portal.py`)
22. **发布前卡点(gate)** — 一键同时跑【安全体检 + 移植体检】,任一 BLOCK 即整体 BLOCK,发布/移植前必过(`scripts/studio.py gate --skill <dir> [--platform codex]`)
23. **自更新(Self-Update)** — 说"检查/更新本技能"即检查并(确认后)应用自身最新版本:从钉置到不可变发布标签的可信仓库拉取归档、SHA256SUMS 完整性校验、合并白名单、可备份回滚、git 仓库自动保护、非默认仓库强制确认(`scripts/update_skill.py` + `references/self-update.md`,默认 `studio update` 仅检查,需 `--apply` 并经确认才写盘)
24. **技能安全审计(SkillSec 16 类)** — 对任一技能(含本技能自身)做类 NVIDIA SkillSpector 式静态安全审计:覆盖过度能动/输出处理/叛变特工/触发滥用/MCP 最低特权/MCP 工具中毒/提示注入/数据外流/特权升级/供应链/系统提示漏出/记忆中毒/工具滥用/危险 AST/污染追踪/YARA 签名 16 类,输出「类别/严重度/置信度/证据/发现」报告,可作 CI 卡点(`scripts/skillsec_audit.py` + `references/skill-spector-method.md`,`studio audit <skill> [--json|--md]`;方法论借鉴 SkillSpector 公开分类,本实现为自有开源代码)

> 增强项(扩展既有模式):成熟度模型新增 **Agentic 维度**(模式 8 / `scripts/maturity_assess.py`,向后兼容);审查器新增 **AI 安全维度** PII/凭据/外部输入校验(模式 5 / `scripts/review_checklist.py`);审查器再新增 **安全语义层维度**(模式 5 / `scripts/review_checklist.py`,借鉴腾讯朱雀 `skill-scanner` 的编码绕过/零宽走私检测 + `skill-vetter` 的敏感路径/裸IP/提权/未声明装包/声明-能力一致性红标清单);新增 **技能安全审计能力**(模式 24 / `scripts/skillsec_audit.py`,方法论借鉴 NVIDIA SkillSpector 公开 16 类漏洞模式,自有开源实现,与 `review` 体检互补)。
Confidence
91% confidence
Finding
This duplicate finding points to the same self-update mechanism and therefore the same underlying risk: the skill is capable of modifying its own installed files based on remotely retrieved content. The surrounding safeguards reduce severity, but self-modification remains security-relevant because it can be abused via compromised upstream artifacts, flawed checksum handling, or user-social-engineering into applying an unsafe update.

Self-Modification

High
Category
Rogue Agent
Content
# 自更新(Self-Update)方法论

> 对应能力模式 23。让"企业技能工程台"技能在用户说一句"升级一下"时,自动检查并应用自身的最新版本。
Confidence
88% confidence
Finding
This file explicitly describes a self-update capability that modifies the skill’s own files after pulling remote content. Even with stated safeguards, self-modification is intrinsically high risk because compromise of the trusted source, release process, confirmation handling, or parser logic could turn the feature into a supply-chain or persistence mechanism.

Self-Modification

High
Category
Rogue Agent
Content
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
update_skill.py - 企业技能工程台 自更新器(Self-Updater)

从可信 GitHub 仓库拉取最新发布版本,增量更新本技能的本地安装副本。
纯标准库实现(urllib / tarfile / shutil),零外部依赖。
Confidence
86% confidence
Finding
This file implements self-update behavior that downloads an archive from a remote repository and overwrites local skill files. Even with several safeguards, self-modifying update mechanisms materially expand the attack surface: compromise of the trusted GitHub account/release pipeline, misuse of --repo/--ref/--force, or weak integrity guarantees can lead to malicious code/configuration being written into the local skill installation.

Self-Modification

High
Category
Rogue Agent
Content
- git 保护:若技能目录本身是 git 仓库,默认中止以免覆盖工作区(--force 可强制)
  - 完整性:归档内含 SHA256SUMS 时逐文件校验,不匹配即中止(防篡改)
  - 白名单:仅白名单路径(SKILL.md/references/*/scripts/*/assets/*等)被覆盖,越界文件跳过
  - 企业管控:环境变量 ESS_SELF_UPDATE=off 可禁用写盘更新;ESS_ALLOWED_REPOS 限定可拉取仓库

用法:
  python update_skill.py --check                 # 仅检查(默认动作;退出码 0=最新 1=有更新 2=错误)
Confidence
84% confidence
Finding
The documented design confirms the tool can overwrite files under the skill directory during update, which is a self-modification capability with security consequences. In an enterprise skill context, this is more dangerous because the tool is explicitly intended for cross-platform deployment and governance, so a poisoned update could propagate altered scripts or prompts broadly across agents and users.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: malicious.crypto_mining, suspicious.dynamic_code_execution, suspicious.prompt_injection_instructions

Possible crypto mining behavior detected.

Critical
Code
malicious.crypto_mining
Location
scripts/skillsec_audit.py:221

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/skillsec_audit.py:457

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
references/skill-spector-method.md:23