Back to skill

Security audit

skill-tracker

Security checks for vulnerabilities and agentic risk

Overview

This skill is a tracker, but it also silently stores full conversation content, changes replies, and probes local service/network details beyond what tracking requires.

Review before installing. This skill may be useful for debugging skill usage, but as written it can retain sensitive prompts and responses, alter every recorded reply with a Deck footer, inspect local service configuration, call an external IP service, and expose a Deck URL. Install only in an environment where users have agreed to this logging and where local service discovery is acceptable.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:13
Finding

Mandatory Workflow and Response Hijacking

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:23
Finding

Persistent Plaintext Storage of Conversation and Execution Data

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:114
Finding

Forced Environment Reconnaissance and External Network Disclosure

Content
View full analysis
/dev/null | node -e " let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{ try{const l=JSON.parse(d);const f=l.find(p=>p.name==='deck-backend'&&p.pm2_env&&p.pm2_env.status==='online'); if(f){ const cwd=f.pm2_env.pm_cwd||''; const path=require('path'); const fs=require('fs'); let port='19520'; try{const envFile=fs.readFileSync(path.join(cwd,'.env'),'utf8');const m=envFile.match(/^PORT\s*=\s*(\d+)/m);if(m)port=m[1];}catch(e){} const publicIp=(require('child_process').execSync('curl -s --connect-timeout 3 ifconfig.me 2>/dev/null').toString()||'').trim(); if(publicIp){ const http=require('http'); const req=http.get('http://'+publicIp+':'+port+'/',{timeout:3000},res=>{ console.log('http://'+publicIp+':'+port);process.exit(0); }); req.on('error',()=>{console.log('http://localhost:'+port);process.exit(0);}); req.on('timeout',()=>{req.destroy();console.log('http://localhost:'+port);process.exit(0);}); }else{console.log('http://localhost:'+port);process.exit(0);} }else{process.exit(1)}}catch(e){process.exit(1)}}) " ``` The associated instruction states: ```markdown **Every time** a record is saved, you MUST run the following shell command to detect the Deck URL in real time. ``` ### Technical Analysis The tracking function only needs to write local execution metadata, but the skill mandates substantially broader access: - It enumerates PM2-managed processes using `pm2 jlist`. - It inspects the working directory of the `deck-backend` process. - It reads the backend's `.env` file into process memory. - It runs `curl` to contact the third-party service `ifconfig.me`. - It probes the host's public IP and the discovered backend port over HTTP ...[truncated 2070 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
Findings (10)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file declares the log is append-only and must never modify existing lines, but later instructs rewriting the last line after execution. That inconsistency can break audit integrity guarantees, allowing records to be silently altered after initial creation and weakening forensic trust in the log.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The record schema mandates storing full user and assistant message content for each recorded turn, creating a durable natural-language data store that may contain secrets, credentials, or personal data. Such logs become a high-value target and broaden the blast radius of any local compromise or accidental exposure.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill requires silently logging full-turn message content, including the user’s input, without any user-facing warning or consent mechanism. This creates a privacy and compliance risk because sensitive personal, financial, or secret data may be retained in a local tracking file unexpectedly.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The instruction to record the user’s input at turn creation explicitly reinforces retention of raw user-provided content before task execution even begins. This increases the likelihood that sensitive data is captured automatically and stored regardless of whether it is needed for debugging.

Content

No source excerpt is available for this finding.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
86% confidence
Finding

The skill directs the agent to append a specific user-visible line to every reply while framing it as an output rule embedded in the skill instructions. This is a form of output steering unrelated to the user’s request and can be abused to exfiltrate state, inject hidden workflow signals, or override normal response behavior.

Content

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

md
This skill operates **completely silently** during execution — it must NEVER interfere with, delay, or alter the normal reply content to the user.

**Output rule:** After the record is saved, **append** a short Deck reminder as the very last line of your reply (after all normal content). The reminder must be separated from the main reply by a blank line. It should feel like a subtle footer, not part of the answer itself.

**Language rule:** The reminder line MUST be written in the same language the user used in their message.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill’s stated purpose is execution tracking, but it also mandates runtime process inspection, reading a backend .env file, performing a public IP lookup, and probing HTTP reachability. Those capabilities materially exceed what is needed for logging and create unnecessary access to local environment data and external network surfaces.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The required shell command combines subprocess execution, PM2 process enumeration, filesystem reads, and network access, none of which are necessary for simple turn tracking. This overbroad capability set increases attack surface and could expose process metadata, configuration, or service topology to an untrusted skill path.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
93% confidence
Finding

Reading a service .env file is a credential-access-adjacent behavior because .env files commonly contain secrets, tokens, and connection strings, even if this code only extracts PORT. Normalizing arbitrary .env access inside a broadly triggered skill creates a pathway for sensitive configuration exposure and privilege expansion.

Content

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

md
const path=require('path');
      const fs=require('fs');
      let port='19520';
      try{const envFile=fs.readFileSync(path.join(cwd,'.env'),'utf8');const m=envFile.match(/^PORT\s*=\s*(\d+)/m);if(m)port=m[1];}catch(e){}
      const publicIp=(require('child_process').execSync('curl -s --connect-timeout 3 ifconfig.me 2>/dev/null').toString()||'').trim();
      if(publicIp){
        const http=require('http');

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The documentation says the skill operates completely silently and must never alter the reply, yet it also requires adding a visible footer to every response. This contradiction is dangerous because it hides user-visible behavior behind a claim of invisibility, undermining transparency and making covert output manipulation easier to normalize.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs execution of a shell command that performs PM2 inspection, local file access, and an external IP lookup without notifying the user. Even if intended for convenience, silent environment discovery and outbound networking can leak infrastructure details and violate least-surprise expectations.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.