Back to skill

Security audit

一条链接→一条带出处的笔记

Security checks for vulnerabilities and agentic risk

Overview

This skill provides a controlled note-drafting workflow, but its checks cannot reliably guarantee exact quotations or complete disclosure of missing information.

Use local files for confidential material unless you approve the optional parser's data handling. Check quotations and missing-information statements yourself even after a passing result. Choose a new output filename to avoid overwriting an existing note, and review or pin installer content. This assessment covers the bundled files, not future downloads or the separate parsing service.

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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (9)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

核心差异是交付物的完成程度:描述承诺带可回查要点的成品笔记,而代码明确只负责骨架,生成后仍需补写要点和有效来源锚。这是主要行为上的实质差异,不只是实现细节。本地读取、离线运行、引用摘录和来源登记与描述一致;URL 仅作登记也符合正文预先取回本地的约定。所提供代码未包含或调用 check_note.py,但仅凭这一代码片段不能断定整个技能没有该检查器。未见网络访问、外传或其他无关能力。

Content

No source excerpt is available for this finding.

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 74)May include surrounding context.

md
bash scripts/fixtures/run_fixtures.sh # 离线三档一次跑完,末行自报档数与不合枚数

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

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The installation command executes an unpinned npm CLI through npx and installs skill content from an unpinned repository reference. Although this is an installer rather than an MCP server declaration, mutable dependencies create a supply-chain exposure if a later release or repository revision is compromised; the offline checker does not protect the installation step.

Content

No source excerpt is available for this finding.

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

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The documented npx command runs an unpinned npm CLI and retrieves skill content without an immutable repository revision. The finding mislabels this as an MCP server reference, but the underlying supply-chain risk remains: compromised future content could execute locally or introduce malicious agent instructions.

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 default URL workflow uses an external parsing service without warning that user-provided URLs are shared with that service.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The default URL route delegates parsing to an external service without explicitly warning that the supplied URL is disclosed to that provider. URLs may contain signed access tokens, private document identifiers, or sensitive query parameters; asking about usage costs does not establish informed consent to that disclosure.

Content

No source excerpt is available for this finding.

The promised verbatim quotation check ignores all whitespace differences.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

The checker removes all whitespace from both the quote and source before comparison, so it can certify altered wording as verbatim. Whitespace can change token boundaries, numbers, or code meaning, making this an integrity bypass of a central provenance guarantee rather than merely a cosmetic normalization.

Content

No source excerpt is available for this finding.

The documented per-gap coverage check accepts any unrelated gap declaration.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

The coverage predicate accepts any section-three bullet containing a gap keyword as evidence for every gap mentioned elsewhere. Consequently, one unrelated or generic declaration can hide omitted limitations while the checker reports success, undermining the skill's advertised per-gap provenance check.

Content

No source excerpt is available for this finding.

Tainted flow: 'body' from pathlib.Path.read_text (line 129, file read) → pathlib.Path.write_text (file write)

Medium
Category
Data Flow
Confidence
65% confidence
Finding

Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Content

Scanner excerpt · scripts/make_note.py (reported line 135)May include surrounding context.

python
p = Path(a.out)
        try:
            p.parent.mkdir(parents=True, exist_ok=True)
            p.write_text(body, encoding='utf-8')
        except OSError as e:
            print('取值域故障:写不到 %s(%s)' % (p, e.strerror or '原因未取到'))
            return 3