T09 · Insecure Skill Coding Practices
- Location
SKILL.md:42- Finding
Automatic Approval Enables Unreviewed Execution of LLM-Generated Code
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
ResearchClaw is purpose-aligned as an autonomous research pipeline, but it recommends unattended approvals while supporting execution of generated code locally or over SSH.
Install only if you are comfortable with an autonomous research tool that may create files and run generated experiment code. Keep manual gate review enabled, prefer simulated mode unless you have a real sandbox, use environment variables for API keys, and use a restricted disposable account and workspace for any SSH or subprocess execution.
SKILL.md:42Automatic Approval Enables Unreviewed Execution of LLM-Generated Code
SKILL.md:35API Keys May Be Stored in Plaintext Configuration
The description advertises a fully autonomous pipeline with 'no babysitting required' but does not warn users that the workflow may generate and execute code, write artifacts to disk, and support SSH-based remote execution. This creates a consent and safety gap where users may invoke the skill without understanding that it can perform risky actions beyond simple text generation.
The skill explicitly supports executing generated code locally via subprocess and remotely over SSH, creating a classic untrusted-output-to-execution path. Generated experiment code is influenced by prompts, model behavior, and possibly external literature inputs, so executing it without strong validation or isolation can lead to arbitrary command execution, data exfiltration, or compromise of local/remote environments.
| Mode | Description | Config |
|------|-------------|--------|
| `simulated` | LLM generates synthetic results (no code execution) | `experiment.mode: simulated` |
| `sandbox` | Execute generated code locally via subprocess | `experiment.mode: sandbox` |
| `ssh_remote` | Execute on remote GPU server via SSH | `experiment.mode: ssh_remote` |
### Troubleshooting
The trigger conditions are broad enough to activate this highly privileged skill for ordinary requests like 'research' or 'write a paper,' increasing the chance the agent invokes an autonomous pipeline unexpectedly. In this skill, that risk is amplified because activation can lead to file writes, generated code execution, and even remote SSH execution paths.
Using --auto-approve directly in the primary example operationalizes unattended progression through safety checkpoints. Because this skill is explicitly autonomous and execution-capable, the context makes this more dangerous than in a read-only analysis tool.
Option A: CLI (recommended)
researchclaw run --topic "Your research topic here" --auto-approve
Options:
Using --auto-approve directly in the primary example operationalizes unattended progression through safety checkpoints. Because this skill is explicitly autonomous and execution-capable, the context makes this more dangerous than in a read-only analysis tool.
Option A: CLI (recommended)
researchclaw run --topic "Your research topic here" --auto-approve
Options:
The skill recommends --auto-approve and describes bypassing gates 'without human input' without a strong warning about the purpose of those review gates. That weakens a built-in safety control intended to pause risky autonomous actions, especially in a pipeline that can generate and execute code.
The option description for --auto-approve removes ambiguity that human review can be bypassed, which is a meaningful control-loss issue in this context. Since the pipeline may proceed to code execution and remote operations, the context increases the severity of autonomous approval.
- `--config` / `-c`: Config file path (default: `config.yaml`)
- `--output` / `-o`: Output directory (default: `artifacts/rc-YYYYMMDD-HHMMSS-HASH/`)
- `--from-stage`: Resume from a specific stage (e.g., `PAPER_OUTLINE`)
- `--auto-approve`: Auto-approve gate stages (5, 9, 20) without human input
**Option B: Python API**
The option description for --auto-approve removes ambiguity that human review can be bypassed, which is a meaningful control-loss issue in this context. Since the pipeline may proceed to code execution and remote operations, the context increases the severity of autonomous approval.
- `--config` / `-c`: Config file path (default: `config.yaml`)
- `--output` / `-o`: Output directory (default: `artifacts/rc-YYYYMMDD-HHMMSS-HASH/`)
- `--from-stage`: Resume from a specific stage (e.g., `PAPER_OUTLINE`)
- `--auto-approve`: Auto-approve gate stages (5, 9, 20) without human input
**Option B: Python API**
The option description for --auto-approve removes ambiguity that human review can be bypassed, which is a meaningful control-loss issue in this context. Since the pipeline may proceed to code execution and remote operations, the context increases the severity of autonomous approval.
- `--config` / `-c`: Config file path (default: `config.yaml`)
- `--output` / `-o`: Output directory (default: `artifacts/rc-YYYYMMDD-HHMMSS-HASH/`)
- `--from-stage`: Resume from a specific stage (e.g., `PAPER_OUTLINE`)
- `--auto-approve`: Auto-approve gate stages (5, 9, 20) without human input
**Option B: Python API**
The Python API example sets auto_approve_gates=True, encouraging integrators to embed unattended approval into their own automation. This spreads the unsafe default into downstream usage where users may not realize safeguards have been disabled.
run_id="research-001",
config=config,
adapters=AdapterBundle(),
auto_approve_gates=True,
)
# Check results
Suggesting --auto-approve in troubleshooting lowers the barrier to disabling safeguards after a rejection event, which is exactly when caution is most needed. In this skill's context, a rejected gate may be the last stop before unsafe code or remote execution occurs.
- **Config validation error**: Run `researchclaw validate --config config.yaml`
- **LLM connection failure**: Check `llm.base_url` and API key
- **Sandbox execution failure**: Verify `experiment.sandbox.python_path` exists and has numpy installed
- **Gate rejection**: Use `--auto-approve` or manually approve at stages 5, 9, 20
## Tools Required
Suggesting --auto-approve in troubleshooting lowers the barrier to disabling safeguards after a rejection event, which is exactly when caution is most needed. In this skill's context, a rejected gate may be the last stop before unsafe code or remote execution occurs.
- **Config validation error**: Run `researchclaw validate --config config.yaml`
- **LLM connection failure**: Check `llm.base_url` and API key
- **Sandbox execution failure**: Verify `experiment.sandbox.python_path` exists and has numpy installed
- **Gate rejection**: Use `--auto-approve` or manually approve at stages 5, 9, 20
## Tools Required