Back to skill

Security audit

Gstack Openclaw Skills

Security checks for vulnerabilities and agentic risk

Overview

This is a real development workflow skill pack, but it can automatically change code, install dependencies, push to remotes, create PRs, and deploy without clear final approval gates.

Install only if you are comfortable with an agent performing repository mutations and release work. Use it with least-privilege repo credentials, require explicit confirmation before dependency installs, commits, pushes, PR creation, or production deployment, avoid broad natural-language release triggers, and do not use the workflow state helper with untrusted workflow IDs until the path validation issue is fixed.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
gstack-skills/scripts/state_manager.py:72
Finding

Path Traversal in Workflow State Operations Allows Arbitrary JSON File Access

Content
View full analysis
Optional[Dict]: workflow_file = self.state_dir / f"{workflow_id}.json" if not workflow_file.exists(): return None with open(workflow_file, "r") as f: return json.load(f) ``` ```python def save_workflow(self, workflow_id: str, state: Dict) -> bool: workflow_file = self.state_dir / f"{workflow_id}.json" state["updated_at"] = datetime.now().isoformat() try: with open(workflow_file, "w") as f: json.dump(state, f, indent=2) return True except Exception as e: print(f"Error saving workflow: {e}") return False ``` ```python def delete_workflow(self, workflow_id: str) -> bool: workflow_file = self.state_dir / f"{workflow_id}.json" if workflow_file.exists(): workflow_file.unlink() return True return False ``` The command-line interface passes user-controlled values directly into these methods: ```python workflow_id = sys.argv[2] ``` ### Technical Analysis The workflow identifier is concatenated into a filesystem path without validation or a containment check: ```python self.state_dir / f"{workflow_id}.json" ``` Although legitimate workflow identifiers are generated as eight hexadecimal characters, externally supplied identifiers are not restricted to that format. Path components such as `..` are therefore interpreted by the operating system rather than treated as an opaque workflow ID. The default state directory is `.workbuddy/gstack-state`. An identifier such as `../../target` produces an effective path similar to: ```text .workbuddy/gstack-state/../../target.json ``` This ...[truncated 2145 chars]
Remediation
View remediation
None: if not WORKFLOW_ID_PATTERN.fullmatch(workflow_id): raise ValueError("Invalid workflow ID") ``` 2. Validate the identifier before every load, save, or delete operation. 3. Resolve the target path and verify that it remains inside the canonical state directory: ```python def workflow_path(self, workflow_id: str) -> Path: validate_workflow_id(workflow_id) base = self.state_dir.resolve() target = (base / f"{workflow_id}.json").resolve() if target.parent != base: raise ValueError("Workflow path escapes the state directory") return target ``` 4. Use the centralized `workflow_path` helper in all filesystem operations rather than reconstructing paths independently. 5. Reject absolute paths, path separators, `..`, unexpected Unicode separators, and identifiers outside the generated format. 6. Protect against symlink races where the threat model includes untrusted local users. Consider opening files relative to a trusted directory descriptor with no-follow behavior. 7. Write state atomically using a temporary file in the same trusted directory followed by an atomic replacement. 8. Apply restrictive permissions to the state directory and files, such as user-only access where supported. 9. Add regression tests for traversal attempts including `../`, nested traversal, absolute-path-like values, symlinks, malformed Unicode, and valid eight-character hexadecimal IDs. ]]>

T08 · Insecure Dependencies

Warning
Location
ship/SKILL.md:42
Finding

Fully Automated Release Workflow Performs Dependency Installation and Remote Git Writes Without a Final Approval Gate

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (112)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CONVERSATION_GUIDE.md (reported line 327)May include surrounding context.

md
POST   /api/posts/:id/comments       # Create comment
GET    /api/posts/:id/comments       # List comments
PUT    /api/comments/:id             # Update comment
DELETE /api/comments/:id             # Delete comment
POST   /api/comments/:id/vote       # Vote on comment

TECHNOLOGY STACK:

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · EXAMPLES.md (reported line 90)May include surrounding context.

md
POST   /api/posts/:id/comments       # Create comment
GET    /api/posts/:id/comments       # List comments
PUT    /api/comments/:id             # Update comment
DELETE /api/comments/:id             # Delete comment
POST   /api/comments/:id/vote       # Vote on comment

TECHNOLOGY STACK:

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The /ship command is described as automating the entire deployment workflow and even 'Deploys to production automatically' with no explicit warning about production-impacting actions. In a skill for AI assistants, this increases the chance of accidental release actions, unauthorized changes, or execution in the wrong repository/environment if a user invokes the command casually.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The description presents the skill as a full adapted gstack package with 15 specialized tools spanning the development lifecycle. However, the supplied code chunk only routes user input to named skills using command prefixes and regex keyword matching, then checks for SKILL.md file existence and emits a JSON result. This is infrastructure for dispatching to tools, not the tools themselves. While routing could be a supporting component of a larger skill pack, this specific code chunk’s primary purpose is materially narrower and different from the declared description, so it should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The description presents a broad multi-tool AI assistant skill suite for end-to-end development workflows, but the supplied code only implements one infrastructural component: local workflow state persistence and management. While this could support such a suite, the chunk itself does not provide the claimed broad set of development tools or full lifecycle functionality. The filesystem access is also a concrete capability not reflected in the declared permissions list, though local state storage may be a supporting detail. Overall, the code’s actual primary purpose is materially narrower than the declared purpose.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The usage guide documents keyword-trigger activation using broad everyday phrases like "review my code," "deploy to production," and "help me think through this problem." In an assistant platform that auto-routes based on natural language, these generic phrases can cause unintended invocation of powerful skills such as review, QA, or deployment, potentially leading to unreviewed code changes or production-affecting actions.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
94% confidence
Finding

