T09 · Insecure Skill Coding Practices
- Location
src/csv-brain.js:112- Finding
Configurable Ollama Endpoint Enables SSRF and Dataset Disclosure
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
CSVBrain is a coherent CSV analysis helper, but users should treat its AI query mode as a data-sharing feature because it sends dataset summaries and sample rows to the configured model provider.
Install only if you are comfortable with the configured AI provider receiving column names, statistics, the first five rows, and your questions. Use local Ollama or an approved provider for sensitive data, avoid untrusted OLLAMA_HOST values, and verify AI-generated answers before relying on them for important decisions.
src/csv-brain.js:112Configurable Ollama Endpoint Enables SSRF and Dataset Disclosure
src/csv-brain.js:110Untrusted CSV Content Is Embedded in a Privileged Model Prompt
The README states that data is not transmitted externally unless explicitly configured by the user, but the skill description advertises Anthropic and OpenAI-backed natural-language querying. That creates a deceptive privacy/security representation: users may supply sensitive CSV data believing it stays local when prompts or data may be sent to third-party APIs during normal use.
The skill prominently advertises natural-language querying via Anthropic, OpenAI, or Ollama, but the description does not clearly warn that dataset-derived content is sent to third-party AI services when remote providers are used. Even though the limitations section later notes that profiles and sample rows are transmitted, users may invoke the feature without realizing potentially sensitive business or personal data is leaving their environment, creating a meaningful data disclosure and compliance risk.
The system prompt automatically embeds sample rows and detailed column profiles derived from the loaded CSV before sending the prompt to an LLM. In a data-query skill, this context is functionally useful, but it also directly increases the volume and sensitivity of data disclosed externally, especially if the CSV contains PII, financial records, or proprietary business data.
The ask() method sends user questions plus dataset-derived context, including headers, column statistics, and sample rows, to external providers such as Anthropic. This creates a real data exfiltration/privacy risk because potentially sensitive CSV contents are transmitted off-host without explicit consent, redaction, or any built-in disclosure/warning mechanism.
The OpenAI path transmits the constructed prompt containing dataset metadata, statistics, sample rows, and the user's question to api.openai.com. If the CSV contains secrets, personal data, or regulated information, this can disclose sensitive content to a third party by default during natural-language querying.
The Ollama integration defaults to http://localhost:11434 and allows arbitrary OLLAMA_HOST values; if configured to a non-local endpoint over HTTP, dataset content and questions are sent unencrypted. That creates both confidentiality risk from plaintext transit and SSRF-like risk if untrusted input can control ollamaHost or environment configuration.
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.
**USE AT YOUR OWN RISK.**
- The author(s) are NOT liable for any damages, losses, or consequences arising from
the use or misuse of this software — including but not limited to financial loss,
data loss, security breaches, business interruption, or any indirect/consequential damages.
- This software does NOT constitute financial, legal, trading, or professional advice.
- Users are solely responsible for evaluating whether this software is suitable for
The code reads provider API keys from environment variables for Anthropic and OpenAI, but there is no visible user notice, comment, or docstring explaining that credentials will be accessed from the environment. This meets the rule's criterion for sensitive environment variable access lacking disclosure.
No suspicious patterns detected.