T08 · Insecure Dependencies
- Location
SKILL.md:16- Finding
Unpinned npm Dependency Permits Unreviewed Upstream Code Execution
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed SageOx repository sync, indexing, and distillation workflow, with expected local CLI installation and credential use that users should understand before installing.
Install this only if you intend to use SageOx on the selected repositories and are comfortable installing the SageOx `ox` CLI plus Claude/GitHub tooling, authenticating those CLIs, and allowing the workflow to index GitHub activity and run distillation through SageOx/Claude. For tighter supply-chain control, prefer a version-pinned Claude CLI install and periodically reinstall `ox` only from reviewed skill releases.
SKILL.md:16Unpinned npm Dependency Permits Unreviewed Upstream Code Execution
scripts/update-ox.sh:58Recurring ox Integrity Gate Trusts a Mutable Binary's Self-Reported Version
The skill is presented as a repo sync/distillation helper, but it also directs installation and validation of an external executable (ox), including use of a bundled shell script and a referenced install flow that writes into $HOME/.local/bin and persists state under ~/.openclaw/memory. That hidden operational scope changes the trust model: users may approve a data-processing skill without realizing it can bootstrap or replace local executables.
The skill is presented as a repo sync/distillation helper, but it also directs installation and validation of an external executable (ox), including use of a bundled shell script and a referenced install flow that writes into $HOME/.local/bin and persists state under ~/.openclaw/memory. That hidden operational scope changes the trust model: users may approve a data-processing skill without realizing it can bootstrap or replace local executables.
Referenced artifact was not completely inspected
bash scripts/update-ox.sh
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
# 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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
The skill invokes shell commands extensively (bash scripts/update-ox.sh, ox, gh, git) but declares no explicit tool scope or allowed-tools boundary. In an agent environment, missing capability scoping increases the chance of over-broad command execution or accidental access beyond the intended operational surface, especially because the skill also reads writable state from the user's home directory.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
# 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).