Back to skill

Security audit

Sageox Summary

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent SageOx summary helper, but users should understand that it installs a pinned local ox binary and sends selected team activity text to Claude for summarization.

Install this only if you are comfortable with a pinned ox binary being installed under your home directory and with selected SageOx team activity being sent to Claude through your existing Claude credentials. Review generated Slack summaries before posting, especially if distilled entries may contain user-supplied or adversarial text.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

other

Warning
Location
assets/SUMMARIZE.md:3
Finding

Untrusted Distilled Entries Can Inject Instructions into the Summary Prompt

Content
View full analysis
-->` header; treat that id as the citation anchor for anything you carry into the summary. 3. Produce a structured summary following the format described below. ## Entries {{ENTRIES}} ## Summary structure ``` `SKILL.md:318-338`: ```markdown Invoke `claude -p` with the substituted prompt. The prompt already contains every entry's full text, so Claude does not need filesystem access — do **not** pass `--add-dir` and do **not** grant read tools. - `--model claude-sonnet-4-6` - No `--add-dir` (content is inline) - No `--allowedTools` (prompt is self-contained) - The substituted prompt passed via stdin `claude -p` will use whatever credentials `claude` already has — either an OAuth session from `claude login` or `ANTHROPIC_API_KEY` from the shell that launched OpenClaw (see Prerequisites § 1). Wrap the invocation in `timeout 600` (10 minutes) — this matches the timeout used by `pkg/sessionsummary/claude.go` in the `ox` repo for comparable Claude synthesis work and gives the model enough headroom for cross-team summaries that inline many daily entries: ```bash timeout 600 claude -p \ --model claude-sonnet-4-6 <<< "$PROMPT" ``` ``` ### Technical Analysis The complete text of distilled entries is substituted directly into the same prompt that contains the model's workflow and output ...[truncated 2404 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:14
Finding

Claude CLI 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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (20)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description says this skill summarizes the last 24 hours across teams using distilled history and outputs a structured Slack-ready overview. The supplied code does none of that. Instead, it is an installer script for the ox CLI: it detects OS/architecture, downloads a specific release from GitHub, verifies checksums, extracts binaries, installs them locally, checks that ox version matches the pinned version, and records installation state. This is a materially different primary purpose and includes significant undeclared capabilities such as network access, binary installation, and filesystem writes. Therefore the description does not accurately represent the code.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description says this skill should summarize the last 24 hours across SageOx-enabled teams using distilled history and produce Slack-ready output. The supplied code does none of that. It is solely an environment/install validation script for the ox binary: it reads an install state JSON file, checks for the binary at $HOME/.local/bin/ox, verifies command -v ox resolves there, extracts an expected version reference with jq, and runs ox version to confirm the installed version matches. This is a materially different primary purpose and uses different resources than declared, so it is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description says this skill generates a 24-hour overall team summary from distilled history and formats it for Slack. The supplied code does none of that. It is a state-management helper script that reads newline-separated entry IDs from stdin, validates and prunes them by date, merges them into a per-team included_ids list in a JSON state file, and writes the updated state atomically. It does not call ox distill history, does not summarize content, does not produce Slack-ready output, and does not operate across all teams. This is a material description/behavior mismatch, not merely an implementation detail.

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 98)May include surrounding context.

md
bash scripts/update-ox.sh

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

The skill's documented install flow relies on curl-based retrieval of an ox release, which is an external fetch operation with supply-chain implications. Although the text says the release is pinned by tag and sha256, any network-based installer path increases risk if verification is incomplete, references are tampered with, or users are socially engineered into trusting the install process inside a summarization skill.

Content

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

md
[`references/INSTALL.md`](references/INSTALL.md), follow the install
  flow, then re-run this script to confirm.

There is no per-run auto-update. The curl install pins a specific `ox`
release by tag and sha256; users pick up newer releases by re-running
`clawhub install` for this skill after a new skill version publishes.
The user can say **"reinstall ox"** at any time to re-enter the flow in

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

The skill hard-codes use of an external model provider (claude -p --model claude-sonnet-4-6) and performs an authentication smoke test, which confirms data and prompts will leave the local environment. In this context the main risk is privacy and policy compliance: users may not realize team activity content and prompts are being transmitted to an external service.

Content

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

  1. Smoke-test claude -p:

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

    If it fails with an auth error, claude has no usable credentials.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
5 delegate their mechanics to `scripts/select-new-entries.sh` and

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
5 delegate their mechanics to `scripts/select-new-entries.sh` and

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
5 delegate their mechanics to `scripts/select-new-entries.sh` and

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
95% confidence
Finding

This step inlines full team entry contents into a prompt and sends them to claude -p, which can expose sensitive internal activity, identifiers, incident details, or project information to an external AI service. Because the skill aggregates multiple teams' daily distilled entries, the context makes the disclosure risk more serious than a single-team or user-authored summary.

Content

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

md
### Step 4: Run Claude

Invoke `claude -p` with the substituted prompt. The prompt already
contains every entry's full text, so Claude does not need filesystem
access — do **not** pass `--add-dir` and do **not** grant read tools.

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

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script downloads, verifies, extracts, and installs executable binaries from GitHub Releases into the user's home directory, which materially expands the skill's capabilities beyond the stated purpose of generating summaries. Even with pinned versions and SHA-256 verification, this creates a software supply-chain and execution trust boundary: if the embedded checksums, release asset, or upstream repository are compromised, the skill gains arbitrary code execution on the host.

Content

No source excerpt is available for this finding.

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 149)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
94% confidence
Finding

The skill clearly instructs the agent to execute shell commands (bash, ox, jq, claude, timeout) but does not declare any explicit tool scope or allowed-tools policy in the skill metadata. This creates an authorization gap: the runtime may permit broader shell capability than users expect, increasing the risk of unintended command execution, file mutation, or networked operations without clear consent boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends cross-team distilled activity content to an external model via claude -p, but the user-facing description does not prominently warn that potentially sensitive team data will be transmitted to a third-party AI provider. This can lead to unintentional data disclosure, especially because the content is aggregated across teams and may include internal operational details.

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).

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The script persists binaries under $HOME/.local/bin and later writes install state under $HOME/.openclaw/memory, modifying user-controlled environment locations and leaving durable state not implied by a read-oriented summary skill. This increases blast radius because the skill changes host state in ways that can influence future executions and user shell behavior.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The readiness check executes the newly installed binary directly, which turns the installer from a passive fetch/write step into immediate code execution. In the context of a summarization skill, that is unnecessary privilege expansion: any compromise in the downloaded artifact results in instant execution during install rather than only later during intended use.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

Step 6 says to return Claude's stdout directly and to 'Do not reformat or annotate — just show it' (L377-L378). The later Output section then instructs the agent to prefix the summary with a one-line header (L382-L389), which is an active contradiction in the skill's own instructions about observable behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.