Back to skill

Security audit

React Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

This skill is a plausible ReAct orchestration library, but it includes high-impact code execution and approval features whose safety is overstated or not enforced.

Install only if you are prepared to treat this as privileged orchestration code, not a sandbox. Do not pass untrusted or model-generated code to Code Mode, do not rely on the documented HITL constructor options for enforcement, and review every registered tool that can read/write files, run commands, or send data to external services.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (4)

T09 · Insecure Skill Coding Practices

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

Code Mode Executes Arbitrary JavaScript and PowerShell with Host Privileges

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 similarly executes supplied code and explicitly bypasses PowerShell execution policy: ```javascript const wrappedCode = ` $ErrorActionPreference = 'Stop' try { $result = & { ${code} } if ($result -ne $null) { Write-Output "__RESULT_START__" Write-Output ($result | ConvertTo-Json -Depth 10) Write-Output "__RESULT_END__" } } catch { Write-Error "__ERROR_START__$($_.Exception.Message)__ERROR_END__" exit 1 } `.trim(); fs.writeFileSync(tmpFile, wrappedCode, 'utf8'); const child = spawn('powershell.exe', [ '-NoProfile', '-ExecutionPolicy', 'Bypass', '- ...[truncated 2761 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/code-mode.js:203
Finding

Predictable Temporary Script Paths Permit Local Race and File-Replacement Attacks

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); ``` The PowerShell path follows the same pattern: ```javascript const timeout = options.timeout || this.options.sandbox.timeout; const tmpDir = require('os').tmpdir(); const tmpFile = path.join(tmpDir, `code-mode-${Date.now()}.ps1`); const wrappedCode = ` $ErrorActionPreference = 'Stop' try { $result = & { ${code} } if ($result -ne $null) { Write-Output "__RESULT_START__" Write-Output ($result | ConvertTo-Json -Depth 10) Write-Output "__RESULT_END__" } } catch { Write-Error "__ERROR_START__$($_.Exception.Message)__ERROR_END__" exit 1 } `.trim(); fs.writeFileSync(tmpFile, wrappedCode, 'utf8'); ``` ### Technical Analysis The generated filename contains only `Date.now()`, making it predictable within a small time window. The file is placed in the shared system temporary directory and is written without exclusive-creation semantics. There is a time interval between determining the pathname, writing the file, and starting the interpreter. A local attacker with access to the same temporary directory may attempt to pre-create, replace, redirect, or race that path. Platform ...[truncated 1607 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
src/system1.js:76
Finding

Documented Human Approval Controls Are Not Enforced by the Orchestrator

Content
View full analysis
Remediation
View remediation

T01 · Skill Instruction Hijacking

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

Untrusted Query, Tool Metadata, and Observation Content Can Inject Instructions into 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')} ` : ''; ``` The user query and additional context are also inserted without escaping or structural separation: ```javascript return `You are an intelligent AI assistant using the ReAct (Reason+Act) framework to process user requests. User query: ${query} ${context.additionalContext ? `\nAdditional context: ${context.additionalContext}` : ''} ${toolList} ${historyContext} ${examples} ${guardrails} Please strictly output according to the following JSON Schema format: { "type": "object", "required": ["thought", "action"], ... } The output must be pure JSON without any other text. Your reasoning:`; ``` Comparable direct interpolation is used by the planner, reflection, and synthesis prompt builders. ### Technical Analysis The prompt uses pseudo-XML tags to distinguish task data, tool metadata, execution history, and instructions. These tags do not provide a security boundary. Untrusted content is interpolated without escaping delimiters or identifying it to the model through a separate structured data channel. An attacker can include text such as a closing `` or `` tag followed ...[truncated 2008 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 (62)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The code advertises a 'sandbox' but actually executes generated JavaScript and PowerShell in normal OS subprocesses with full runtime capabilities. This creates a dangerous trust mismatch: callers may assume isolation while executed code can access the filesystem, network, child processes, and inherited secrets from the host environment.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The execute() API documentation claims sandboxed execution, but the implementation directly runs code through node and powershell.exe. In a skill/agent context, this can mislead integrators into sending untrusted model-generated code for execution under false assumptions of safety.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The PowerShell path writes a script to disk and runs it with ExecutionPolicy Bypass, lowering built-in platform protections and enabling straightforward execution of generated code. Combined with arbitrary code generation, this significantly increases risk of host compromise, persistence attempts, and unauthorized system changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document provides concrete WebSocket/HTTP A2A implementation guidance for remote agent communication and message forwarding, but it does not warn that data, prompts, credentials, or tool inputs may leave the local trust boundary. In this context, implementers could enable cross-process or cross-machine delegation without user consent, privacy notice, endpoint trust validation, or operational safety guardrails, creating a real risk of unintended data disclosure and unsafe remote actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The integration examples register remote tools and delegate tasks to remote agents as if they were ordinary local capabilities, without warning that external agents can process user requests or invoke tools on behalf of the system. This abstraction increases danger because it can hide the fact that sensitive prompts, code, or operational commands are being sent to external parties, potentially leading to data leakage, unauthorized actions, or trust-boundary bypass.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

