T03 · Remote Payload Retrieval and Execution
- Location
setup.sh:39- Finding
Unverified Remote Installer Is Downloaded and Executed Directly
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This memory skill is purpose-aligned but needs review because it can automatically index workspace files, persist plaintext memory data, use optional cloud backends despite local-only claims, and run an unverified installer.
Install only if you are comfortable with a workspace memory tool that reads Markdown files, stores derived memory and raw chunks locally, and may use cloud providers if configured. Avoid running setup.sh as root, install Ollama and QMD through trusted pinned channels, keep Convex/OpenAI/OpenRouter disabled unless you explicitly want remote processing, and review or limit watch/scheduled ingestion paths before enabling background operation.
setup.sh:39Unverified Remote Installer Is Downloaded and Executed Directly
scripts/auto_ingest.py:99Untrusted Markdown Can Poison Persistent Agent Memory
references/configuration.md:55Persistent Scheduled Ingestion Uses Ambiguous Relative Execution Paths
SKILL.md:34Optional QMD Dependency Is Installed Globally Without Version or Integrity Pinning
scripts/auto_ingest.py:181Sensitive Workspace Content and Recall Queries Are Retained in Plaintext Cache Files
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The documented setup pattern includes installing software via remote shell script and pulling models, while the skill is presented mainly as a local memory toolkit. In practice, encouraging operators to run bootstrap commands with shell/network side effects can introduce supply-chain risk and unexpected system modification, especially when framed as routine setup for a memory tool.
The skill metadata claims it runs 100% locally with no cloud dependency, but this module will send stored facts and queries to a remote Convex service whenever convexUrl is configured. That mismatch can mislead users into exposing sensitive workspace memory or extracted facts to an external service under the assumption that all processing is local.
This line retrieves executable content from an external URL and passes it straight to the shell, creating an external script fetching vulnerability. The danger is amplified in a setup script because users expect it to prepare their environment and may run it without scrutiny, granting remote content direct execution on their machine.
echo " → Download from https://ollama.com/download/mac"
echo " → Or: brew install ollama"
elif [[ "$OSTYPE" == "linux"* ]]; then
echo " → Running: curl -fsSL https://ollama.com/install.sh | sh"
curl -fsSL https://ollama.com/install.sh | sh
else
echo " → Download from https://ollama.com/download"
The actual execution of the fetched installer occurs here, so compromise of the remote source or delivery path would result in arbitrary shell command execution. Because this is in an installation path, successful exploitation could persist software, modify shell profiles, or alter system state broadly.
echo " → Or: brew install ollama"
elif [[ "$OSTYPE" == "linux"* ]]; then
echo " → Running: curl -fsSL https://ollama.com/install.sh | sh"
curl -fsSL https://ollama.com/install.sh | sh
else
echo " → Download from https://ollama.com/download"
fi
The pipe into sh is the hazardous chaining primitive that converts downloaded text into immediate command execution. In a shell setup script this meaningfully increases exploitability because there is no inspection boundary between receipt of remote data and execution.
echo " → Or: brew install ollama"
elif [[ "$OSTYPE" == "linux"* ]]; then
echo " → Running: curl -fsSL https://ollama.com/install.sh | sh"
curl -fsSL https://ollama.com/install.sh | sh
else
echo " → Download from https://ollama.com/download"
fi
The README makes a strong trust claim that the skill runs '100% local' with 'no cloud dependency,' but elsewhere advertises optional Convex cloud storage and OpenAI/OpenRouter presets. This mismatch can mislead users into installing or enabling the skill under an incorrect privacy and data-flow assumption, increasing the risk of unintended transmission of workspace-derived data to remote services.
The README promotes auto-ingestion and workspace watching without a prominent warning that files may be continuously monitored, parsed, and stored as extracted facts or graph data. In a memory/indexing skill, this is security-relevant because users may accidentally ingest sensitive local content, credentials, personal data, or proprietary information without understanding the persistence scope.
The skill advertises capabilities that inherently involve shell execution, file reads/writes, and environment access, but the manifest does not declare any explicit tool scope or permission boundaries. In an agent setting, this increases the chance of over-privileged or unintended execution because callers cannot easily constrain what the skill is allowed to touch.
The manifest asserts '100% local' and 'no cloud dependency' while the same document describes optional remote/OpenAI and Convex-backed operation. This is security-relevant because users may make trust decisions about sensitive memory data based on those privacy claims and unknowingly enable remote processing or storage.
The trigger description is broad enough to match common agent activities such as memory recall, knowledge search, indexing, and fact extraction, which can cause the skill to be invoked more often than intended. Because the skill can read/write files and run shell-based workflows, accidental invocation raises the risk of unnecessary data access, ingestion of sensitive workspace content, or side effects from indexing/watch operations.
Saying the skill runs locally via Ollama while also documenting OpenAI and Convex options creates materially misleading expectations about data residency. In the context of agent memory, that can result in accidental disclosure of indexed files, extracted facts, or recall queries to remote services.
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.
<!-- ~/Library/LaunchAgents/com.memory-auto-ingest.plist -->
<plist version="1.0">
<dict>
<key>Label</key><string>com.memory-auto-ingest</string>
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.
<!-- ~/Library/LaunchAgents/com.memory-auto-ingest.plist -->
<plist version="1.0">
<dict>
<key>Label</key><string>com.memory-auto-ingest</string>
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.
<!-- ~/Library/LaunchAgents/com.memory-auto-ingest.plist -->
<plist version="1.0">
<dict>
<key>Label</key><string>com.memory-auto-ingest</string>
The script automatically reads markdown files from the workspace and forwards their contents to fact extraction without any normal-operation disclosure or consent gate. Even though the skill metadata says processing is local via Ollama, this still creates a meaningful privacy/security risk because potentially sensitive workspace data is automatically ingested and propagated into other storage systems.
Changed file contents are re-chunked and sent to the embedding pipeline automatically, again without a clear disclosure at the point of use. In this skill context, embeddings are described as local, which reduces remote exfiltration risk, but sensitive document text is still copied into caches and transformed into derived data that may outlive the source files.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
use_fswatch = False
if sys.platform == "darwin":
try:
subprocess.run(["which", "fswatch"], capture_output=True, check=True)
use_fswatch = True
except (subprocess.CalledProcessError, FileNotFoundError):
pass
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
"-e", r"\.cache", "-e", r"__pycache__", "-e", r"\.git",
"-i", r"\.md$"] + watch_paths
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
pending = {}
while True: