Back to skill

Security audit

Movie & News Inquiry - 电影影讯查询

Security checks for vulnerabilities and agentic risk

Overview

This skill coherently provides movie listings and theater information through the disclosed JisuAPI service, with routine API-key and network-use cautions.

Install this only if you are comfortable using a JisuAPI account key and sending movie-related lookup details such as city, theater, date, movie name, or movie ID to JisuAPI. Prefer a restricted or quota-limited key, rotate it if exposed, and be cautious with returned non-HTTPS image or ticket links.

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
movie.py:23
Finding

API Credential Exposed in URL Query String

Content
View full analysis

Vulnerability Details

File Location: movie.py, lines 23–30
Vulnerability Type: API credential exposure through URL query parameters
Risk Level: Medium

Vulnerable Code:

python
def _call_movie_api(url: str, appkey: str, params: dict = None):
    query = {"appkey": appkey}
    if params:
        for k, v in params.items():
            if v not in (None, ""):
                query[k] = v

    try:
        resp = requests.get(url, params=query, timeout=10)

Technical Analysis

The function places JISU_API_KEY in the appkey query parameter of an HTTP GET request. Although all configured API endpoints use HTTPS, query strings can still be retained after TLS termination in API-provider logs, reverse-proxy access logs, observability systems, debugging output, or other URL-recording infrastructure.

The endpoints are fixed to the documented api.jisuapi.com service, so this is not an arbitrary exfiltration mechanism. However, URL-based credential transmission increases incidental disclosure risk compared with an authorization header or protected request body.

Attack Path

  1. A user configures a valid JISU_API_KEY and invokes the skill.
  2. _call_movie_api constructs a request URL containing appkey=<credential>.
  3. An intermediary or provider-side component records the complete request URL.
  4. An attacker with access to those logs or telemetry extracts the AppKey.
  5. The attacker submits requests to the JisuAPI service using the compromised credential.

Exploitation depends on access to infrastructure that records full URLs; no direct unauthenticated credential-disclosure path was identified within the project itself.

Impact Assessment

A compromised AppKey could allow unauthorized requests under the victim's JisuAPI account. The likely scope includes consumption of API quota, rate-limit exhaustion, possible billing impact, and access to API products authorized fo ...[truncated 146 chars]

Remediation
View remediation

Remediation Suggestions

  1. Use an authorization header if JisuAPI supports header-based authentication, for example:
    python
    headers = {"Authorization": f"Bearer {appkey}"}
    resp = requests.get(url, params=params, headers=headers, timeout=10)
    
  2. If the provider supports only the appkey query parameter, ensure that application, proxy, monitoring, and provider logs redact the parameter value.
  3. Never emit the prepared request URL, request configuration, or AppKey in debug and exception logs.
  4. Restrict the key by source address, permitted API products, quota, and spending limits where the provider supports those controls.
  5. Use separate keys per environment and rotate them periodically and immediately after suspected exposure.
  6. Continue loading the credential from the environment rather than hardcoding it in source code or documentation.
Vulnerability Patterns
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill metadata declares it requires an environment variable and, by design, will make outbound API requests, but it does not declare an explicit tool scope such as permissions or allowed-tools. That creates an authorization and review gap: an agent platform may allow broader execution/network behavior than intended, making it harder to enforce least privilege and increasing the chance of unintended data exposure through network access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger description uses a vague catch-all phrase ('or similar movie inquiry questions'), which makes activation boundaries ambiguous. In agent systems, ambiguous routing can cause the skill to be invoked for loosely related requests, leading to unnecessary network calls, accidental disclosure of user context to third-party APIs, or incorrect tool use.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The documentation shows external resources being fetched over plain HTTP from api.jisuapi.com. Unencrypted HTTP allows man-in-the-middle interception or tampering, so data returned to the agent—such as movie metadata, images, or links—could be altered in transit, and any request context could be observed by network attackers.

Content

Scanner excerpt · SKILL.md (reported line 75)May include surrounding context.

md
{
      "movieid": "137363",
      "moviename": "我不是药神",
      "pic": "http://api.jisuapi.com/movie/upload/movie/14/137363.jpg"
    }
  ]
}

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This finding again documents external content loaded over plain HTTP, which exposes responses to interception and tampering in transit. In an agent setting, consuming or surfacing modified third-party content can mislead users, poison summaries, or introduce unsafe links into the assistant's output.

Content

Scanner excerpt · SKILL.md (reported line 156)May include surrounding context.

md
"moviename": "盗梦空间",
  "movieid": "14",
  "enname": "Inception",
  "pic": "http://api.jisuapi.com/movie/upload/movie/1/14.jpg",
  "class": "动作 冒险 科幻",
  "year": "2010",
  "releasedate": "2010-09-01",

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 · movie.py (reported line 14)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

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 · movie.py (reported line 15)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

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 · movie.py (reported line 16)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

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 · movie.py (reported line 17)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

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 · movie.py (reported line 18)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

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 · movie.py (reported line 19)May include surrounding context.

python
import requests


MOVIE_ON_URL = "https://api.jisuapi.com/movie/on"
MOVIE_MOVIETHEATER_URL = "https://api.jisuapi.com/movie/movietheater"
MOVIE_THEATERMOVIE_URL = "https://api.jisuapi.com/movie/theatermovie"
MOVIE_DETAIL_URL = "https://api.jisuapi.com/movie/detail"

Static analysis

No suspicious patterns detected.