Back to skill

Security audit

瑞玥餐饮API

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real restaurant-ordering skill, but it needs review because it can change reservations/orders, create payment links, and sends customer data over plaintext internal HTTP.

Review this skill before installing in a live merchant environment. Require HTTPS or a protected authenticated transport, confirm backend object-level authorization for every reservation/order/member operation, and add explicit confirmation/disambiguation before cancellations, reductions, and payment-link generation.

Vulnerability Patterns
  • 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
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
handlers/_http.js:1
Finding

Sensitive Customer and Transaction Data Transmitted over Plaintext HTTP

Content
View full analysis
{ if (v !== undefined && v !== null && v !== '') { url.searchParams.set(k, String(v)); } }); } const normalizedBody = body ? withDefaults(body) : null; if (normalizedBody) { const shopErr = ensureShopId(normalizedBody); if (shopErr) { return shopErr; } } const init = { method, headers: { Accept: 'application/json', ...(normalizedBody ? { 'Content-Type': 'application/json' } : {}), ...(normalizedBody ? buildContextHeaders(normalizedBody) : {}), ...(headers || {}), }, }; if (normalizedBody) { init.body = JSON.stringify(normalizedBody); } const response = await fetch(url.toString(), init); ``` The package configuration also declares the plaintext endpoint: ```json "config": { "apiBase": "http://10.200.100.32:9302" } ``` ### Technical Analysis The default API endpoint uses HTTP rather than HTTPS. Requests can contain customer names, phone numbers, member i ...[truncated 2015 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
handlers/getMemberInfo.js:9
Finding

Unvalidated Member Identifier Enables Same-Origin Path Manipulation

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
handlers/cancelOrder.js:3
Finding

Object-Level Read and Mutation Operations Are Not Bound to the Current Customer Session

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (35)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The metadata says the skill covers query, reservation, ordering, and item reduction, but the body also authorizes payment-link generation and payment-related flows. This capability expansion is security-relevant because payment actions can trigger money movement or phishing-like user trust assumptions, yet they are not clearly disclosed in the declared purpose.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill exposes broad capabilities to use environment-derived identifiers and internal network APIs, but it does not declare any explicit tool scope or allowed-tools boundary. That weakens least-privilege controls and makes it easier for a misconfigured or compromised runtime to invoke unintended tools or endpoints with sensitive tenant/shop context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instruction explicitly says '禁止输出英文' and '仅允许中文业务话术', which imposes a fixed language policy on all user-visible responses. This is a natural-language policy violation because it does not offer the user a language choice or document a justified region-specific exception.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The prompt requires all customer-facing replies to follow a fixed Chinese-language style and examples are exclusively in Chinese, effectively forcing a specific language/locale. The policy category forbids language or locale constraints unless the skill offers user choice or clearly documents a justified region-specific limitation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The code builds outbound HTTP headers including X-Tenant-Id, X-Shop-Id, and X-Mobile, then sends them via fetch, but there is no confirmation prompt, logging, or explanatory comment warning that user or system context data is transmitted to an external service. This matches the code-file warning criterion for network calls that transmit user or system data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The handler sends linkNickname, linkPhone, and reservation details in an HTTP POST request, which is a network operation transmitting user data. In this file there is no confirmation prompt, logging/print statement, or explanatory comment/docstring disclosing that this personal data will be sent to a backend service.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest describes write operations as limited to reservations, ordering, and item reduction, but this handler creates a payment link via a dedicated payment endpoint. Generating payment links is a distinct payment capability that is not mentioned in the declared skill scope, so the implemented behavior is broader than the manifest description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code issues a POST request to a cancel endpoint, which is an irreversible or user-impacting operation, but the file contains no confirmation prompt, warning, or user-facing disclosure around the action. Because the operation cancels an order, users may not be adequately informed before the destructive request is sent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The function performs a network request to retrieve member information, which may transmit identifiers such as memberId, saasId, tenantId, and shopId, but this file contains no confirmation prompt, logging, comment, or docstring disclosing that behavior. Under the code-file criteria, network calls that transmit user or system data should have some visible disclosure unless clearly documented elsewhere, which is not evident in this file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The string 'memberId 不能为空' forces a Chinese-language response in the skill logic with no indication of locale negotiation or user opt-in. This is a natural-language policy issue because the file hard-codes one language rather than allowing a user-selected or documented locale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code performs a network request to list appointments and includes linkPhone in the query parameters, which transmits personal data to a remote endpoint. In this file there is no confirmation prompt, user-facing log/message, or comment/docstring warning that the user's phone number will be sent for lookup.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This function sends identifiers such as saasId, tenantId, and orderId to a backend endpoint, and the parent function also prepares reserveId and linkPhone-derived context for remote tool calls. There is no confirmation prompt, logging, comment, or docstring in this file that informs the user that booking/order data will be transmitted over the network.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This PowerShell script performs a file write operation into a container via docker cp, which can alter existing files under the target skill path. Although the script prints source and target paths, it does not warn the user about possible overwrite effects or ask for confirmation before modifying container state.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The document explicitly enumerates write-capable tools for reservations and orders but does not include any operator warning about real-world side effects, authorization requirements, or confirmation safeguards. In this skill context, the tools can modify live business and customer data, so absent safety guidance increases the chance of unintended bookings, order changes, or cancellations by downstream agents or testers.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The example curl command performs a live booking request against an internal service using realistic personal data fields, yet it provides no warning that it will create or alter production-like records. This is dangerous because operators may copy and execute it in the wrong environment, causing unintended reservations, privacy exposure, and data integrity issues.

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 · tool-router.md (reported line 74)May include surrounding context.

验证 bookTable

bash
curl -X POST "http://10.200.100.32:9302/aiemployees/appointment/booking" \
  -H "Content-Type: application/json" \
  -d '{"saasId":"sf8b00e05","tenantId":5,"shopId":"8","linkNickname":"测试","linkPhone":"13800138000","dineDate":"2026-06-23","dineTime":"20:00","tableCode":"HH-A01","personNum":2}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The cancelAppointment tool performs a destructive action, but its description does not require an explicit user-facing confirmation or warning before execution. In a conversational system, ambiguous utterances or mis-resolved context could lead to accidental cancellation of a live reservation, causing direct business and customer impact.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The cancelOrder tool similarly enables destructive cancellation without an explicit warning or confirmation requirement in the tool contract. Because order cancellation can void an in-progress food order, a mistaken invocation could disrupt service, create financial disputes, or irreversibly remove a user's intended purchase.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The payment tool is configured to trigger on very broad phrases like '买单/付款/结账/支付', which can appear in exploratory or ambiguous conversation and may cause premature generation of a real payment link. In a dining skill with write-capable tools, that increases the risk of unintended transactional flow activation, especially if the assistant infers missing context such as which booking or order to charge.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The skill instructs the agent to generate and send clickable payment URLs without requiring a user-facing warning or authenticity guidance. In a payment context, this can normalize sending raw links and make users more susceptible to spoofed or socially engineered payment requests, especially since the skill also forbids exposing execution details that could help contextualize the link.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
71% confidence
Finding

The file reads multiple environment variables, including tenant, shop, and phone-related values, and later uses them in request context, but the code provides no user-facing disclosure or warning about this sensitive context sourcing. While not necessarily a secret leak, it fits the requirement to flag access to sensitive environment values when no disclosure is present.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

At L8, the function transmits body via an HTTP POST request, which includes order-related fields such as tenantId, orderId, shopId, and goods. This file contains no confirmation prompt, logging, comment, or docstring disclosing that data is being sent to a remote endpoint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The returned error message 缺少必填参数 is a natural-language string fixed to a specific locale. There is no indication in this file that the skill offers language selection, user opt-in, or a documented region-specific justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The returned error string is hardcoded in Chinese ('orderId 不能为空'), which imposes a specific language regardless of user preference. This can violate language or locale policy when no opt-in, localization mechanism, or documented regional constraint is present.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The POST request transmits reservation and contact-related fields such as reserveId, linkNickname, linkPhone, dineDate, and dineTime. In this file there is no confirmation prompt, logging, comment, or docstring disclosing that these user data fields will be sent to a backend service.

Content

No source excerpt is available for this finding.