Back to skill

Security audit

Edith Senso Ingest

Security checks for vulnerabilities and agentic risk

Overview

The skill has a clear Senso upload purpose, but it asks users to persist an API key in chat/memory and uses shell commands to upload arbitrary text or files, creating credential-leakage and command-execution risk.

Review this skill carefully before installing. Use it only for content you intentionally want uploaded to Senso.ai, avoid pasting API keys into chat, prefer a platform secret store, and require the publisher to replace shell command templates with safe JSON serialization or a structured HTTP client.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:34
Finding

Shell Command Injection Through Unsafely Embedded Document Content

Content
View full analysis
", "metadata": {"title": "", "source": ""}}' ``` ### Technical Analysis The Skill instructs the Agent to place document content and metadata directly into a single-quoted shell argument and then execute the resulting command through the `exec` tool. The document text, title, and source can contain attacker-controlled characters. A single quote in supplied content can terminate the shell string. The attacker can then introduce shell operators and commands before commenting out or otherwise neutralizing the remaining template. JSON escaping alone does not prevent this vulnerability because JSON escaping and shell escaping are separate operations. For example, content structured conceptually as `' ; ; #` could escape the `-d` argument if substituted directly into the command template. The precise payload would depend on how the Agent performs placeholder substitution. ### Attack Path 1. An attacker supplies a document or ingestion request containing shell metacharacters and a single quote. 2. The Agent follows the Skill and substitutes the supplied content into ``. 3. The Agent sends the constructed command to the shell-backed `exec` tool. 4. The single quote closes the intended JSON argument. 5. Shell operators cause the attacker's appended command to execute. 6. The injected process runs with the same operating-system privileges and environment access as the Agent. ### Impact Assessment Successful exploitation can provide arbitrary command execution under the Agent's operating ...[truncated 513 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:22
Finding

API Key Disclosure Through Chat and Unspecified Persistent Storage

Content
View full analysis
API Keys and generate a new key 3. Tell OpenClaw: "My Senso API key is sk-..." and store it for future use The API key should be stored in OpenClaw's memory/config as `SENSO_API_KEY`. ``` ### Technical Analysis The Skill directs users to disclose an API key through a conversational message and instructs the Agent to persist it in unspecified “memory/config.” It does not require a dedicated secret manager, encryption at rest, access controls, transcript redaction, log filtering, or retention limits. Conversation messages and general-purpose memory or configuration stores may be retained in histories, diagnostics, backups, or synchronization systems. They may also be readable by other processes, users, skills, or future sessions. Treating a reusable credential as ordinary conversational data increases its exposure beyond the ingestion operation. ### Attack Path 1. The user follows the Skill's setup instructions and sends the Senso API key in a chat message. 2. The key becomes part of the conversation history and may be captured by logs, telemetry, or backups. 3. The Agent stores the key in a general memory or configuration location for future use. 4. An attacker or unauthorized component with access to the transcript, memory store, configuration, logs, or backups retrieves the key. 5. The attacker reuses the credential to authenticate to the Senso API until the key is revoked or expires. ### Impact Assessment Exposure grants the attacker the API permissions assigned to the compromised Senso key. Depending on server-side authorization, this may permit unauthorized content ingestion and access to other pro ...[truncated 344 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Ssd 3

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill tells users to paste their Senso API key directly into the assistant so it can be stored in memory/config. Asking users to disclose secrets in-band to a conversational agent increases the risk of credential leakage through logs, memory persistence, prompt exposure, or unintended reuse by other tools or skills.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs the agent to transmit user-provided document or file contents to an external Senso.ai endpoint without requiring an explicit user warning or confirmation at the point of transfer. This can cause unintended disclosure of sensitive files or text, especially because the skill is user-invocable and framed as a normal knowledge-base action rather than a third-party data export.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This skill explicitly uses curl via the exec tool to send raw content and metadata to an external API. External transmission is expected for the feature, but it remains security-relevant because sensitive user data may be exfiltrated to a third party if the user is not properly informed, consent is ambiguous, or content selection is overly broad.

Content

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

Use the exec tool to call the Senso.ai content ingestion endpoint:

bash
curl -s -X POST "https://sdk.senso.ai/api/v1/content/raw" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ${SENSO_API_KEY}" \
  -d '{"content": "<text content to ingest>", "metadata": {"title": "<optional title>", "source": "<optional source>"}}'