Back to skill

Security audit

Intent Guardian

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent productivity purpose, but it continuously records sensitive desktop context while some documented privacy controls are not enforced.

Review before installing. Use this only if you are comfortable with continuous local logging of active apps and window titles. Do not enable screenshot capture unless you understand that raw screen images are emitted for analysis. Configure and independently verify exclusions, working hours, file permissions, retention, and installer provenance before relying on the privacy claims.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/log_reminder_response.sh:11
Finding

Python Source Injection Through Unsafely Interpolated Shell Values

Content
View full analysis
[correction]}" RESPONSE="${2:?Usage: log_reminder_response.sh [correction]}" CORRECTION="${3:-}" TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") python3 -c " import json entry = { 'ts': '$TIMESTAMP', 'task_id': '$TASK_ID', 'response': '$RESPONSE', 'correction': '$CORRECTION' if '$CORRECTION' else None } print(json.dumps(entry, ensure_ascii=True)) " >> "$FEEDBACK_FILE" ``` The same vulnerable construction is used for date and path values elsewhere: ```bash python3 -c " import json, sys from collections import Counter, defaultdict from datetime import datetime target = '$TARGET_DATE' activities = [] with open('$LOG_FILE') as f: ``` ```bash python3 -c " import json, sys cutoff = '$CUTOFF_DATE' kept = 0 with open('$LOG_FILE') as f: lines = f.readlines() with open('$LOG_FILE', 'w') as f: ``` ### Technical Analysis Shell arguments and environment-derived paths are inserted directly into source code passed to `python3 -c`. Shell quoting around the outer command does not make these values safe inside Python string literals. An attacker who can influence `TASK_ID`, `RESPONSE`, `CORRECTION`, `TARGET_DATE`, or `INTENT_GUARDIAN_DATA_DIR` can include a quote followed by Python syntax. This can terminate the intended literal and inject additional Python expressions or statements. Because the resulting text is executed as Python source, successful exploitation provides arbitrary code execution rather than merely malformed JSON. The response type is documented as a fixed enumeration but is not validated. Path and date inputs are likewis ...[truncated 1004 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/sense_activity.sh:28
Finding

Documented Privacy Controls Are Not Enforced by the Activity Sensor

Content
View full analysis
> "$LOG_FILE" echo "$ENTRY" fi sleep "$POLL_INTERVAL" done ``` ### Technical Analysis The configuration advertises `excluded_apps`, `working_hours_start`, and `working_hours_end`, but `sense_activity.sh` neither reads nor enforces those settings. Once started, the infinite loop records every observable foreground application and window title at the configured polling interval. ...[truncated 1068 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:219
Finding

Unpinned Third-Party Package Is Downloaded and Executed During Installation

Content
View full analysis
Remediation
View remediation
...`. - Publish and verify the expected package integrity digest. - Document the authoritative registry and package owner. - Prefer installation from a versioned, signed release artifact whose checksum users can verify. - Disable or avoid dependency lifecycle scripts where they are unnecessary. - Maintain a lockfile for development and automated validation. - Re-audit the installer whenever the pinned version changes. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/sense_activity.sh:5
Finding

Sensitive Activity Records Are Created Without Restrictive File Permissions

Content
View full analysis
> "$LOG_FILE" ``` The ActivityWatch and feedback paths use the same pattern: ```bash mkdir -p "$LOG_DIR" ... " | tee -a "$LOG_FILE" ``` ```bash mkdir -p "$LOG_DIR" ... " >> "$FEEDBACK_FILE" ``` ### Technical Analysis The scripts persist window titles, application identifiers, behavioral history, and user correction text in plaintext. Directory and file creation rely entirely on the invoking process’s ambient `umask`. No `umask 077`, `mkdir -m 700`, `install -m 600`, or post-creation permission verification is used. On systems with permissive defaults or pre-existing shared directories, local users or processes outside the intended trust boundary may be able to read these records. Existing files with unsafe ownership, permissions, or symbolic-link behavior are also not checked before appending. ### Attack Path 1. The skill runs with a permissive `umask`, or the configured data directory already has broad permissions. 2. The scripts create or append to plaintext activity and feedback files. 3. The resulting files remain readable by unintended local principals. 4. Another local user or process reads window titles, activity history, or reminder corrections. ### Impact Assessment Exposure is limited to principals that can reach the local filesystem path, but the data can reveal sensitive work contex ...[truncated 203 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/sense_activitywatch.sh:5
Finding

ActivityWatch URL Allows Unrestricted Outbound Requests and Untrusted Event Ingestion

