T09 · Insecure Skill Coding Practices
- Location
plugin/index.ts:226- Finding
Unauthenticated API Disclosure of Captured Agent Responses
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is an emotion-analysis monitor, but it automatically captures agent responses, stores response-derived text, and exposes history through unauthenticated local HTTP endpoints.
Review before installing. Use this only if you are comfortable with agent outputs being automatically analyzed, logged locally, and made available through the EFT API. Avoid sensitive workloads unless you restrict gateway access, remove wildcard CORS, add authentication, choose trusted engine/log paths, and set retention or deletion controls for logs.
plugin/index.ts:226Unauthenticated API Disclosure of Captured Agent Responses
plugin/index.ts:62Unbounded Plaintext Retention of Agent Response History
eft_dashboard.html:8Dashboard Loads an External Google Fonts Resource
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
# EngineMind EFT - Scientific Evidence & Market Research
## Emotional Framework Translator: Research Compilation
> **Compiled:** February 2026
A skill that intercepts and analyzes every AI agent response materially affects privacy and data handling, yet the description does not prominently warn users about this behavior. Because model responses may contain secrets, personal data, or proprietary content, silent interception significantly raises the risk of unauthorized exposure or retention.
Spawning a Python interpreter is not inherently malicious, but it introduces a powerful execution boundary that depends on local interpreter and module resolution. Here the plugin executes code from a user-home Desktop path and inherits the full process environment, so a tampered script or module in that location could run arbitrary code with the host application's privileges.
The plugin stores and serves a rich record of agent outputs, sentence analyses, text previews, timestamps, token usage, session keys, and other metadata as a built-in memory/history feature. This creates a durable sensitive-data repository and direct disclosure channel that is broader than needed for emotion analysis and materially raises privacy, confidentiality, and local attack-surface risk.
The plugin exposes unauthenticated HTTP endpoints that return the latest analysis, recent history, and allow arbitrary ad hoc analysis requests. Because the history includes response-derived content and session/process metadata and CORS is set to '*', any reachable local or proxied web origin may be able to read sensitive data or drive analysis without user consent.
The documentation explicitly states that EFT 'intercepts every response an AI agent produces' and later describes capture of text, model, tokens, latency, tool calls, plus JSONL logging and dashboard display. That is privacy-sensitive monitoring behavior, and the absence of a prominent warning, consent guidance, retention notice, and scoping controls creates a real risk of unintended collection and persistence of secrets, personal data, and regulated content.
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
│
â–¼
┌─────────────────────────────────────────────────────────────â”
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
│
â–¼
┌─────────────────────────────────────────────────────────────â”
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
│
â–¼
┌─────────────────────────────────────────────────────────────â”
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
┌─────────────────────────────────────────────────────────────â”
│ AI Agent Response │
│ "The backtest shows a Sharpe ratio of 2.3 with maximum..." │
└─────────────────────┬───────────────────────────────────────┘
│
â–¼
┌─────────────────────────────────────────────────────────────â”
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
â–¼ â–¼ â–¼
┌──────────────────────────────────────â”
│ EmotionMapper │
│ phi, NC, MA, CL, arousal, dims │
│ → Calibrated Rules → 10 Emotions │
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Analyze arbitrary text.
curl -X POST http://localhost:18789/eft/api/analyze \
-H "Content-Type: application/json" \
-d '{"text": "Your text to analyze here"}'
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.
| Tool | Type | Limitation vs. EFT |
|---|---|---|
| **VADER** (Hutto & Gilbert) | Lexicon-based sentiment | Positive/negative/neutral only; no complex emotions |
| **TextBlob** | Pattern-based polarity | Simplistic; no emotional granularity |
| **Hugging Face Emotion Pipelines** | Transformer-based classification | Standard 6-8 emotion classes; no narrative arc or consciousness metrics |
| **IBM Watson Tone Analyzer** (deprecated) | API-based tone detection | Discontinued; was limited to 7 tones |
| **Amazon Comprehend** | Cloud sentiment API | 4-class sentiment only (pos/neg/neutral/mixed) |
The skill declares runtime requirements and setup steps that enable code execution and likely environment access, but it does not declare a corresponding tool scope or permission boundary. That mismatch makes the skill's capabilities less transparent and can lead users or hosting systems to activate it without understanding that it can process data through local components and plugins.
The description is written broadly enough to apply to "any AI model" and implies pervasive integration, which can cause the skill to activate in many unrelated contexts. Over-broad activation increases the chance of unnecessary interception and analysis of sensitive model outputs that the user did not intend to route through this skill.
The skill explicitly states it hooks into every AI agent response, but it provides no limiting conditions or precise invocation guardrails. In practice, this can turn the skill into a passive interceptor for broad amounts of conversational data, creating privacy, consent, and data-minimization risks.
The UI explicitly states that the EFT hook captures each agent response automatically, but it provides no meaningful notice, consent flow, or privacy explanation about what content is collected, retained, or displayed. In a tool that monitors model outputs, this can expose sensitive prompts, responses, or proprietary data to users who may not realize monitoring is active.
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.
// Try gateway API first, fallback to standalone
let url = "/eft/api/history";
let r = await fetch(url).catch(()=>null);
if(!r||!r.ok) { r = await fetch("http://localhost:8889/api/history").catch(()=>null); }
if(!r||!r.ok){
// Try loading from log file via standalone server
document.getElementById('statPill').textContent='API unavailable';
The code inspects environment variables such as USERPROFILE and HOME to locate executables and log files under the user's desktop. For a skill described only as emotion analysis, accessing host environment configuration and user filesystem locations is an additional host-integration capability not justified by the manifest description alone.
The plugin forwards agent response text to an external Python process for analysis, which is a cross-component data transfer not visible to end users. While local, it still increases exposure because the child process, imported modules, and any errors or future modifications could access or mishandle sensitive response data.
The plugin persists analyzed outputs and related metadata to disk, which expands its behavior from transient emotion analysis into durable collection of model responses. In this context the logged entries include text previews, sentence-level analysis, and process/session metadata, creating a privacy and data-retention risk if the host is multi-user, compromised, or the log is later exposed.
Assistant response content and derived emotional analysis are appended to a local JSONL log without any evident consent, disclosure, or retention control. Even the stored preview and sentence-level outputs can contain secrets, personal data, or sensitive business content produced by the agent.
The HTTP endpoints expose latest and historical analysis results, including content-derived fields, without any user-facing warning or access control. In context this is more dangerous because the skill processes AI responses that may contain confidential prompts, outputs, or identifiers, and then republishes them over a simple API.
Detected: suspicious.dangerous_exec