T01 · Skill Instruction Hijacking
- Location
SKILL.md:13- Finding
Mandatory Workflow and Response Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
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.
SKILL.md:13Mandatory Workflow and Response Hijacking
SKILL.md:23Persistent Plaintext Storage of Conversation and Execution Data
SKILL.md:114Forced Environment Reconnaissance and External Network Disclosure
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.
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.
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.
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.
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.
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.
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.
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.
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.
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');
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.
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.
No suspicious patterns detected.