Content
View full analysis
/dev/null || hostname) BUCKET="aw-watcher-window_$HOSTNAME" END=$(date -u +"%Y-%m-%dT%H:%M:%SZ") if [[ "$(uname)" == "Darwin" ]]; then START=$(date -u -v-${LOOKBACK_MINUTES}M +"%Y-%m-%dT%H:%M:%SZ") else START=$(date -u -d "$LOOKBACK_MINUTES minutes ago" +"%Y-%m-%dT%H:%M:%SZ") fi RESPONSE=$(curl -s "${AW_URL}/api/0/buckets/${BUCKET}/events?start=${START}&end=${END}&limit=50" 2>/dev/null) ``` ### Technical Analysis Although the documented integration is a local ActivityWatch service, `INTENT_GUARDIAN_AW_URL` can redirect the request to an arbitrary HTTP or HTTPS host. The script does not validate the scheme, hostname, resolved address, or port. A malicious or compromised configuration can therefore cause the Agent to make requests to unintended internal or external services. Responses are parsed as ActivityWatch events and appended to the persistent activity log. Event fields are subsequently intended for LLM analysis, so attacker-controlled application names and titles also cross into a model-processing boundary without an explicit instruction/data separation mechanism. The request is a fixed `GET` path and does not include credentials in this implementation, which limits severity. ### Attack Path 1. An attacker who can influence the skill environment or configuration sets `INTENT_GUARDIAN_AW_URL` to an attacker-controlled or internal endpoint. 2. The script issues a `curl` request to that endpoint. 3. The endpoint returns crafted JSON matching the expected ActivityWatch event format. 4. Craf ...[truncated 620 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (21)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README advertises desktop activity monitoring and optional screenshot analysis but does not prominently warn users that these features can capture sensitive information such as messages, credentials, documents, or regulated data visible on screen. In the context of an always-on desktop monitoring skill, this omission is especially dangerous because users may enable invasive collection without informed consent or understanding of privacy risks.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Optional full-screen capture and temporary writing of screenshots to /tmp are sensitive behaviors that can expose credentials, messages, documents, and other on-screen secrets. In a productivity skill, capturing raw screenshots without very explicit permission boundaries and secure handling substantially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill is described as an always-on companion that watches desktop activity, but the README does not clearly define activation boundaries, triggers, or situations where monitoring should be disabled. For a monitoring-oriented skill, ambiguous invocation language increases the chance of over-collection, unintended background use, or user misunderstanding about when sensitive observation occurs.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The README instructs users to run npx playbooks without pinning a specific version, which can cause execution of whatever package version is current at install time. That creates a supply-chain risk: a compromised or malicious upstream release could execute code on the user's system during installation or use.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares powerful tools (shell, filesystem) and describes writing multiple files under the memory directory, but it does not define any explicit permission or allowed-tool scope. This creates an overbroad execution surface where a desktop-monitoring skill can read or write more than users reasonably expect, especially given its continuous operation model.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The description does not prominently warn users that the skill may continuously monitor desktop activity and collect window titles, URLs, and document titles. Because those fields often contain confidential work, personal, and credential-adjacent information, insufficient upfront disclosure undermines informed consent and increases privacy harm.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Broad trigger phrases like 'what was I doing' or 'track my tasks' can cause accidental activation during ordinary conversation. For a monitoring-oriented skill, unintended activation is more dangerous than usual because it may initiate or encourage privacy-sensitive sensing without deliberate user intent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The setup instructions use npx playbooks add skill ... without pinning a specific version. That introduces supply-chain risk because future or compromised package versions could execute unexpected code during installation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The description explicitly says the skill 'continuously monitors your desktop activity' and builds a real-time task stack, but it does not define activation boundaries, consent flow, data scope, retention, or whether monitoring is limited to specific apps or sessions. For a productivity tool handling potentially sensitive desktop context, this ambiguity creates a real privacy and surveillance risk because users may not understand what is collected or when collection occurs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This guidance enables always-on collection and inference over recent window activity, task history, and behavioral patterns, including storage in local memory files, without any explicit user-facing privacy notice, consent step, or data-minimization boundary. Even if intended for productivity, continuous monitoring of app usage and inferred intent can expose sensitive personal or work information and normalize covert surveillance-like behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script continuously captures the active application, bundle ID, and window title and appends them to a persistent local log file without any notice, consent flow, retention limit, or access control. Window titles can contain sensitive information such as document names, messages, URLs, or meeting topics, so persistent background logging increases privacy and data-exposure risk if the device, account, or log directory is later accessed by another party or another component.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script collects recent desktop window activity from ActivityWatch and appends app names and window titles to a persistent local log. Window titles frequently contain sensitive information such as document names, URLs, email subjects, chat contents, or customer identifiers, so storing them without minimization, consent flow, retention controls, or access restrictions creates a real privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The comments state that screenshots are not persisted and that only semantic summaries should be stored, but the script emits the entire screenshot as base64 on stdout. That makes the raw screen contents directly available to downstream components, logs, pipelines, or remote services, creating a confidentiality risk far beyond a semantic summary and increasing the chance of inadvertent data retention or exfiltration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script silently captures the user's screen and serializes it as base64 without any user-facing warning, confirmation, or visibility into where that data will go. In an always-on desktop-monitoring skill, this is especially dangerous because screenshots can contain passwords, messages, financial data, source code, or other sensitive material, and the lack of an explicit consent boundary materially raises privacy and exfiltration risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The description states "Zero-dependency setup on macOS," which presents a platform-specific constraint in the skill's natural-language policy surface without any opt-in wording or justification. Because the rule covers language or locale-style policy constraints in natural language, this may be interpreted as forcing a specific environment choice on users.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.