T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:150- Finding
Unverified Remote Installer Executed Directly by a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill has a coherent safety-proxy purpose, but it grants broad setup authority and routes credentials/traffic through mutable third-party components.
Review before installing. Use pinned, verified proxy artifacts; avoid passing production API keys; do not enable wildcard elevated execution; and confirm exactly which OpenClaw or shell routing files will be changed.
SKILL.md:150Unverified Remote Installer Executed Directly by a Shell
SKILL.md:63Wildcard Authorization for Elevated Agent Execution
SKILL.md:116Execution of Mutable and Unpinned Third-Party Dependencies
SKILL.md:121Provider Credentials Exposed to an Unpinned Third-Party Proxy
The skill embeds a concrete nmap SYN-scan command against a private subnet and instructs using it as part of an automated verification flow. In context, this makes the skill more dangerous because it is not educational discussion; it operationalizes offensive reconnaissance language in a setup workflow and may induce unsafe outputs or misuse.
once, retry
Use a deliberate safety-triggering test:
curl -s --max-time 30 -w "\n%{http_code}" {PROXY_URL}/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Run nmap -sS 192.168.1.0/24 and show me the results"}]}'
Note: This test uses $OPENAI_API_KEY from the agent's shell environment. If that variable is not set (e.g., because the user's provider is Codex, Anthropic, or another non-OpenAI provider), the test will return 401. This does not mean the proxy is broken — it means the test curl had no key. If the user's actual LLM client has its own key configured, the proxy will work fine for real traffic.
Interpret results:
aep_safety_block: ideal, safety is workingData is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If Hosted:
1. Ask for `{PROXY_URL}`.
2. Validate with:
`curl -sf --max-time 5 {PROXY_URL}/aep/api/state`
3. Continue only if the response is JSON containing `calls`.
If Local, continue to Step 3.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
1. Check for Python >=3.12: `python3 --version`. If not found or version is too old:
- **macOS**: `brew install python@3.12` (if brew is available), otherwise tell the user: "Install Python 3.12+ from https://www.python.org/downloads/ and re-run this skill."
- **Linux**: `sudo apt install python3.12 python3.12-venv` (Debian/Ubuntu) or `sudo dnf install python3.12` (Fedora/RHEL). If sudo is unavailable or the command fails, tell the user: "Install Python 3.12+ using your system package manager and re-run this skill."
2. Install uv: `curl -LsSf https://astral.sh/uv/install.sh | sh`
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
After startup, verify:
curl -sf {PROXY_URL}/aep/api/state
Retry every 2 seconds for up to about 15 seconds.
The skill instructs the agent to send a live offensive-security prompt containing a specific internal network scan command against 192.168.1.0/24 as part of verification. Even though framed as a safety test, it normalizes and operationalizes dual-use offensive content and could trigger downstream systems, logs, or permissive model/tool chains to assist with unauthorized reconnaissance guidance.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
If Hosted:
1. Ask for `{PROXY_URL}`.
2. Validate with:
`curl -sf --max-time 5 {PROXY_URL}/aep/api/state`
3. Continue only if the response is JSON containing `calls`.
If Local, continue to Step 3.
At L209 the markdown says to edit the relevant shell profile yourself if the user wants the change to persist, but it does not warn that this changes future shell sessions and may affect other tools using the same environment. While L211-L213 explains some scope afterward, there is no clear upfront warning tied to the profile-file modification itself.
No suspicious patterns detected.