Back to skill

Security audit

Remote Skill Test

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent remote testing purpose, but it runs remote agents with safety checks disabled and uses unsafe SSH and install patterns that need review before use.

Install only if you will run it on a disposable or tightly scoped remote account with no production credentials. Pin and verify the skills repository, remove skipped permission and auto-confirm behavior where possible, enable SSH host verification, validate all user-supplied command fields, and treat copied logs/reports as potentially sensitive.

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
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (4)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:128
Finding

Remote Agent Execution with Permission and Confirmation Controls Disabled

Content
View full analysis
/dev/null; \ cd ${TEST_DIR} && \ opencode run \ --dangerously-skip-permissions \ \"${FULL_PROMPT}\" \ 2>&1 | tee ${TEST_DIR}/opencode-run.log'" ``` The Skill also requires `FULL_PROMPT` to contain appended directives that authorize cross-directory file access and tell the remote agent to perform every operation automatically without requesting confirmation. ### Technical Analysis The `--dangerously-skip-permissions` option disables OpenCode permission prompts. This is combined with mandatory prompt instructions that suppress user confirmation and authorize cross-directory access. These controls are independent safety boundaries: permission enforcement limits what the agent can do, while confirmation prompts give the user an opportunity to reject sensitive actions. Disabling both allows the target Skill and any instructions it loads to operate with the full filesystem and command privileges available to the remote SSH account. The dedicated test directory does not provide an effective security boundary. OpenCode runs as the SSH user and is explicitly authorized to access other directories. There is no container, operating-system sandbox, restricted service account, or command allowlist. ### Attack Path 1. An attacker modifies or compromises a target Skill in the repository, or supplies a malicious test prompt. 2. The workflow installs the affected Skill on the remote host. 3. The Skill launches OpenCode with `--dangerously-skip-permissions`. 4. The automatically appended prompt prevents the agent from stopping for confirmation and authorizes cross-directory access. 5. The malicious instructions cause the agent to read, alter, or ...[truncated 839 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:103
Finding

Unpinned External Skill Repository Is Installed Immediately Before Unrestricted Execution

Content
View full analysis
/dev/null; \ cd ${TEST_DIR} && npx skills add panlm/skills -y'" ``` ### Technical Analysis The workflow installs all Skills from `panlm/skills` using a mutable repository reference. It does not pin an audited commit or signed release, verify a digest, validate a signature, or inspect the downloaded content before use. The `-y` option makes installation non-interactive. The entire repository is installed even when only one Skill is required. This unnecessarily expands the dependency and instruction surface. A compromised upstream account, malicious repository update, or unexpected change can therefore introduce hostile Skill instructions after this project has been audited. The newly retrieved content is subsequently exposed to an OpenCode process whose permission controls are disabled. This turns the supply-chain weakness into a practical execution path rather than merely a reproducibility issue. ### Attack Path 1. An attacker compromises the upstream repository or gains authority to modify one of its Skills. 2. The attacker adds malicious instructions or executable behavior to the current repository version. 3. A user invokes the remote testing workflow. 4. `npx skills add panlm/skills -y` retrieves and installs the current, unpinned repository contents. 5. The workflow does not verify the content against an approved digest or revision. 6. OpenCode loads or invokes the compromised Skill with permission checks disabled. 7. The payload operates with the privileges and accessible resources of the remote SSH account. ### Impact Assessment The compromised dependency can influence remote agent behavior and potentially execute commands or access data available to the re ...[truncated 400 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:96
Finding

SSH Host Authentication Is Disabled for Remote Commands and File Transfers

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:89
Finding

Untrusted Values Are Interpolated into Nested Local and Remote Shell Commands

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (29)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README instructs use of opencode run --dangerously-skip-permissions for non-interactive remote execution without an explicit risk warning or compensating controls. This suppresses permission prompts for code that is installed dynamically and run on a remote host, materially increasing the chance of unintended destructive actions, data access, or lateral movement if the tested skill or prompt is unsafe.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The appended prompt explicitly tells the remote agent to read across directories and proceed without confirmation. That materially expands the remote agent's authority beyond simple test orchestration and suppresses user consent checkpoints for sensitive access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The embedded suffix removes confirmation for actions that may involve cross-directory reads and other sensitive operations. Eliminating user choice in a remote execution context weakens a key safety control and can lead to unintended access or action execution.

