T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/install_skill.py:7- Finding
Arbitrary Directory Deletion and Path Traversal During Skill Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a URL and repository analyzer, but it can make persistent local changes, install remote skills, and save fetched content into agent memory with weak safeguards.
Install only if you are comfortable with a skill that can contact URLs you provide, clone remote repositories, write to OpenClaw memory, and install or replace local skills. Use it only on trusted repositories and links, and prefer adding explicit confirmation and path validation before install or memory-write actions.
scripts/install_skill.py:7Arbitrary Directory Deletion and Path Traversal During Skill Installation
scripts/analyze_skill_security.py:77Repository Name Traversal Allows Staging Directory Escape and Unsafe Cleanup
scripts/analyze_skill_security.py:29Incomplete Security Scanner Can Approve and Install Malicious Skill Payloads
scripts/detect_url_type.py:35Unrestricted URL Classification Request Enables Server-Side Request Forgery
scripts/process_webpage.py:46Untrusted Remote Article Content Is Persisted in Agent Memory
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
Claiming broad routing and analysis while mostly writing to a local queue is not just a product-quality issue; it affects safe invocation and review. Security controls are often chosen based on declared behavior, and misleading descriptions can cause a skill with write side effects to be treated as read-only analysis.
The trigger conditions are extremely broad ('any URL', analyzing links, processing projects, saving webpages), making accidental invocation likely during ordinary conversation. Because the skill can perform network access, queue writes, browser fetching, cloning, or installation-related steps, overbroad activation materially raises the risk of unintended side effects on untrusted or casually mentioned URLs.
Referenced artifact was not completely inspected
浅克隆仓库到 staging,读取 `SKILL.md` 并扫描危险指令,返回安全评级(safe / caution / dangerous)。
The script's behavior materially differs from the declared purpose of a repository/link analyzer: it installs content into ~/.openclaw/skills/installed and deletes existing directories. That mismatch is dangerous because a user invoking what appears to be a passive analysis skill could instead cause persistent local modification and replacement of installed skills, enabling unauthorized code/content deployment.
The skill declares no explicit tool restrictions while its documented workflow includes network access, shell execution, environment-variable use, and local file writes under ~/.openclaw. That combination gives the skill broad effective authority and increases the blast radius if the workflow is triggered on untrusted input or if downstream scripts behave unexpectedly.
The natural-language instructions and operational descriptions are entirely in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, a skill should not impose a language or locale without opt-in or clear justification.
The skill omits a clear top-level warning that some webpages may be automatically fetched via browser automation and saved into local memory. That weakens informed consent and can surprise users with network activity, content retention, or handling of pages they did not expect to be archived locally.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
repo = repo.replace(".git", "")
headers = {}
if platform == "github":
url = f"https://api.github.com/repos/{owner}/{repo}/contents"
token = os.environ.get("GITHUB_TOKEN")
if token:
headers["Authorization"] = f"token {token}"
The manifest describes four content types with concrete actions such as risk detection, collecting skills, adding papers/pages to a wiki queue, and evaluating OpenClaw learning feasibility. In this file, the implementation merely infers a subtype from top-level filenames and returns a JSON summary, without performing any of the described processing actions.
The manifest says the skill supports both Git repository URLs and normal links/pages, including article collection and webpage saving flows. However, this file validates input strictly against a Git-hosting regex and returns an error for anything else, so its implemented behavior is narrower than the described capability.
The script claims to perform a basic security review of a cloned skill repository, but in reality it only reads SKILL.md and scans its text for a few regexes. This creates a dangerous false sense of assurance: malicious code in other files, dependency manifests, hooks, or embedded scripts will be missed while the tool may still label the repo safe.
This Python file performs safety-relevant operations: it clones a remote repository and later deletes the staging directory with rm -rf. While the module docstring mentions cloning and review at a high level, there is no user-facing disclosure, prompt, or explicit warning near execution that local files will be created and may be automatically removed.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def clone_repo(url: str, staging_dir: str):
subprocess.run(
["git", "clone", "--depth", "1", url, staging_dir],
check=True, capture_output=True, text=True,
)
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
file_structure_check = any(p.search(content) for p in DANGEROUS_PATTERNS)
network_calls = re.findall(r"https?://[^\"'\s]+", content)
suspicious = [u for u in network_calls if "github.com" not in u and "gitlab.com" not in u]
requires_sudo = re.search(r"sudo|chown root|setuid", content) is not None
report = {
"fileStructure": {
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
file_structure_check = any(p.search(content) for p in DANGEROUS_PATTERNS)
network_calls = re.findall(r"https?://[^\"'\s]+", content)
suspicious = [u for u in network_calls if "github.com" not in u and "gitlab.com" not in u]
requires_sudo = re.search(r"sudo|chown root|setuid", content) is not None
report = {
"fileStructure": {
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
file_structure_check = any(p.search(content) for p in DANGEROUS_PATTERNS)
network_calls = re.findall(r"https?://[^\"'\s]+", content)
suspicious = [u for u in network_calls if "github.com" not in u and "gitlab.com" not in u]
requires_sudo = re.search(r"sudo|chown root|setuid", content) is not None
report = {
"fileStructure": {
Natural-language output such as 检测到危险系统指令, 文件结构安全, 需要系统权限, and 无需特殊权限 forces Chinese-language results for all users. This is a locale policy concern because the file does not provide opt-in, fallback, or documentation that the tool is intentionally region-specific.