Back to skill

Security audit

React Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real ReAct orchestration library, but it includes host-level code and file execution that is described too safely and lacks enforced approvals, so it should be reviewed before installation.

Install only if you are prepared to treat this as a privileged code-execution and tool-orchestration framework. Before using it with real data, disable or isolate Code Mode, remove PowerShell bypass, restrict file tools to an approved workspace, avoid inheriting secrets into child processes, and enforce HITL centrally before every sensitive tool call.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
src/code-mode.js:178
Finding

Code Mode Executes Arbitrary Code with Host Privileges Despite Being Described as a Sandbox

Content
View full analysis
{ try { const result = await (async () => { ${code} })(); console.log('__RESULT_START__' + JSON.stringify(result) + '__RESULT_END__'); } catch (error) { console.error('__ERROR_START__' + error.message + '__ERROR_END__'); process.exit(1); } })(); `.trim(); fs.writeFileSync(tmpFile, wrappedCode); const child = spawn('node', [tmpFile], { stdio: ['pipe', 'pipe', 'pipe'], env: { ...process.env }, timeout, }); ``` The PowerShell path provides equivalent unrestricted execution and explicitly bypasses execution policy: ```javascript const child = spawn('powershell.exe', [ '-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', tmpFile ], { stdio: ['pipe', 'pipe', 'pipe'], timeout, }); ``` ### Technical Analysis `CodeModeConverter.execute()` accepts a raw code string, embeds it into a temporary script, and runs it using the host's normal Node.js or PowerShell interpreter. This is process separation, not security isolation. The child process retains the privileges of the parent process. The JavaScript execution path explicitly copies the complete parent environment through `env: { ...process.env }`, exposing API keys, ...[truncated 2275 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
src/code-mode.js:97
Finding

Built-In File Tools Permit Filesystem Access Outside the Intended Workspace

