Back to skill

Security audit

Local Bookmark Librarian

Security checks for vulnerabilities and agentic risk

Overview

The skill is advertised as a bookmark organizer, but its included script mainly scans arbitrary local directories and reports file names and headings.

Install only if you intentionally want a local directory-audit/reporting helper, not a real bookmark deduplication tool. Do not point it at your home directory, project roots, credential folders, or other sensitive locations; use a copied bookmark export or a tightly scoped folder and review any output before sharing it.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (1)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/run.py:27
Finding

Arbitrary Local Directory Reconnaissance Beyond the Declared Bookmark Scope

Content
View full analysis
= limit: break if path.is_file(): if path.suffix.lower() in {".md",".txt",".json",".yaml",".yml",".py",".js",".ts",".csv",".tsv",".sh"}: results.append(path) return results ``` The collected files are subsequently processed and disclosed in the generated report: ```python def directory_report(spec: dict, root: Path, limit: int) -> str: files = list_text_files(root, limit=limit) ext_counter = Counter(p.suffix.lower() or "" for p in files) headings = [] for p in files[: min(10, len(files))]: if p.suffix.lower() == ".md": text = read_text(p) for line in text.splitlines(): if line.startswith("#"): headings.append((p.name, line.strip())) if len(headings) >= 12: break ``` The input path is accepted directly from the caller without confinement to an approved workspace or bookmark export: ```python spec = load_spec() source = Path(args.input).expanduser() if source.exists(): report = build_report(spec, source, args.limit) ``` ### Technical Analysis The Skill is documented as a local bookmark deduplication and classification tool, but its configured `directory_audit` mode accepts any filesystem directory readable by the current process. `Path.rglob("*")` recursively traverses that directory and collects Markdown, text, configuration, source-code, tabular, and shell-script files. Most of these formats are unrelated to exported bookmarks. The impleme ...[truncated 2483 chars]
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

声明描述的是一个面向书签/链接清单整理的工具,核心能力应包括去重、分类、主题索引和维护建议。但实际代码并没有任何针对书签的专门解析、URL 去重、分类算法、主题聚类或索引生成逻辑。相反,它实现的是一个由 spec.json 驱动的通用报告框架,可扫描目录、读取 CSV、检测可疑文本模式,以及审计 Skill 目录完整性。这些能力与“书签整理”存在明显主用途偏差。虽然代码总体上是只读分析、不会修改浏览器配置或删除链接,符合声明中的非破坏性边界,但其主要行为和能力集合与声明不符,因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script implements broad directory inspection, CSV auditing, regex-based pattern scanning, and generic reporting modes that materially exceed the declared bookmark-librarian purpose. This kind of scope mismatch is dangerous because it enables collection and analysis of arbitrary local files, including code and sensitive documents, under a benign-seeming skill identity.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The pattern scanning logic searches arbitrary files for secrets, private URLs, and shell execution patterns, which is unrelated to bookmark deduplication and classification. In practice this gives the skill an undisclosed local code-and-secret auditing capability, increasing the chance of sensitive data discovery and exfiltration through generated reports.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger examples "整理我的书签并去重" and especially "按主题重建目录" are natural-language phrases that could overlap with ordinary organizational requests. The README provides examples but does not define precise trigger scope, required inputs, or negative examples clarifying when the skill should not activate.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises executable behavior via python3 and implies read/write use of local files, but it does not declare an explicit tool/permission scope. That creates an authorization and review gap: an orchestrator or reviewer cannot easily constrain the skill to the minimum required capabilities, increasing the chance of unintended file access or shell execution.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest description and main body present the skill primarily in Chinese while also mixing in English phrases, but nowhere indicate that the user can choose their preferred language. This can violate a language/locale policy when the skill effectively defaults to a language without opt-in or explicit justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire template, including the title and section headings, is written in Chinese and presents a fixed output format with no indication that users may choose another language. Under the policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code generates user-facing report content entirely in Chinese, including headings, summaries, and action prompts. Because the file provides no user opt-in, fallback, or documented region-specific justification, it violates the language/locale policy category for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The directory report path presents headings and review guidance in Chinese only, which forces a locale choice on users. The file does not expose a language option or explain that the skill is limited to a Chinese-language audience.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

These functions produce user-visible report sections in Chinese regardless of user preference. A fixed language choice without opt-in or explicit justified scope matches the policy-violation criteria for locale handling.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill_audit path inspects arbitrary skill/package structure, checks for expected files, and parses frontmatter metadata, which is unrelated to managing bookmark collections. This expands the tool into a generic package auditing utility and exposes unrelated repository contents and metadata to analysis and reporting.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script includes Chinese-only validation messages and audit section labels, affecting user-visible behavior across another execution path. No mechanism is present for users to choose their language, and no justified locale restriction is documented in this file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

标题及全文均以中文呈现,未说明这是面向特定中文用户群体的区域性技能,也未提供语言选择或用户选择加入的机制。根据规则,若技能在自然语言层面强制特定语言而无明确理由,属于语言/locale 策略违规。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

All visible natural-language instructions and examples are presented in Chinese, and the file does not state that the skill is China/Chinese-language specific or offer an alternate language option. This can be a language-policy concern if skills are expected not to force a locale without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The title, category label, summary, examples, and risk text are all written in Chinese, which effectively forces a specific language for users reading the skill metadata. The file does not indicate that the skill is region-specific or provide any user opt-in for language/locale.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.