Back to skill

Security audit

Workflow Orchestrator Free

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with workflow automation, but it asks for broad shell execution and includes an unsafe shared temporary lock-file pattern that users should review before installing.

Install only if you are comfortable with the agent creating and running local shell workflows. Review generated run.sh files before execution, approve any real API endpoints, avoid putting secrets in workflow data or logs, and replace the documented /tmp lock-file pattern with a private per-user lock directory.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:85
Finding

Predictable Lock File in Shared Temporary Directory Allows Symlink-Based File Truncation

Content
View full analysis
"$LOCKFILE" flock -n 200 || { echo "另一个实例正在运行"; exit 0; } ``` The same pattern is recommended again at lines 164–166: ```bash LOCKFILE="/tmp/workflow-${NAME}.lock" exec 200>"$LOCKFILE" flock -n 200 || { echo "另一个实例正在运行"; exit 0; } ``` ### Technical Analysis The documented locking pattern creates or opens a predictable file directly under the globally writable `/tmp` directory. The shell redirection: ```bash exec 200>"$LOCKFILE" ``` opens the path with truncation before `flock` attempts to acquire a lock. Standard shell redirection follows symbolic links. Consequently, another local user may pre-create the predictable lock-file path as a symbolic link to a file writable by the account running the workflow. When the workflow starts, the redirection follows that symbolic link and truncates the linked target. The subsequent `flock` operation occurs too late to prevent the truncation. The fixed `workflow-my-first-flow.lock` name is directly predictable. The variable form is also predictable when the workflow name is known or can be inferred. This is a time-of-check/time-of-use and unsafe temporary-file issue rather than a defect in `flock` itself. ### Attack Path 1. A local attacker identifies or predicts the workflow name. 2. The attacker creates the expected lock path as a symbolic link, for example: ```bash ln -s /path/to/agent-writable/file /tmp/workflow-my-first-flow.lock ``` 3. The user or Agent executes the workflow according to the Skill instructions. 4. The shell evaluates `exec 200>"$LOCKFILE"`. 5. The redirection follows the attacker-controlled symbolic link and truncates the target file. 6. `flock` is invoked only after the destructive file-open ope ...[truncated 834 chars]
Remediation
View remediation
&2 exit 1 ;; esac ``` 4. **Open the lock only inside the protected directory:** ```bash LOCKFILE="$LOCKDIR/workflow-$NAME.lock" exec 200>"$LOCKFILE" flock -n 200 || { echo "Another instance is running" >&2 exit 0 } ``` 5. **For stronger hardening, prevent symbolic-link following explicitly.** Use a small helper that opens the file with `O_NOFOLLOW`, or use an atomic `mkdir`-based locking design within the private directory. 6. **Document cleanup and ownership checks.** Before using an existing lock directory, verify that it is owned by the current user and is not writable by group members or other users. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill persistently writes node outputs, state, and logs to disk and demonstrates shell plus HTTP operations, but it lacks a prominent warning that sensitive data may be stored locally and transmitted externally. In this context, that omission matters because workflow data can easily include API responses, tokens, filenames, or business data that remain on disk or are sent over the network without the user appreciating the risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The skill explicitly performs outbound HTTP requests with curl and persists the responses to disk, which creates a real data-transmission surface. Even though the example uses a placeholder domain, the skill context encourages replacing it with real APIs, so users may exfiltrate local or workflow-derived data to external services or pull untrusted content into later processing steps without clear trust boundaries.

Content

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

md
flock -n 200 || { echo "另一个实例正在运行"; exit 0; }

# 节点1:获取数据
curl -s "https://api.example.com/data" > data/01-fetch.json

# 节点2:过滤数据
jq '[.[] | select(.status=="active")]' data/01-fetch.json > data/02-filter.json

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger scope is excessively broad and includes generic productivity and automation terms, which can cause the agent to invoke this skill in contexts the user did not specifically intend. Because the skill is allowed to use both shell execution and network access, overbroad activation increases the chance of unintended filesystem changes, persistence, or outbound requests.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

L283 明确写“并行执行…需升级专业版”,但该技能在 L003、L022、L161-L169 持续宣称并实现了并发/锁控制能力。虽然“并发锁控制”与“DAG并行执行”并不完全等同,但文档未清晰区分两者,导致读者对免费版实际支持范围产生相互矛盾的理解。

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

L320 写明“无需额外API Key”,但全文示例大量依赖 curl 调用外部 API(如 L090、L125、L187、L248-L250),且 L321 又建议将 API 凭证存储在 Keychain 或环境变量中。对于会访问受保护 API 的实际工作流,这种说法与代码/示例使用前提并不一致,容易让使用者误解为整体无需凭证。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

L340 明确强调“完全中文化表达”,全文也仅提供中文说明,未说明是否支持其他语言或允许按用户偏好切换。根据语言/locale 政策,若技能默认强制单一语言且没有用户选择或合理地域限定,属于自然语言层面的策略风险。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.