Content
View full analysis
` const fs = require('fs'); const path = require('path'); const filePath = path.resolve(${this._toJson(params.path)}); const content = fs.readFileSync(filePath, 'utf8'); return content; `.trim(), powershell: (params) => ` Get-Content -Path ${this._toJson(params.path)} -Raw `.trim(), }); this.registerTemplate('file-write', { javascript: (params) => ` const fs = require('fs'); const path = require('path'); const filePath = path.resolve(${this._toJson(params.path)}); fs.writeFileSync(filePath, ${this._toJson(params.content)}); return 'File written successfully'; `.trim(), powershell: (params) => ` ${this._toJson(params.content)} | Set-Content -Path ${this._toJson(params.path)} 'File written successfully' `.trim(), }); this.registerTemplate('directory-list', { javascript: (params) => ` const fs = require('fs'); const path = require('path'); const dirPath = path.resolve(${this._toJson(params.path || '.')}); const files = fs.readdirSync(dirPath, { withFileTypes: true }); return files.map(f => ({ name: f.name, isDirectory: f.isDirectory() })); `.trim(), powershell: (params) => ` Get-ChildItem -Path ${this._toJson(params.path || '.')} | Select-Object Name, @{Name='IsDirectory';Expression={$_.PSIsContainer}} | ConvertTo-Json `.trim(), }); ``` ### Technical Analysis The built-in file templates accept caller-controlled paths and resolve them without applying an authorized workspace root. `path.resolve()` normalizes a path but does not make it safe. Absolute paths and traversal sequences can resolve to any location available to the process. There are no checks for: - Whether the resolved path remains inside an approved project directory. - Whether a path traverses through a symbolic lin ...[truncated 1616 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
src/system1.js:72
Finding

Human Approval Controls Are Not Enforced in Tool Execution Paths

Content
View full analysis
Remediation
View remediation

T01 · Skill Instruction Hijacking

Warning
Location
src/llm-integration.js:132
Finding

Untrusted Queries and Tool Results Are Interpolated into Instruction-Bearing LLM Prompts

Content
View full analysis
`- **${t.name}**: ${t.description || 'No description'} (Keywords: ${t.keywords?.join(', ') || 'None'})` ).join('\n'); const historyContext = history.length > 0 ? ` ${history.map((h, i) => `[Step ${i + 1}] Thought: ${h.thought} Action: ${h.action} Observation: ${typeof h.observation === 'string' ? h.observation.substring(0, 200) : JSON.stringify(h.observation)}` ).join('\n\n')} ` : ''; return `You are an intelligent AI assistant using the ReAct framework. User query: ${query} ${context.additionalContext ? `\nAdditional context: ${context.additionalContext}` : ''} ${toolList} ${historyContext} ${examples} ${guardrails} Output must be pure JSON and contain no other text. `; } ``` The final-answer prompt includes complete observations without length restriction: ```javascript buildSynthesizePrompt(query, history, reflections = []) { const historyText = history.map((h, i) => `**Step ${i + 1}** (${h.action}): ${typeof h.observation === 'string' ? h.observation : JSON.stringify(h.observation)}` ).join('\n'); return `Based on the following execution history, synthesize a clear and complete final answer. ${query} ${historyText} ${reflectionsText} 1. Answer the user directly. 2. Organize multiple results clearly. 3. Briefly mention execution errors where relevant. 4. Keep the answer concise but informative. 5. Provide follow-up suggestions whe ...[truncated 2851 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (64)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The code claims to execute in a sandbox, but the JavaScript and PowerShell are run as normal host child processes with inherited environment variables and unrestricted filesystem/network/process access. If untrusted tool templates or parameters can influence generated code, this becomes arbitrary code execution on the host under a misleading safety model.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This markdown file includes capability examples for file reads/writes/deletes and later shows remote agent/tool execution, but it does not warn users that these behaviors could modify data, invoke tools remotely, or affect system integrity. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect user data, privacy, or the system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The WebSocket and HTTP A2A examples transmit agent messages, task parameters, and results with no meaningful authentication, confidentiality, origin verification, authorization enforcement, or privacy guidance. If implemented as shown, unauthorized agents could register, spoof identities, intercept or inject tasks, and cause sensitive prompts, data, or tool instructions to be disclosed or acted upon across trust boundaries.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The document explicitly describes a Code Mode that executes JavaScript and PowerShell in subprocesses and includes 'ExecutionPolicy Bypass' for PowerShell. That meaningfully expands execution capability and weakens platform safeguards, yet the document does not define strict trust boundaries, input validation, allowlisting, or a narrowly justified use case. In an agent skill context, this creates a realistic path to arbitrary code execution or policy circumvention if LLM-generated or user-influenced code reaches this layer.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The report labels execution as 'sandboxed', but the examples show arbitrary module loading and subprocess-based execution, which is not a strong sandbox by itself. This mismatch can cause operators or downstream developers to overtrust the mechanism and deploy it in sensitive environments without adequate isolation, increasing the chance of code execution abuse or host access.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

The HITL design includes an 'autoApprove' mechanism that allows some tool invocations to bypass explicit human review. In an agent setting, classifications of 'safe' tools often drift over time, and seemingly low-risk tools like file-read can still expose secrets or support chaining attacks when driven by untrusted prompts or model output.

Content

Scanner excerpt · IMPLEMENTATION_PROGRESS.md (reported line 308)May include surrounding context.

md
2. **核心功能**
   - 工具级审批配置(requireApproval)
   - 白名单自动批准(autoApprove)
   - 自定义确认回调(onApprovalRequired)
   - 超时回调(onTimeout)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
86% confidence
Finding

The concrete example auto-approves 'file-read' and 'calculator', normalizing bypass of human review for at least one data-accessing tool. In practice, auto-approving file reads can leak credentials, keys, prompts, or proprietary data if an attacker influences the agent to request sensitive paths.

Content

Scanner excerpt · IMPLEMENTATION_PROGRESS.md (reported line 351)May include surrounding context.

md
const hitl = new HITLManager({
  enabled: true,
  requireApproval: ['file-write', 'execute-command', 'file-delete'],
  autoApprove: ['file-read', 'calculator'],
  timeout: 300000, // 5 分钟
  verbose: true,

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file is natural-language documentation, and its content consistently forces a single language/locale throughout the entire skill summary. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · PHASE1-SUMMARY.md (reported line 233)May include surrounding context.

md
}
    
    // 传统方式
    const res = await fetch('https://api.tavily.com/search', {
      method: 'POST',
      body: JSON.stringify({ query: params.query, limit: 5 })
    });

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The document states that critical operations must go through human approval, but the example workflow instantiates HITL separately and then performs code execution and network/tool actions without showing enforcement of the approval gate in the execution path. In an agent skill, this creates a misleading security posture: integrators may believe dangerous actions are protected when they are not, enabling unreviewed execution of sensitive operations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The network search example sends user queries and an API key to an external service with no privacy, consent, or data-handling warning. In agent workflows, this can lead to inadvertent disclosure of sensitive prompts, internal data, or secrets through outbound requests.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The reference to the Tavily API endpoint confirms reliance on a third-party external service. Even though this is documentation, it encourages patterns where agent-collected information may be transmitted off-platform without clear safeguards.

Content

Scanner excerpt · QUICK-REFERENCE.md (reported line 82)May include surrounding context.

md
// Tavily 搜索
orchestrator.registerTool('tavily-search',
  async (params) => {
    const res = await fetch('https://api.tavily.com/search', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The reference to the Tavily API endpoint confirms reliance on a third-party external service. Even though this is documentation, it encourages patterns where agent-collected information may be transmitted off-platform without clear safeguards.

Content

Scanner excerpt · QUICK-REFERENCE.md (reported line 82)May include surrounding context.

md
// Tavily 搜索
orchestrator.registerTool('tavily-search',
  async (params) => {
    const res = await fetch('https://api.tavily.com/search', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file-write example demonstrates direct file modification without any warning about destructive effects, path restrictions, or approval requirements. In an agent setting, this normalizes unsafe write behavior and can lead users to register tools that overwrite files, modify configs, or plant persistence artifacts.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The quick reference explicitly documents a Code Mode that converts requests into JavaScript and executes the generated code. In an agent skill context, exposing arbitrary code execution without clear sandboxing, scope limits, or trust boundaries is dangerous because prompt-controlled input could be turned into executable code with filesystem, network, or environment access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The skill description, headings, comments, and user-facing examples are overwhelmingly in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking context. This can violate language/locale policy when a skill imposes a language without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README encourages integrating a networked search tool that sends user queries to an external provider, but it does not warn that task content may leave the local environment. In an agent skill context, prompts often contain sensitive business, personal, or internal data, so omission of this disclosure can lead to unintended data exfiltration via normal use rather than an overt exploit.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The weather tool example performs a direct HTTP request using user-provided input in the URL, but the documentation does not disclose that the supplied city value is transmitted to an external endpoint. In an orchestration skill, users may assume tools are local unless told otherwise, making this a privacy and data-handling weakness that could expose sensitive or regulated data if repurposed for other parameters.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill explicitly documents联网搜索 and execution-history export, which can transmit user queries, retrieved content, and internal reasoning/history to external services or files without any warning, redaction guidance, or consent flow. In an agent/orchestrator context, this is materially risky because users may route sensitive prompts, local knowledge-base results, or tool outputs through these features and unintentionally expose confidential data.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide documents a Code Mode that converts tool calls into JavaScript/PowerShell and executes the resulting code in a 'sandbox', including custom templates and batched code. For an orchestration skill, this materially expands capability into arbitrary code execution without documenting strong isolation boundaries, allowed operations, or trust requirements for generated/custom code, making prompt- or tool-influenced RCE pathways plausible.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The examples show executing generated/custom code via converter.execute without an explicit warning that such code may be untrusted or model-influenced. This can normalize unsafe operator behavior and lead users to run code that accesses the host, network, or secrets under the assumption that the feature is routine and safe.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The usage guide explicitly supports sensitive host actions such as file-write, file-delete, and execute-command, with approval workflows around them. Even with HITL, exposing these capabilities in a general-purpose orchestrator creates a clear path to destructive or system-level actions if approval is bypassed, misconfigured, socially engineered, or auto-approved in future extensions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The hardcoded reference to https://api.tavily.com indicates a specific external destination for user/task data. While not malicious by itself, embedding external endpoints in usage guidance encourages data egress without discussing trust boundaries, retention, or regional/compliance considerations.

Content

Scanner excerpt · USAGE-GUIDE.md (reported line 379)May include surrounding context.

md
// 单个注册
orchestrator.registerTool('tavily-search',
  async (params) => {
    const response = await fetch('https://api.tavily.com/search', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The hardcoded reference to https://api.tavily.com indicates a specific external destination for user/task data. While not malicious by itself, embedding external endpoints in usage guidance encourages data egress without discussing trust boundaries, retention, or regional/compliance considerations.

Content

Scanner excerpt · USAGE-GUIDE.md (reported line 379)May include surrounding context.

md
// 单个注册
orchestrator.registerTool('tavily-search',
  async (params) => {
    const response = await fetch('https://api.tavily.com/search', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The network search example sends user-supplied queries to an external API without warning that task content may leave the local environment. In an agent/orchestrator context, queries can contain sensitive prompts, internal data, or customer information, so undocumented external transmission creates a meaningful privacy and compliance risk.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
src/code-mode.js:227