Back to skill

Security audit

Deepfocus

Security checks for vulnerabilities and agentic risk

Overview

This skill is a local productivity logger presented partly as a Pomodoro timer, and it stores free-form user entries on disk.

Review before installing. This does not show network exfiltration or destructive behavior, but it is not really a Pomodoro timer: it records notes, tasks, reminders, reviews, and exports locally. Avoid storing secrets or sensitive work details unless your local account and file permissions are appropriate, and consider adding owner-only permissions and a purge workflow.

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/script.sh:6
Finding

Productivity Data Stored Without Restrictive File Permissions

Content
View full analysis

Vulnerability Details

File Location: scripts/script.sh, lines 6-7; representative data writes at lines 128-135, repeated across other data commands
Vulnerability Type: Plaintext sensitive data stored with permissions inherited from the caller's umask
Risk Level: Medium

bash
DATA_DIR="${HOME}/.local/share/deepfocus"
mkdir -p "$DATA_DIR"

_log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; }

Representative entry storage:

bash
else
    local input="$*"
    local ts=$(date '+%Y-%m-%d %H:%M')
    echo "$ts|$input" >> "$DATA_DIR/add.log"
    local total=$(wc -l < "$DATA_DIR/add.log")
    echo "  [Deepfocus] add: $input"
    echo "  Saved. Total add entries: $total"
    _log "add" "$input"
fi

Technical Analysis

The application stores tasks, plans, notes, reminders, reviews, history records, and exports as plaintext under ~/.local/share/deepfocus. It creates the directory with mkdir -p and creates files through ordinary shell redirection without first establishing a restrictive umask or explicitly setting permissions.

Consequently, the resulting permissions depend on the invoking process's environment. With a common 022 umask, the directory can be created as 0755 and log or export files as 0644. On a multi-user system, these permissions can allow other local accounts to traverse the data directory and read productivity records.

The same behavior affects history.log, command-specific .log files, and generated JSON, CSV, or text exports. No encryption or other confidentiality control compensates for permissive filesystem permissions.

Attack Path

  1. A victim runs a data command such as deepfocus add, deepfocus remind, or deepfocus review.
  2. The script creates ~/.local/share/deepfocus and its files using permissions derived from the victim's current umask.
  3. Under a permissive umask such as 022, the stored files may ...[truncated 633 chars]
Remediation
View remediation

Remediation Suggestions

  1. Set a restrictive process umask before creating the data directory or any files:

    bash
    umask 077
    
  2. Create and enforce owner-only directory permissions:

    bash
    mkdir -p -m 700 "$DATA_DIR"
    chmod 700 "$DATA_DIR"
    
  3. Restrict existing and newly generated logs and exports to the owner:

    bash
    find "$DATA_DIR" -type f -exec chmod 600 {} +
    
  4. Create export files atomically with owner-only permissions rather than relying solely on inherited defaults.

  5. Document that entries are stored locally in plaintext and advise users not to record secrets unless appropriate host-level protections, such as full-disk encryption, are enabled.

Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The manifest and description present this as a Pomodoro timer skill, but the documented behavior is a broader local productivity and note-management tool with search, export, archive, and reporting capabilities. This mismatch can cause users or orchestrators to invoke the skill under false assumptions, granting broader data-handling functionality than expected and undermining trust and policy-based routing.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest promises Pomodoro sessions and break timers, but the skill documentation describes only a general-purpose logging CLI. In agent ecosystems, this semantic mismatch is security-relevant because tool-selection and user consent depend on accurate capability descriptions; a mislabeled skill may be invoked in contexts where broader data collection or retention was not intended.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest describes a Pomodoro/focus-session tool, but the implementation exposes a broad journaling CLI with no timer or break-session behavior. This is dangerous because users and higher-level agents may grant access or supply sensitive productivity data under false assumptions about the skill’s purpose, creating a capability mismatch and trust-boundary violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The core commands simply persist arbitrary user input into per-command log files instead of performing the promised focus-session operations. In an agent setting, this can cause sensitive free-form text to be collected and retained unexpectedly, while misleading users into thinking the tool is only tracking timer state or productivity sessions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The top-level documentation describes a broad productivity toolkit, directly contradicting the Pomodoro-focused manifest intent. While not code execution by itself, this inconsistency weakens security reviewability and may bypass user expectations or policy controls that rely on declared purpose.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill exposes a wide set of task, note, reminder, archive, tagging, timeline, report, and export functions that exceed the stated Pomodoro-focused purpose. Broader-than-declared capability increases the chance of over-collection of user data and accidental invocation for sensitive content, especially because entries are persisted locally and can later be searched or exported.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script creates a persistent data directory and writes user-provided content into local log files without any privacy notice, retention policy, or consent mechanism. In this skill context, users may enter plans, reviews, reports, and other sensitive personal information, so silent retention materially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill advertises a narrow productivity timer use case but includes a much broader set of organization and reporting capabilities. This increases danger in context because overbroad commands can be used to collect, classify, and retain user content beyond what is reasonably expected from a Pomodoro tool.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest description says to use the skill for 'starting focus sessions, tracking streaks, reviewing productivity,' which is a broad natural-language invocation description rather than a narrowly scoped trigger. In assistant routing contexts, phrases like 'reviewing productivity' or 'tracking streaks' can overlap with ordinary conversation and may cause unintended invocation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.