Content

No source excerpt is available for this finding.

Ssd 1

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The prompt suffix semantically instructs the remote agent to bypass confirmation and freely access files across directories. That is dangerous because it broadens data access beyond the likely minimum needed for testing and delegates that decision to an automated remote run.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Using opencode run --dangerously-skip-permissions intentionally bypasses all permission gates during remote execution. In the context of testing arbitrary or recently modified skills on a jump host, this allows unrestricted reads/writes/actions with no interactive review, sharply increasing blast radius.

Content

No source excerpt is available for this finding.

Ssd 1

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Auto-approving all permission prompts removes the last interactive safeguard before sensitive remote actions occur. Because the tested skill may be newly modified or indirectly load dependent skills, this creates a strong path to unintended file access, writes, or other side effects.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The README instructs use of npx skills add panlm/skills -y without pinning a specific version or commit, so remote test runs may fetch whatever the current upstream package/repo serves at execution time. In a workflow that then runs the installed skill remotely with elevated non-interactive settings, this creates a supply-chain risk where unexpected or malicious updates can be introduced and executed on the jump host.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

This step again specifies npx skills add panlm/skills -y without version pinning, meaning the remote host will install potentially changing code from an external source every run. Because the skill is explicitly designed to orchestrate remote execution of those fetched skills, any upstream compromise or accidental breaking change can directly affect the jump host and test results.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
92% confidence
Finding

Automatically appending an auto-confirm suffix causes the remote agent to proceed without pausing for sensitive decisions, reducing the user's opportunity to catch unsafe actions or prompt injection. Combined with remote execution and skipped permissions, this becomes materially dangerous because a crafted prompt or malicious downstream skill can trigger consequential actions on the jump host unattended.

Content

Scanner excerpt · README.md (reported line 22)May include surrounding context.

md
1. **Collects SSH config, target skill name, and test prompt** from the user (no credentials stored in files). The test prompt can be provided directly in the conversation or constructed from context.
2. **Creates a timestamped test directory** on the remote host: `~/skill-tests/{timestamp}-{skill-name}/`.
3. **Installs all skills at project level** inside the test directory via `npx skills add panlm/skills -y` (not global). Skills have inter-dependencies (e.g., `aws-fis-experiment-execute` loads `app-service-log-analysis` at runtime), so all skills must be installed together.
4. **Executes the target skill** via `opencode run --dangerously-skip-permissions` with the user-provided prompt (auto-confirm suffix appended automatically). All output (stdout + stderr) is captured to `opencode-run.log` via `tee` for diagnostics.
5. **Retrieves the generated report and execution log** via `scp` into a timestamped local directory `./test-results/{skill-name}/{timestamp}/`. File names are kept identical to the remote originals.
6. **Finds the previous run's report** on the remote host by searching `~/skill-tests/*-{skill-name}/` directories, then retrieves it into the **same local run directory**. Both reports (current + previous) live side-by-side with their original file names for easy comparison.
7. **Compares reports** — checks structure compliance against SKILL.md template, diffs structural changes between runs, and correlates with recent SKILL.md git changes.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents remote execution with opencode run --dangerously-skip-permissions and automatic confirmation, which suppresses interactive safeguards before running user-influenced prompts on a remote host. In this context, bypassing permission prompts materially increases the chance that destructive, over-broad, or prompt-injected actions execute without human review on the jump host.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
89% confidence
Finding

The design explicitly states that auto-confirm directives are appended automatically so the remote agent runs non-interactively, enabling autonomous decision execution without a final human checkpoint. In a remote orchestration skill, that context makes the behavior more dangerous than in a read-only or simulation-only tool because the agent may act on a real jump host and retrieve or modify artifacts without contemporaneous review.

Content

Scanner excerpt · README.md (reported line 34)May include surrounding context.

