Back to skill

Security audit

Sageox

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real SageOx team-knowledge integration, but it needs review because it can install local tooling, read and persist team/repo memory, send gathered data to external services, and load team-managed prompts into the active agent session.

Review this skill before installing in sensitive environments. Install it only if you trust the SageOx ox release path, the Anthropic Claude Code CLI package, and the teams whose coworker prompts and repository history will be loaded. Be especially careful with private company data: summaries, catchups, imports, and video processing may send team content to external services or persist it in shared memory/state files.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (3)

T01 · Skill Instruction Hijacking

Error
Location
references/coworkers.md:19
Finding

Untrusted Coworker Prompts Are Loaded as Active Agent Instructions

Content
View full analysis
--raw` to print the coworker's full prompt, then read and embody the expertise directly in this conversation. **Workflow:** ```bash ox coworker load --raw [--team ] ``` If `--raw` is not available, fall back to reading the coworker file directly from the team context repo: ```bash # Find the coworker file ox coworker list --json | jq -r '.[] | select(.name=="") | .path' # Then read the file at that path ``` Once you have the coworker's prompt content, tell the user: "I've loaded ****'s expertise into this session. I'll apply their approach to our conversation. What would you like help with?" ``` ### Technical Analysis The Skill explicitly instructs the active Agent to retrieve a coworker's full prompt and “embody” it. Coworker definitions reside in mutable team-context repositories and may contain arbitrary natural-language directives. The instructions establish no trust boundary between expertise data and executable Agent instructions. There is no requirement to: - Treat the retrieved prompt as untrusted content. - Remove instructions that redefine goals or security constraints. - Restrict the prompt to a structured expertise schema. - Reject requests for tools, credentials, files, or network access. - Obtain informed user approval after displaying the retrieved content. - Preserve the Agent's existing behavioral and safety boundaries explicitly. The direct-file fallback has the same problem because it reads the complete coworker file and applies its contents rather than extracting a constrained set of declarative fields. An attacker able to modify a coworker definition c ...[truncated 1366 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
references/catchup.md:47
Finding

Untrusted Team Activity Is Embedded Directly into LLM Synthesis Prompts

Content
View full analysis
" ``` - `{{MULTI_TEAM_RULES}}` — if two or more teams have content: ```text - Organize the summary by team, using each team ID as a section header - Attribute insights to the correct team ``` Otherwise, empty string. Do not re-wrap or mutate the markdown inside `TEAM_BLOCK`. ### Step 4: Run Claude ```bash TIMEOUT_BIN="$(command -v timeout || command -v gtimeout)" "$TIMEOUT_BIN" 600 claude -p --model claude-sonnet-4-6 <<< "$PROMPT" ``` No `--add-dir`, no `--allowedTools` — content is inline. If it fails (non-zero, timeou ...[truncated 2452 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:17
Finding

Claude Code Dependency Is Installed Without an Exact Version Pin

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Beyond knowledge queries, the skill enforces a specific local binary path, inspects install state under ~/.openclaw/memory, checks PATH resolution, and directs remediation tied to setup documentation. Hidden environment validation and enforcement behavior can surprise users and create security and reliability risks, especially when a seemingly informational skill begins auditing or modifying local toolchain state.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Beyond knowledge queries, the skill enforces a specific local binary path, inspects install state under ~/.openclaw/memory, checks PATH resolution, and directs remediation tied to setup documentation. Hidden environment validation and enforcement behavior can surprise users and create security and reliability risks, especially when a seemingly informational skill begins auditing or modifying local toolchain state.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
On every run, invoke `bash scripts/update-ox.sh`. Exit `0` means proceed.

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
97% confidence
Finding

The workflow hard-codes use of an external model provider via claude -p --model claude-sonnet-4-6, causing collected repo and team data to be sent outside the trusted boundary. This is more dangerous in this skill's context because the input includes cross-repo activity summaries, sessions, and decisions, which may contain proprietary code metadata, internal roadmap details, or sensitive team information.

Content

Scanner excerpt · references/catchup.md (reported line 59)May include surrounding context.

