Back to skill

Security audit

银行外汇牌价

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to fetch public forex rates from the stated Chinese bank sources, with a notable but bounded TLS compatibility risk.

Install only if you are comfortable with a skill that makes live requests to the listed Chinese bank sites and returns public rate data. Treat results as informational, especially because the code enables a legacy TLS compatibility option for all bank fetches; avoid using it as the sole source for high-value financial decisions.

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
index.js:46513
Finding
Legacy Insecure TLS Renegotiation Enabled for All Bank Requests## Vulnerability Details **File Location**: `index.js`, lines 46513–46519 and 46559–46565 **Vulnerability Type**: Insecure TLS configuration **Risk Level**: Medium ```javascript let legacyTlsDispatcher; try { const { Agent } = __nccwpck_require__(6752); legacyTlsDispatcher = new Agent({ connect: { secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT, }, }); } catch { legacyTlsDispatcher = undefined; } ``` The legacy-enabled dispatcher is then applied to every outbound request: ```javascript const response = await fetch(url, { method: options.method || 'GET', headers: { ...DEFAULT_HEADERS, ...(options.headers || {}), }, body: options.body, signal: AbortSignal.timeout(options.timeoutMs || DEFAULT_TIMEOUT_MS), ...(legacyTlsDispatcher ? { dispatcher: legacyTlsDispatcher } : {}), }); ``` ### Technical Analysis `SSL_OP_LEGACY_SERVER_CONNECT` permits the client to connect to servers that do not support secure TLS renegotiation. Secure renegotiation protects the relationship between the initial TLS handshake and subsequent renegotiated handshakes. Allowing the legacy behavior weakens Node.js and OpenSSL's default transport protections. The configured dispatcher is not restricted to a single documented legacy endpoint. It is passed to every request made through `fetchBuffer`, including requests to all six configured bank sources. Consequently, the skill globally relaxes TLS behavior even for endpoints that do not require this compatibility option. Exploitation depends on the contacted server or an intervening TLS endpoint supporting vulnerable legacy renegotiation and on an attacker being in a suitable network position. The hard-coded HTTPS destinations and normal certificate validation reduce exposure, but they do not justify globally enabling an obsolete TLS compatibility mode. ### Attack Path 1. A user invokes the skill to retrieve exchang ...[truncated 1291 chars]
Remediation
## Remediation Suggestions 1. Remove `crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT` and use Node.js and OpenSSL's secure default TLS configuration. 2. Do not create or apply a legacy-enabled dispatcher globally. 3. Verify whether any configured bank endpoint genuinely requires insecure legacy renegotiation. Prefer a current official endpoint if compatibility problems exist. 4. If a temporary exception is unavoidable, isolate it to the exact verified hostname rather than applying it through the shared request function. 5. Document the compatibility requirement, emit a clear security warning, and establish a deadline for removing the exception. 6. Retain normal certificate and hostname verification, and consider enforcing a modern minimum TLS version such as TLS 1.2. 7. Add automated transport tests confirming that all configured endpoints work with secure renegotiation requirements and default TLS settings.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (20)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The ability to record and replay arbitrary HTTP traffic, store snapshots on disk, and manage mocked responses introduces clear data-handling and surveillance risk unrelated to the stated forex function. In an agent context, this could capture sensitive request/response data or create deceptive offline behavior that masks real network actions.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Content
exports.compileToken = compileToken;
function compileRules(rules, options, context) {
    var _a;
    return rules.reduce(function (previous, rule) {
        return previous === boolbase_1.default.falseFunc
            ? boolbase_1.default.falseFunc
            : (0, general_js_1.compileGeneralSelector)(previous, rule, options, context, compileToken);
Confidence
85% confidence
Finding
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
ren;
            var entry = { media: getMediaElements(children) };
            addConditionally(entry, "id", "id", children);
            addConditionally(entry, "title", "title", children);
            var href = (_a = getOneElement("link", children)) === null || _a === void 0 ? void 0 : _a.attribs["href"];
            if (href) {
                entry.link = href;
            }
            var description = fetch("summary", children) || fetch("content", children);
            if (description) {
                entry.description = description;
            }
            var pubDate = fetch("updated", children);
            if (pubDate) {
                entry.pubDate = new Date(pubDate);
            }
            return entry;
        }),
    };
    addConditionally(feed, "id", "id", childs);
    addConditionally(feed, "title", "title", childs);
    var href = (_a = getOneElement("link", childs)) === null || _a === void 0 ? void 0 : _a.attribs["href"];
    if (href) {
        feed.lin
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Obfuscated Code

High
Category
Supply Chain
Content
const { Buffer } = __nccwpck_require__(4573)

const wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRwX3NldF9sZW5pZW50X2hlYWRlcnMAISFsbGh0dHBfc2V0X2xlbmllbnRfY2h1bmtlZF9sZW5ndGgAIh1sbGh0dHBfc2V0X2xlbmllbnRfa2VlcF9hbGl2ZQAjJGxsaHR0cF9zZXRfbGVuaWVudF90cmFuc2Zlcl9lbmNvZGluZwAkGmxsaHR0cF9zZXRfbGVuaWVudF92ZXJzaW9uACUjbGxodHRwX3NldF9sZW5pZW50X2RhdGFfYWZ0ZXJfY2xvc2UAJidsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfbGZfYWZ0ZXJfY3IAJyxsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfY3JsZl9hZnRlcl9jaHVuawAoKGxsaHR0cF9zZXRfbGVuaWVudF9vcHRpb25hbF9jcl9iZWZvcmVfbGYAKSpsbGh0dHBfc2V0X2xlbmllbnRfc3BhY2VzX2FmdGVyX2NodW5rX3NpemUAKhhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YANgkYAQBBAQsSAQIDBAUKBgcyNDMuKy8tLDAxCq/ZAjQWAEHA1QAoAgAEQAALQcDVAEEBNgIACxQAIAAQOCAAIAI2AjggACABOgAoCxQAIAAgAC8BNCAALQAwIAAQNxAACx4BAX9BwAAQOiIBEDggAUGACDYCOCABIAA6ACggAQuPDAEHfwJAIABFDQAgAEEIayIBIABBBG
...[truncated 27 chars]
Confidence
50% confidence
Finding
Code contains obfuscation (base64, hex encoding with execution). This is often used to hide malicious functionality.

Obfuscated Code

High
Category
Supply Chain
Content
const { Buffer } = __nccwpck_require__(4573)

const wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRwX3NldF9sZW5pZW50X2hlYWRlcnMAISFsbGh0dHBfc2V0X2xlbmllbnRfY2h1bmtlZF9sZW5ndGgAIh1sbGh0dHBfc2V0X2xlbmllbnRfa2VlcF9hbGl2ZQAjJGxsaHR0cF9zZXRfbGVuaWVudF90cmFuc2Zlcl9lbmNvZGluZwAkGmxsaHR0cF9zZXRfbGVuaWVudF92ZXJzaW9uACUjbGxodHRwX3NldF9sZW5pZW50X2RhdGFfYWZ0ZXJfY2xvc2UAJidsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfbGZfYWZ0ZXJfY3IAJyxsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfY3JsZl9hZnRlcl9jaHVuawAoKGxsaHR0cF9zZXRfbGVuaWVudF9vcHRpb25hbF9jcl9iZWZvcmVfbGYAKSpsbGh0dHBfc2V0X2xlbmllbnRfc3BhY2VzX2FmdGVyX2NodW5rX3NpemUAKhhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YANgkYAQBBAQsSAQIDBAUKBgcyNDMuKy8tLDAxCq/ZAjQWAEHA1QAoAgAEQAALQcDVAEEBNgIACxQAIAAQOCAAIAI2AjggACABOgAoCxQAIAAgAC8BNCAALQAwIAAQNxAACx4BAX9BwAAQOiIBEDggAUGACDYCOCABIAA6ACggAQuPDAEHfwJAIABFDQAgAEEIayIBIABBBG
...[truncated 27 chars]
Confidence
50% confidence
Finding
Code contains obfuscation (base64, hex encoding with execution). This is often used to hide malicious functionality.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
* @returns {string}
 */
function headerValueNormalize (potentialValue) {
  //  To normalize a byte sequence potentialValue, remove
  //  any leading and trailing HTTP whitespace bytes from
  //  potentialValue.
  let i = 0; let j = potentialValue.length
Confidence
90% 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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
* @returns {string}
 */
function headerValueNormalize (potentialValue) {
  //  To normalize a byte sequence potentialValue, remove
  //  any leading and trailing HTTP whitespace bytes from
  //  potentialValue.
  let i = 0; let j = potentialValue.length
Confidence
90% 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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
* @returns {string}
 */
function headerValueNormalize (potentialValue) {
  //  To normalize a byte sequence potentialValue, remove
  //  any leading and trailing HTTP whitespace bytes from
  //  potentialValue.
  let i = 0; let j = potentialValue.length
Confidence
90% 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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
* @returns {string}
 */
function headerValueNormalize (potentialValue) {
  //  To normalize a byte sequence potentialValue, remove
  //  any leading and trailing HTTP whitespace bytes from
  //  potentialValue.
  let i = 0; let j = potentialValue.length
Confidence
90% 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).

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill metadata declares no explicit tool scope even though the implementation reportedly uses environment access, network, and shell capabilities. In an agent setting, undeclared capabilities reduce transparency and can allow broader-than-expected execution, making review and sandboxing harder.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
The description states that the skill fetches forex rates specifically from Chinese banks. This imposes a locale-specific scope in natural language, but the manifest does not indicate whether this is an opt-in regional specialization or provide any user-facing choice or justification.

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.env_credential_access, suspicious.exposed_secret_literal (+1 more)

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
index.js:46470

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
index.js:15213

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
index.js:19938

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
index.js:5380