Back to skill

Security audit

Virtuoso Skill

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a legitimate Virtuoso Skill API helper, but its optional web mode exposes an unauthenticated service and renders database content unsafely.

Install only if you are comfortable with a Chinese-language Virtuoso Skill API helper. Use the CLI modes normally; if you use web mode, bind it to localhost or restrict it with a firewall, and do not load API databases from untrusted sources.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/skill_chatbot.py:311
Finding

Stored DOM-Based Cross-Site Scripting in Web Search Results

Content
View full analysis
`; html += `

${func.name} ${func.category}

`; html += `

描述: ${func.description}

`; html += `
语法: ${func.syntax}
`; if (func.parameters.length > 0) { html += `
参数:
    `; func.parameters.forEach(function(p) { const required = p.required ? '必填' : '可选'; html += `
  • ${p.name}: ${p.description} (${p.type}, ${required})
  • `; }); html += `
`; } html += `

返回类型: ${func.return_type}

`; if (func.example) { html += `
示例:\n${func.example}
`; } if (func.notes) { html += `

注意: ${func.notes}

`; } html += ``; }); document.getElementById('results').innerHTML = html; ``` ### Technical Analysis The browser interpolates API database fields directly into an HTML string and assigns the result to `innerHTML`. No contextual output encoding or HTML sanitization is applied to fields such as `name`, `category`, `description`, `syntax`, parameter properties, `return_type`, `example`, or `notes`. These fields originate from a JSON database loaded by the server. The command-line interface permits the operator to select a database using `--db`, so the database cannot always be treated as trusted. An attacker-controlled value such as an image element with an `onerror` handler would be parsed as active HTML when a matching search result is displayed. The ...[truncated 1539 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/skill_chatbot.py:378
Finding

Unauthenticated Web Service Exposed on All Network Interfaces

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented purpose claims code validation, legality checking, intelligent completion, and prevention of undefined API usage, but the observed behavior includes starting a web server and lacks the promised enforcement features. This mismatch is dangerous because users may trust the skill to validate code or constrain behavior when it actually exposes network functionality and may provide incomplete or misleading safety assurances.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises capabilities consistent with file read/write and network access, but it does not declare any explicit tool scope such as permissions or allowed-tools. That makes the execution boundary ambiguous and can allow broader-than-expected access when the skill is run in an agent environment, increasing the risk of unintended file modification or network exposure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest description, headings, and example interactions are entirely in Chinese, including the direct-query examples and chatbot dialogue. This effectively imposes a specific language/locale for use of the skill, and the file does not indicate that other languages are supported or that Chinese is an intentional opt-in choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This JSON reference database uses Chinese throughout its metadata, category names, descriptions, examples, and UI text, such as the description field and prompts like "请输入名称:". Because the file provides no indication of language choice, opt-in, or documented locale constraint, it appears to impose a specific language/locale on users.

Content

No source excerpt is available for this finding.

Ae2

Medium
Category
analysis-evasion
Confidence
90% confidence
Finding

Artifact content does not match its filename extension

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module description, CLI usage examples, prompts, and user-facing responses are all written exclusively in Chinese, indicating the skill is designed to operate in a single language. The file does not provide any option for users to select another language or explicitly opt into Chinese-only behavior, which is a natural-language locale policy concern under the rule.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The web server is started with host='0.0.0.0', making it reachable from other machines on the network, even though the tool is primarily a local assistant for API lookup. Exposing an unauthenticated HTTP service broadens the attack surface and can permit unintended remote use, service abuse, and delivery of untrusted database content to browsers.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This Python file contains natural-language descriptions and CLI output entirely in Chinese, starting with the module docstring and continuing throughout the script. Under the policy, forcing a specific language without user opt-in is a locale/language policy violation unless the constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and function docstring are written only in Chinese, and all user-facing print messages in the script are also Chinese. This imposes a specific language on users without any opt-in or alternative, which matches the locale/language policy concern for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and later user-facing print messages are written only in Chinese, which imposes a specific language on users of the skill. For a general-purpose parsing script, there is no visible opt-in, language selection mechanism, or documented regional justification for this locale restriction.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The manifest describes a development assistant for querying APIs, checking code, and intelligent completion, which fits the local search/chatbot portions of this script. However, this file additionally starts a Flask server bound to 0.0.0.0, turning the tool into a network service; serving HTTP requests is not mentioned in the manifest and is not an obvious requirement of the stated assistant scope.

Content

No source excerpt is available for this finding.