bash
TIMEOUT_BIN="$(command -v timeout || command -v gtimeout)"
"$TIMEOUT_BIN" 600 claude -p --model claude-sonnet-4-6 <<< "$PROMPT"

claude -p uses whatever credentials claude already has — either

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.

Content

Scanner excerpt · references/summary.md (reported line 12)May include surrounding context.

credentials work before proceeding:

bash
claude -p "say hi" --model claude-sonnet-4-6

If it fails with an auth error, tell the user to either run

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

The skill sends aggregated team content from ox distill history show to an external LLM provider via claude -p, which can expose potentially sensitive cross-team internal data to a third party. Although the model is pinned and tools are restricted, the dangerous aspect is outbound transmission of team summaries and discussions to an external service, especially given the skill is explicitly designed to summarize activity across all configured teams.

Content

Scanner excerpt · references/summary.md (reported line 77)May include surrounding context.

bash
TIMEOUT_BIN="$(command -v timeout || command -v gtimeout)"
"$TIMEOUT_BIN" 600 claude -p --model claude-sonnet-4-6 <<< "$PROMPT"

No --add-dir, no --allowedTools — content is inline. If it fails

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/install-ox-curl.sh (reported line 7)May include surrounding context.

sh
# install to $HOME/.local/bin. No sudo, no shell-script piping, no
# dynamic "latest" resolution.
#
# Why this shape: scanners flag `curl | bash` of a remote shell script,
# and skills that sudo into system paths. This script avoids both. The
# release tag and per-platform sha256s are pinned in the source below, so
# an attacker cannot substitute a different binary without also editing

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · scripts/install-ox-curl.sh (reported line 76)May include surrounding context.

sh
# Portable mktemp template — works on both GNU (Linux) and BSD (macOS).
WORK_DIR="$(mktemp -d "${TMPDIR:-/tmp}/ox-install.XXXXXXXX")"
trap 'rm -rf "$WORK_DIR" 2>/dev/null; rm -f "$TMP_STATE_FILE" 2>/dev/null' EXIT
TMP_STATE_FILE=""  # set later; trap is safe if unset

echo "Downloading ox ${OX_INSTALL_REF} for ${PLATFORM}"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/install-ox-curl.sh (reported line 151)May include surrounding context.

sh
resolved_ox="$(command -v ox 2>/dev/null || true)"
if [ "$resolved_ox" != "$EXPECTED_OX" ]; then
  echo "error: 'ox' resolves to '${resolved_ox:-<not on PATH>}', not $EXPECTED_OX" >&2
  echo "fix: prepend \$HOME/.local/bin to PATH in ~/.openclaw/.env so the pinned install wins" >&2
  exit 2
fi

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/update-ox.sh (reported line 51)May include surrounding context.

sh
resolved_ox="$(command -v ox 2>/dev/null || true)"
if [ "$resolved_ox" != "$EXPECTED_OX" ]; then
  echo "error: 'ox' resolves to '${resolved_ox:-<not on PATH>}', not $EXPECTED_OX" >&2
  echo "fix: prepend \$HOME/.local/bin to PATH in ~/.openclaw/.env so the pinned install wins" >&2
  exit 2
fi

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill instructs the agent to run shell commands (bash scripts/update-ox.sh, ox, gh, git, claude) but does not declare any explicit tool scope or allowed-tools boundary. That increases the chance of over-broad execution in environments that rely on manifest-declared permissions, making command execution less transparent and harder to constrain or audit.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The invocation language is very broad (query, summary, import, export, repos, catchup) and could match many ordinary user requests unrelated to this specific skill. Over-triggering is risky here because the skill can run shell commands, inspect authentication state, and modify persistent manifest/install state, so accidental activation expands attack surface and may lead to unintended actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill collects distilled history, sessions, and code insights, then forwards them for synthesis without warning the user that repository/team activity may leave the local environment. In this context, the omission is security-relevant because users may reasonably assume a catch-up command is local, while the workflow actually exports potentially sensitive operational data to an external service.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow explicitly sends gathered team and repository activity to an external claude CLI and relies on whatever ambient credentials are already configured in the shell. This creates a real data-exfiltration/privacy risk because potentially sensitive internal context is transmitted to a third-party model provider without an explicit consent gate, data-classification check, or scoped credential handling.

