Back to skill

Security audit

Daolv Hotel Search

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a hotel-search helper, but it ships a reusable bearer token and has naming/scope drift that users should review before installing.

Do not install this version as-is unless you trust the publisher and accept that the bundled MCP bearer token may expose or consume someone else's service credential. The publisher should rotate/remove the token, require users to provide their own secret at runtime, and align all docs and publish paths to the search-only skill name and scope.

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

Error
Location
references/mcp-client-config.json:7
Finding

Hardcoded MCP Bearer Token Exposes Service Credentials

Content
View full analysis

Vulnerability Details

File Location: references/mcp-client-config.json, line 7
Vulnerability Type: Hardcoded authentication credential
Risk Level: High

Vulnerable Code

json
"headers": {
  "Authorization": "Bearer mcp_171e1ffa7da343faa4ec43460c52b13f",
  "Content-Type": "application/json"
}

Technical Analysis

A live-looking bearer token is embedded directly in a client configuration file distributed with the skill. Anyone who can read the package, source repository, build artifact, registry publication, logs, or backups can extract this credential without needing additional privileges.

Bearer tokens generally grant access based solely on possession. The configuration identifies the associated endpoint as https://mcp.aigohotel.com/mcp, allowing the exposed token to be replayed against that service. No malicious behavior by the skill itself was identified; the vulnerability is the insecure distribution of authentication material.

Attack Path

  1. An attacker downloads the skill package or reads a public or otherwise accessible copy of the repository.
  2. The attacker opens references/mcp-client-config.json and extracts the value of the Authorization header.
  3. The attacker sends requests to https://mcp.aigohotel.com/mcp using the copied bearer token.
  4. If the token remains valid, the service treats the attacker as the token owner and permits operations within the token's assigned authorization scope.
  5. The attacker may automate requests, consume service quota, access data exposed to that credential, or cause billable activity until the token is revoked, expires, or is otherwise restricted.

Impact Assessment

Successful exploitation requires only read access to a distributed copy of the skill. It may allow unauthorized use of the MCP service under the credential owner's identity, including invocation of hotel-search or related MCP capabilities available to the token. Potential consequences include quota exhaust ...[truncated 406 chars]

Remediation
View remediation

Remediation Suggestions

  1. Revoke and rotate the exposed token immediately. Treat it as compromised even if the project was not intentionally published.
  2. Remove the credential from the configuration and replace it with a runtime-injected secret, for example:
json
{
  "mcpServers": {
    "aigohotel-mcp": {
      "url": "https://mcp.aigohotel.com/mcp",
      "type": "streamable_http",
      "headers": {
        "Authorization": "Bearer ${AIGOHOTEL_MCP_TOKEN}",
        "Content-Type": "application/json"
      }
    }
  }
}
  1. Store the token in an approved secret manager, operating-system credential store, or protected environment variable rather than in the skill package.
  2. Ensure packaging and publication processes exclude local credential files. Distribute a sanitized example configuration such as mcp-client-config.example.json.
  3. Review repository history, release archives, registry artifacts, CI logs, and backups for earlier copies. Removing the token only from the latest version does not remove it from historical artifacts.
  4. Add automated secret scanning to pre-commit and CI workflows to block bearer tokens and similar credentials before publication.
  5. Apply least privilege, short expiration, audience restrictions, rate limits, and usage alerts to replacement tokens.
  6. Review server logs for unexpected requests made with the exposed token and investigate anomalous usage, quota consumption, or data access.
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The output template is specified entirely in Chinese for required response sections, which indicates the skill is directing responses in a specific language. The file does not provide any user opt-in or alternative language option, so this creates a language/locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The markdown specifies language default zh_CN, which is a natural-language locale constraint. Because the spec does not indicate that users can choose another language or explicitly opt in to Chinese output, this can violate the policy against forcing a specific language/locale.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The distribution instructions repeatedly reference a different skill name and path (daolv-hotel-booking) than the declared skill (daolv-hotel-search). This can cause publishers to package and release the wrong artifact, leading to supply-chain confusion, accidental overwrite of another skill, or users installing a package whose contents do not match its identity.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The promo copy materially overstates the skill’s capabilities by advertising booking workflow steps like room comparison, decision guidance, and pre-order confirmation, while the manifest says the skill is limited to hotel search and shortlist comparison. This mismatch can cause downstream agents or users to invoke the skill for actions it is not designed or authorized to perform, increasing the chance of unsafe tool usage, policy bypass, or incorrect transactional behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file contains user-facing skill descriptions and examples primarily in Chinese, but it does not indicate that the skill is region-specific or provide any user opt-in for language/locale. Under the natural-language policy rule, forcing a specific language without user choice is a policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The PR body claims the skill adds booking-oriented functionality and room-level detail comparison beyond the declared search-only intent. Security-wise, this kind of scope drift in project metadata is dangerous because reviewers and users may approve, deploy, or rely on the skill under false assumptions about its behavior and required safeguards.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

Line L48 provides a single recommended smoke query entirely in Chinese, which implicitly steers use toward one language. The file does not indicate that the skill is region-specific or that other languages are acceptable, so this may violate language/locale neutrality expectations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation advertises a different skill name (daolv-hotel-booking) than the manifested skill (daolv-hotel-search), creating identity confusion about what is installed and what capabilities it should have. In an agent ecosystem, such naming drift can mislead operators, reviewers, or orchestration logic into treating a search-only skill as a booking-capable one.

Content

No source excerpt is available for this finding.