The documented HITL design explicitly supports automatic approval via whitelist, which weakens human oversight for actions deemed 'safe'. In an agent context, misclassification of a tool or parameter set as auto-approvable can let the system perform unintended actions without review, especially when tools like file-read can expose sensitive data.

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
87% confidence
Finding

This concrete example configures autoApprove for file-read and calculator, meaning at least some tool executions can bypass human confirmation entirely. In agent systems, file-read is often more sensitive than it appears because an attacker can steer the agent to retrieve secrets, tokens, configs, or private documents without triggering review.

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,

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

The HITL example explicitly auto-approves certain actions, which weakens the human-in-the-loop control model and can normalize unattended execution paths. In an agent context, even seemingly low-risk actions like file-read can expose sensitive local data, and auto-approved capabilities can be chained with other tools to escalate impact.

Content

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

md
const hitl = new HITLManager({
  enabled: true,
  requireApproval: ['file-write', 'execute-command'],
  autoApprove: ['file-read', 'calculator'],
  timeout: 300000,
  
  onApprovalRequired: async (request) => {

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 })
    });

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 })
    });

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The quick reference provides copy-pastable examples for external web requests and direct file writing without any safety note, permission guidance, or data-handling warning. In an agent skill, this lowers the barrier to unsafe use: users may adopt these snippets and cause unintended data exfiltration or filesystem modification without realizing the trust and approval implications.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Referencing a third-party Tavily endpoint in a quick-start example normalizes external transmission without highlighting trust, retention, or compliance considerations. The risk is amplified in orchestration skills because users may wire this directly into autonomous flows that send data off-host automatically.

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
90% confidence
Finding

Referencing a third-party Tavily endpoint in a quick-start example normalizes external transmission without highlighting trust, retention, or compliance considerations. The risk is amplified in orchestration skills because users may wire this directly into autonomous flows that send data off-host automatically.

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
91% confidence
Finding

The README encourages integrating a network-enabled search tool and executing user-driven web queries, but it does not warn that prompts and query contents may be transmitted to third-party services. In an agent/orchestrator context, users may pass sensitive business, personal, or internal research data into these tools, creating privacy and data-governance risk even though the behavior is presented as normal functionality.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The weather tool example sends user-supplied location data directly to a third-party endpoint via HTTP requests without disclosure, consent guidance, or privacy caveats. In an orchestration framework, this normalizes exfiltration of user-provided parameters to external services and can expose sensitive location or usage patterns if reused in real deployments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly advertises complete execution-history recording for audit/debugging but does not warn users that this can capture sensitive prompts, tool inputs, outputs, and potentially reasoning traces. In an orchestration skill that routes across multiple tools, retained history increases privacy and data-exposure risk if logs are persisted, shared, or inspected by others.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation demonstrates network-enabled search and API key usage but does not clearly disclose that user queries may be transmitted to external services. Because this orchestrator is designed to automatically select and invoke tools, users may unknowingly send sensitive task content to third-party providers, creating confidentiality and compliance risks.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

The HITL configuration includes autoApprove for certain actions, demonstrating autonomous authorization behavior that can bypass human review. While the shown tools are lower-risk than write/command execution, automatic approval patterns can expand unsafely over time and normalize reduced oversight in agent workflows.

Content

Scanner excerpt · USAGE-GUIDE.md (reported line 290)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,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The guide documents capabilities for external network search and local file read/write without clearly warning users that prompts and parameters may be transmitted to third parties or that local files may be modified. In an agent skill context, this omission can lead to unsafe deployment where operators unknowingly expose sensitive data or permit destructive actions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The reference to https://api.tavily.com/ reflects an external transmission endpoint and indicates the skill supports sending data outside the local environment. Without strong guidance and controls, users may unknowingly route confidential queries or file-derived content to a third party.

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
88% confidence
Finding

The reference to https://api.tavily.com/ reflects an external transmission endpoint and indicates the skill supports sending data outside the local environment. Without strong guidance and controls, users may unknowingly route confidential queries or file-derived content to a third party.

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({

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

This configuration again promotes autoApprove, which can let the agent take actions without contemporaneous human validation. In the context of a general-purpose orchestrator that can combine tools and LLM reasoning, even seemingly safe auto-approved tools may expose sensitive data or be chained into broader unintended behavior.

Content

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

md
hitl: {
    enabled: true,
    requireApproval: ['file-write', 'execute-command'],
    autoApprove: ['file-read', 'calculator'],
    timeout: 300000,
  },

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This JavaScript file presents its purpose, test descriptions, and all visible console output in Chinese only. Under the policy for natural-language violations, forcing a specific language without user opt-in is a reportable locale-policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file contains user-facing instructions exclusively in Chinese, and nowhere indicates that the language is optional, user-selected, or required for a region-specific purpose. Under the policy rule for natural-language violations, forcing a specific language without opt-in is a reportable issue.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The Tavily template transmits the provided query to an external HTTP API and accesses the TAVILY_API_KEY environment variable. This affects user privacy and credential use, but the file contains no user-facing disclosure or warning that search terms will be sent to a third-party service.

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