文档公开提供 /ship --skip-tests,等于向高风险部署命令暴露了绕过关键安全/质量门禁的参数。即使标注了“不推荐”,在自动化代理或匆忙用户场景下,该选项仍可能被使用,从而把未经验证的代码直接部署到环境中,增加故障、安全缺陷或供应链问题进入生产的风险。

Content

Scanner excerpt · USAGE.zh-CN.md (reported line 246)May include surrounding context.

text
/ship --staging        # 部署到测试环境
/ship --dry-run        # 模拟部署,不实际执行
/ship --skip-tests     # 跳过测试(不推荐)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · install.sh (reported line 86)May include surrounding context.

sh
# Remove existing installation if present
    if [ -d "$SKILL_DIR/gstack-skills" ]; then
        print_warning "Removing existing gstack-skills installation"
        rm -rf "$SKILL_DIR/gstack-skills"
    fi
    
    # Copy skills

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

技能描述明确声明会自动执行合并基础分支、运行测试、版本管理、更新日志、提交、推送和创建 PR,但没有配套说明任何强制确认、审批边界或 dry-run 模式。这使用户可能在未充分感知副作用的情况下触发对代码库和远端仓库的高影响写操作。

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

触发短语包含“deploy”“create a PR”“merge and push”等常见自然语言请求,且技能声明会在触发后进入自动化发布流程,容易把普通讨论或低意图请求误判为授权执行高影响操作。由于后续行为包含合并、推送和创建 PR,这种误触发会直接造成代码和仓库状态变更。

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

“用户说 /ship 后自动执行”表明单一触发即可启动完整发布链路,而该链路包含推送远程、更新文件和创建 PR 等不可逆或难回滚操作,却未要求额外确认。这种设计显著放大了误触发、提示注入或上下文误解带来的实际破坏面。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Line L46 states '使用中文编写文档' ('use Chinese when writing documentation') as a blanket requirement. This is a natural-language locale policy constraint and the file does not provide user choice, opt-in, or a documented region-specific justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The guide explicitly normalizes automatic code changes during /review without requiring prior confirmation, which can cause the agent to modify source files unexpectedly. In an agent platform, silent write actions are risky because a user asking for analysis may unintentionally trigger state-changing edits to code or tests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The /ship workflow is presented as automatically merging, committing, pushing, and creating PRs with no upfront warning or confirmation. These are high-impact external side effects affecting git history and remote repositories, so encouraging them as a one-shot conversational action increases the chance of accidental deployment or unauthorized release actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The investigation example shows the agent applying a configuration change automatically after diagnosis, without warning that project files will be edited. This creates a risky expectation that analysis commands may mutate configuration, which can introduce outages, conceal root-cause uncertainty, or make unreviewed infrastructure changes.

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 · CONVERSATION_GUIDE.md (reported line 363)May include surrounding context.

md
✅ Added rate limiting

Status: ⚠️ DONE_WITH_CONCERNS
Remaining: Write tests

User: /qa comments feature

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The guide claims broad free-form workflow descriptions such as 'Review my code, test it, and ship if ready' will all work, implying the agent may chain multiple sensitive actions from ambiguous conversational input. This is dangerous because it weakens intent verification and can escalate from analysis to testing and release without clear boundaries.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language activation guidance states that broad phrases like 'review my code' or 'deploy this to production' work the same as command invocations. Overly broad triggering increases the risk that ordinary conversation is interpreted as authorization for sensitive actions, especially deployment-related ones.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples show the AI automatically applying code fixes after review or testing, but the document does not clearly warn users that their code may be modified. In a coding agent setting, silent or assumed write behavior can lead to unintended source changes, broken builds, or unsafe fixes being applied without adequate review.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The guide provides production deployment and emergency hotfix workflows as if they are routine conversational actions, but it does not clearly warn that these operations can change live systems and may be irreversible. In an agent skill context, normalizing '/ship' and patch release flows without confirmation gates increases the risk of accidental or premature production changes triggered by vague user requests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The example shows an automated /ship flow that performs repository-changing actions like merging, committing, pushing to remote, and creating a PR without explicitly warning about those side effects or requiring a clear confirmation step. In an agent skill context, examples strongly shape expected behavior, so this can normalize unsafe execution of destructive or externally visible actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation promotes automated installation and deployment flows that clone repositories, copy files into skill directories, and perform release actions, but it does not clearly require explicit user confirmation, preview of actions, or warn that these steps modify the local system and possibly production environments. In an agent-skill context, users may treat conversational commands as low-risk, so presenting these operations as frictionless increases the chance of unintended system changes or unsafe deployment execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The examples normalize chaining /review → /qa → /ship into a single automatic workflow without cautioning that the final step may publish code or trigger destructive release operations. In a conversational agent setting, compressing validation and deployment into one command materially raises the risk of accidental release, insufficient human review, and execution against the wrong branch or environment.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

This line explicitly states that the AI will automatically execute the complete workflow, indicating autonomous action rather than advisory behavior. Given the surrounding context includes review, QA, and deployment operations, unrestricted autonomy can lead to unauthorized code changes or publication actions if guardrails are absent.

Content

Scanner excerpt · IMPLEMENTATION.md (reported line 19)May include surrounding context.

md
**Achievement**: ✅ **GOAL FULLY ACHIEVED**

Users can now use commands like `/ship`, `/review`, `/qa` directly in OpenClaw/WorkBuddy, and the AI will automatically execute the complete workflow.

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document advertises automated bug fixing and fix application without clearly warning that source files may be altered automatically. In a skill system, this can mislead users about the degree of autonomy and create integrity risks when changes are applied silently or with insufficient human review.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.