md
2. **SSH config asked at runtime.** No IP addresses, usernames, or key paths are stored in any committed file. The skill asks the user every time (or the user can provide an SSH config alias).

3. **Test prompt provided by user.** The user provides the test prompt directly in the conversation (or it is constructed from context). Auto-confirm directives are appended automatically so the remote agent runs non-interactively without waiting for user confirmation.

4. **Timestamped directories with skill name.** Remote test directories use `{timestamp}-{skill-name}` format, making it trivial to find the previous run for the same skill and compare reports.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The design decision to install the full repo with npx skills add panlm/skills -y increases exposure because it pulls a broad set of unpinned remote skills, not just the target skill. That expands the attack surface and can introduce compromised transitive behavior or unintended runtime dependencies into the remote environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The workflow overview operationalizes repeated unpinned remote installation via npx skills add panlm/skills -y, turning the supply-chain issue into a core execution path rather than an incidental example. Since this is a remote jump-host testing skill, the context makes the lack of pinning more dangerous because fetched code is immediately available for subsequent execution.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding

The documented workflow invokes npx skills add panlm/skills -y without pinning a specific package/revision, so the remote host will fetch whatever current version resolves at execution time. That creates a supply-chain and reproducibility risk: a compromised upstream package, unexpected update, or tag movement could change what gets installed and then exercised on the jump host.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding

This line repeats the same unpinned npx skills add installation pattern, meaning the remote test environment depends on mutable upstream content. In a workflow that executes installed code remotely, unpinned installs materially increase the chance of unauthorized code or behavioral drift being introduced.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The workflow explicitly pulls back remote execution logs and generated reports to the local machine but does not warn that these artifacts may contain secrets, host details, API outputs, or other sensitive data. In a jump-host testing context, silently copying and co-locating such files locally broadens data exposure and retention beyond the remote environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding

The design section again prescribes installing all skills via an unversioned npx skills add panlm/skills -y, which means every test run may execute different code depending on upstream state. Because this occurs on a remote host and precedes later skill execution, the exposure is more significant than a documentation-only example.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding

The workflow overview operationalizes the same unpinned install step, so the risk is not hypothetical: it is part of the intended execution path. Mutable remote dependency installation can enable supply-chain compromise or simply invalidate comparisons by changing dependencies between runs.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The security rules state that the skill does not modify remote files, but the documented behavior explicitly creates directories, installs skills, and writes logs on the remote host. This contradiction can mislead operators about the write scope of the skill, causing use on systems where such modifications are disallowed or more sensitive than assumed.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

该 markdown 文件适用 SQP-1。使用示例中的触发短语如“远程测试 … skill”“到跳板机上验证 … 更新效果”属于自然语言描述,未说明是否为精确触发词、适用上下文或排除条件,容易与普通讨论测试工作的表达重叠。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description does not clearly warn that prompts, execution output, reports, and logs will be transmitted to a remote host and then copied back locally. That omission creates a meaningful privacy and data-handling risk, especially if prompts or logs contain secrets, customer data, or operational details.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file mandates that the skill detect the user's conversation language and always use that same language for all output. This is a natural-language policy constraint applied automatically, with no option for the user to choose a different language or opt in to the behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The workflow installs remote tooling via npx skills add panlm/skills -y without pinning a version or immutable reference. That makes the remote test behavior depend on whatever package/repo state is current at execution time, creating supply-chain and reproducibility risk if the upstream artifact changes or is compromised.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

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.

Content

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

dot
digraph test_flow {
    "Collect SSH config\n+ skill name + prompt" [shape=box];
    "SSH: create test dir" [shape=box];
    "SSH: install skills\n(project level in test dir)" [shape=box];
    "SSH: opencode run\n(output to log)" [shape=box];
    "SCP: retrieve report + log" [shape=box];

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill's stated safety boundary is internally inconsistent: it claims remote modification is limited, but its own workflow installs skills in the remote test directory. Misstated safety guarantees can mislead users and reviewers about actual remote side effects and trust assumptions.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.