Back to skill

Security audit

article-bookmarker

Security checks for vulnerabilities and agentic risk

Overview

This bookmarking skill is mostly coherent, but it can commit and push every Markdown file in the chosen folder to GitHub, which may expose unrelated notes.

Install only if you will use a dedicated bookmark directory or private dedicated repository. Do not point ARTICLE_BOOKMARK_DIR at an existing project, notes vault, home directory, or repository containing unrelated Markdown files. Before enabling ARTICLE_BOOKMARK_GITHUB, verify the destination repository, visibility, and exact files that will be committed and pushed.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/bookmark.sh:257
Finding

Broad Markdown Staging Can Upload Unrelated Sensitive Files

Content
View full analysis
/dev/null || true) ]]; then log_info "No changes to commit" return 0 fi log_info "Staging markdown files..." git add *.md # Also add .gitignore if exist if [[ -f ".gitignore" ]]; then git add .gitignore fi ``` The staged files are subsequently pushed to the configured GitHub repository: ```bash # Push to remote log_info "Pushing to remote: $GITHUB_REPO_PATH" # Set upstream on first push if ! git rev-parse --abbrev-ref --symbolic-full-name @{u} &>/dev/null; then git push -u origin "$branch" else git push origin "$branch" fi log_info "Push complete!" ``` ### Technical Analysis The script accepts any path supplied through `ARTICLE_BOOKMARK_DIR`, changes into that directory, and stages every root-level Markdown file using `git add *.md`. It does not verify that the directory is exclusively managed by the Skill, nor does it maintain a manifest of bookmark files created by the Skill. Consequently, if the configured directory is an existing project, notes directory, or Git repository, unrelated Markdown files are included in the commit. When `ARTICLE_BOOKMARK_GITHUB` is configured, the commit is pushed to GitHub. Remote synchronization is part of the declared functionality, so the network operation itself is legitimate. However, staging every Markdown file exceeds the minimum file-access scope necessary to save a newly created or modified bookmark. The script creates missing repositories as private, but it does not verify the visibility of an existing repository before uploading content. ### Attack Path 1. A user or untrusted configuration sets `ARTICLE_BOOKMARK_DIR` to an existing Git repository or directory containi ...[truncated 1443 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill’s declared purpose is simple article bookmarking, but the instructions add repository initialization, GitHub synchronization, and possible remote repository management via gh/git. That expands the trust boundary from local note storage to authenticated remote operations, which can cause unintended data exfiltration or repository changes if users invoke the skill expecting only local bookmarking.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The activation guidance is broad enough that the skill may trigger on generic article-collection requests without clearly signaling that it will fetch remote content, write files, and perform git/GitHub operations. Over-broad routing increases the chance of accidental execution of higher-risk side effects in situations where the user did not intend persistent storage or remote synchronization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill instructs the agent to fetch external URLs and, on failure, retry using proxy configuration from environment variables, but it does not require notifying the user that content may be transmitted through a proxy or other network infrastructure. This reduces informed consent and can expose sensitive browsing targets, article contents, or metadata to intermediary systems the user did not expect to be used.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill is described as saving and organizing article bookmarks, but the documented helper script also initializes git repositories, configures remotes, fetches, pulls, and synchronizes with GitHub. Expanding a bookmarking skill into repository and network-synchronization behavior increases the attack surface and can expose bookmark contents or enable unintended remote state changes, especially when driven by environment variables.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Automatically creating GitHub repositories and pushing bookmark content to a remote service is risky because bookmarked articles, summaries, tags, or notes may contain sensitive reading history or private annotations. In the context of a bookmarking skill, silent or poorly justified exfiltration to GitHub is more dangerous because users would reasonably expect local organization, not automatic publication or remote persistence.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The examples instruct the agent to fetch arbitrary URLs and store full extracted article content locally, but they omit safeguards around sensitive content, copyrighted material, and unbounded local retention. In a bookmarking skill, this can lead to collecting private or legally restricted content into local files without user awareness, especially if users provide internal, authenticated, or otherwise sensitive links.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Reading and using authenticated GitHub CLI state is not an obvious requirement for a skill whose purpose is bookmarking and organizing articles. Combined with later repository creation and push logic, this gives the skill account-level remote resource management capabilities unrelated to the manifest's narrowly stated user intent.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes a skill for saving and organizing web articles as bookmarks with summaries and tags. This script additionally provisions GitHub repositories, initializes git state, commits local files, and pushes content remotely, which is broader than simple bookmark management and introduces repository-management behavior not disclosed in the manifest.

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 · scripts/bookmark.sh (reported line 333)May include surrounding context.

sh
Commands:
    init            Initialize bookmark directory
                    - Create ARTICLE_BOOKMARK_DIR if not exists
                    - Initialize git repository if not exists
                    - Pull from ARTICLE_BOOKMARK_GITHUB remote if configured

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest describes a skill for saving and organizing articles with summaries and tags. Reading general proxy configuration from environment variables extends beyond that core purpose and introduces access to host configuration data that is not clearly necessary for a bookmarking skill, especially since network fetching itself is already an expected implementation detail.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The example bookmark format specifies timestamps as GMT+8, which imposes a specific locale/timezone convention in natural language without indicating user choice or a documented regional requirement. This can violate language/locale policy expectations when the skill is not clearly region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The documented user inputs and confirmation text are presented exclusively in Chinese, which can imply a language-specific interaction model. Because no opt-in, multilingual option, or justification is provided in the file, this may conflict with a policy requiring language choice rather than a forced locale.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.