Back to skill

Security audit

保险条款卡

Security checks for vulnerabilities and agentic risk

Overview

The insurance-summary workflow is coherent, but optional external PDF processing lacks clear controls for sharing private documents.

For private policies, use supplied text without optional Cue processing unless you authorize sharing. Before enabling parsing, confirm what will be sent, who receives it, and retention terms; the companion service's live behavior was not verified. Verify the credential destination and install only needed components from reviewed versions. The review concern is document-sharing control, with no artifact evidence of intentional theft or malicious persistence.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (18)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

所给代码执行的是 MCP 目录访问及带凭据的工具列表查询,没有读取保险条款、提取八项信息或生成带原文锚点的速读卡。虽然远程工具调用可能作为某些技能的实现细节,但此代码未体现它与保险条款处理之间的关系,实际展示的资源访问与功能均不在声明用途之内。代码使用密钥进行认证,但仅凭该片段不能认定存在密钥窃取或恶意外传。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

所给代码的主要功能是外部 MCP 服务发现与连接验证,没有读取保险条款、提取八项内容、生成原文锚点或标记待人工事项的逻辑。代码也未表明这些网络请求是保险条款处理的必要支撑,因此其主要用途与访问资源均与声明明显不符。代码仅发送工具列表请求,没有证据表明其执行了列出的工具或上传了保险文档。

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.en.md (reported line 27)May include surrounding context.

3. Install and run

bash
mkdir -p ~/.workbuddy/skills
cp -r insurance-terms-cn ~/.workbuddy/skills/
# ask the agent for the five-section card defined in SKILL.md, save it as my-insurance-card.md
python3 ~/.workbuddy/skills/insurance-terms-cn/scripts/check_insurance_card.py ./my-insurance-card.md

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 28)May include surrounding context.

bash
# 1. 放到技能目录
mkdir -p ~/.workbuddy/skills
cp -r insurance-terms-cn ~/.workbuddy/skills/

# 2. 让 agent 按 SKILL.md 的保险卡五段出卡,产物存成我的保险卡.md

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The installation command leaves both the npx installer version and the skill repository revision unpinned. A compromised or unexpected upstream release could execute code or install adversarial agent instructions with the user's permissions; this is a supply-chain weakness, not evidence of current malicious behavior.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The optional collection-install command executes an unpinned npx package and retrieves mutable upstream skill content. Compromise of either dependency could introduce executable code or persistent agent instructions, and the collection command has broader installation scope than a single-skill command.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

Selecting one skill reduces installation scope but does not pin the npx installer or the upstream repository revision. A compromised update could therefore run with local permissions or alter the agent's behavior, including behavior involving documents and service credentials.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

Authenticated tools/list discovery is legitimate, and the request body contains no policy document. However, the example sends a bearer credential to a catalog-derived URL without specifying HTTPS or an approved credential audience, so a compromised catalog or incorrect routing value could disclose the key to an unintended endpoint.

Content

Scanner excerpt · README.en.md (reported line 55)May include surrounding context.

2) take routing.url and transport for the domain from the response; never hard-code the host

3) with the key, send tools/list - proves that endpoint accepted the key, nothing else

curl -s -X POST "$ROUTING_URL" -H "Authorization: Bearer $CUE_API_KEY"
-H "Content-Type: application/json" -H "Accept: application/json, text/event-stream"
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -c 400

text

The attachment-parsing workflow lacks a warning about sharing policy documents with a third-party service.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The recovery workflow recommends attachment parsing through an external service without explaining the document-disclosure boundary or requiring approval. Public policy wording is usually low sensitivity, but personalized policy attachments can contain identity, financial, or health information; the local non-storage statement does not establish the external service's retention behavior.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The command installs the skill through an unversioned npx installer and a mutable repository reference. Although its stated scope is one package, a compromised upstream version could execute code or install malicious agent instructions with local user privileges.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The collection installation uses an unpinned executable installer and mutable upstream content. Interactive selection limits which skills are installed but does not protect against a compromised installer or changed skill instructions.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The single-skill command narrows scope but still resolves an unpinned npx package and mutable repository revision. Upstream compromise could introduce local code execution or agent instructions that misuse the documents and services available to the skill.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

The tools/list request is a normal authenticated connectivity check, not evidence of intentional exfiltration. Nevertheless, it attaches the API key to a dynamically supplied routing URL without documented scheme or destination validation, allowing malicious or erroneous routing metadata to redirect the credential.

Content

Scanner excerpt · README.md (reported line 59)May include surrounding context.

2) 域路由现值:从返回里取该域的 routing.url 与 transport,别把域名抄死

3) 带 key 实连后发 tools/list——只证该数据腿端点被接受,不证别的入口

curl -s -X POST "$ROUTING_URL" -H "Authorization: Bearer $CUE_API_KEY"
-H "Content-Type: application/json" -H "Accept: application/json, text/event-stream"
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -c 400

text

The attachment-parsing recovery step lacks a warning about sending document content to an external service.

Medium
Category
Output Handling
Confidence
89% confidence
Finding

The troubleshooting step recommends starting external attachment parsing without a privacy notice or explicit transmission approval. Generic policy text may be public, but user-supplied PDFs can contain personal, financial, or health data, making undisclosed external processing a meaningful confidentiality risk.

Content

No source excerpt is available for this finding.

The attachment-parsing workflow lacks a privacy warning about sending policy content to an external service.

Medium
Category
Output Handling
Confidence
93% confidence
Finding

The operational instructions route long attachments through an external parsing channel when needed, but do not require disclosure or approval of that transfer. The restriction to necessary attachments reduces exposure, yet personalized insurance PDFs can still disclose sensitive identity, financial, or health information; treating parsed text as data addresses injection, not privacy.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: file_read, file_write.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

The attachment-parsing workflow lacks a privacy warning about sending document content to an external service.

Medium
Category
Output Handling
Confidence
94% confidence
Finding

The workflow directs attachment and PDF parsing through an external service without requiring a privacy disclosure or informed approval before document content is transmitted. Although generic policy terms may be public, user-supplied insurance documents can contain identity, health, beneficiary, and financial information, making an unreviewed upload potentially serious; limiting when parsing starts does not establish permission to disclose that content.

Content

No source excerpt is available for this finding.

The self-test enumerates the shared temporary directory despite the CLI documentation stating that the script does not read directories.

Low
Category
Excessive Agency
Confidence
93% confidence
Finding

L197 explicitly documents “本件不读网络、不读目录,” but L185 calls root.iterdir() on the system temporary directory. This inspects directory entries beyond the temporary roots created by this invocation, although it does not read those entries' file contents.

Content

No source excerpt is available for this finding.