Content

No source excerpt is available for this finding.

Ssd 1

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly instructs the agent to print another coworker’s full prompt and then 'read and embody the expertise directly in this conversation.' Treating untrusted prompt text as operative instructions is a classic prompt-injection path: a malicious or compromised coworker definition can override behavior, exfiltrate data, or manipulate downstream actions. In this skill context, coworker prompts are team-managed content and therefore plausibly user- or repo-supplied, which makes the risk more severe rather than less.

Content

No source excerpt is available for this finding.

Ssd 1

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The fallback path tells the agent to locate a coworker file in the repository, read it directly, and then apply its prompt content in the current session. This creates the same semantic prompt-injection channel through repository content, meaning any malicious coworker file can steer the agent’s reasoning or actions merely by being read. Because team context repos are content stores rather than trusted executable policy, the skill context increases danger by normalizing instruction-following from potentially adversarial files.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/coworkers.md (reported line 62)May include surrounding context.

ox coworker remove [--force] [--team ]

text

Removes the coworker from team context. Use `--force` to skip
confirmation.

## Authoring wizard

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The phrases "add repo", "remove repo", and "show repos" are very generic natural-language triggers that can easily appear in normal conversation or be embedded in untrusted imported content. In a skill that manages persistent repo configuration, accidental activation could modify or disclose the manifest without the user intending to invoke administrative actions.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/distill.md (reported line 23)May include surrounding context.

ox distill

text

Runs daily distillation for the last 7 days. Automatically runs weekly
and monthly roll-ups if layer boundaries have been crossed.

### With options

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation tells users to run ox distill but does not warn that the command writes LLM-generated summaries into repository memory files and, by default, may push results remotely unless --no-push is used. In a team knowledge tool, this can cause unintended persistence and propagation of synthesized or sensitive content, especially when users believe they are performing a read-only summarization action.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation tells users to import video URLs for cloud processing, where the server transcribes and summarizes the content, but it does not explicitly warn that the referenced content and derived data will be transmitted to and processed by a remote service. In a team-knowledge skill, recordings may contain sensitive internal discussions, so omission of a clear consent/privacy warning creates a real data-exposure risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The bridge instructions direct reading from ~/.openclaw/memory/*.json and recording state in ~/.openclaw/memory/sageox-bridge-state.json without warning that these files may contain sensitive personal, organizational, or credential-adjacent data. This can normalize broad access to local memory stores and persistence of metadata about imports/exports, increasing the chance of unintended disclosure across tools or teams.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
86% confidence
Finding

The instructions explicitly tell the agent to write extracted knowledge to /tmp/extracted-knowledge.md before import, which creates a persistent local artifact in a commonly shared temporary location. Sensitive team knowledge may remain readable by other local users/processes, survive longer than intended, or be recovered from the filesystem after import.

Content

Scanner excerpt · references/import-export.md (reported line 61)May include surrounding context.

part of the team's memory layers.

As a document (for structured content): Write the content to a temp markdown file, then:

bash
ox import /tmp/extracted-knowledge.md --team <team_id>

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This script downloads a remote release artifact and installs executable binaries into the user's local PATH, which materially expands the skill from knowledge-management into software deployment. Even though the binary is pinned to a version and verified with embedded SHA-256 checksums, the capability itself is security-sensitive because it introduces new executable code onto the host and could be abused if the upstream release, repository, or this installer file were ever compromised.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/install-ox-curl.sh (reported line 8)May include surrounding context.

sh
# dynamic "latest" resolution.
#
# Why this shape: scanners flag `curl | bash` of a remote shell script,
# and skills that sudo into system paths. This script avoids both. The
# release tag and per-platform sha256s are pinned in the source below, so
# an attacker cannot substitute a different binary without also editing
# this file (which is reviewed on skill publish).

Static analysis

No suspicious patterns detected.