Back to skill

Security audit

jftech-open-pro-ai-smart-search

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a legitimate JF Tech cloud video search/playback helper, but it handles surveillance playback links and authentication material with an unvalidated configurable API host.

Review before installing. Use this only in a trusted runtime with tightly controlled JF_* environment variables, set JF_ENDPOINT only to the documented official host, and treat generated playback URLs as sensitive surveillance access links that should not be logged or shared broadly.

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/get_playback_url.py:91
Finding

Unrestricted API endpoint allows redirection of sensitive JF Tech requests

Content
View full analysis
Remediation
View remediation
str: normalized = endpoint.strip().lower().rstrip(".") if normalized not in ALLOWED_ENDPOINTS: raise ValueError("Unsupported JF Tech API endpoint") return normalized ``` Apply validation immediately when loading the environment configuration: ```python endpoint = validate_endpoint( os.environ.get("JF_ENDPOINT", "api.jftechws.com") ) ``` Additional hardening should include: 1. Prefer a predefined region selector, such as `international` or `china`, over an arbitrary hostname. 2. Reject endpoint values containing schemes, credentials, ports, paths, queries, or fragments. 3. Reject IP literals and suffix-based lookalikes such as `api.jftechws.com.attacker.example`. 4. Continue requiring HTTPS and rely on normal certificate and hostname verification. 5. Avoid logging full device tokens or signed playback URLs. 6. Document that only the two declared official hosts are accepted. 7. Add automated tests proving that arbitrary hosts and hostname lookalikes are rejected. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ai_search_playback.py:87
Finding

Configurable playback endpoint can receive device authentication material

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
  • 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 (21)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose is semantic video search, but the skill also documents functionality to obtain playback URLs and perform end-to-end retrieval of cloud-stored surveillance footage. This is materially more sensitive than returning search matches because it expands from metadata search into direct access to video content, which can enable privacy violations, broader surveillance access, and unintended data exfiltration if users or downstream agents trust the narrower description.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill documentation declares network endpoints and environment-variable credential use, but it does not define an explicit tool-permission or allowed-tools boundary despite describing Python script execution and shell-style invocation. That gap weakens sandboxing and policy enforcement because an agent runtime may infer broader capabilities than intended, increasing the chance of unauthorized env access, shell execution, or network use if the implementation differs from the prose.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill description says it should return matched video clip lists from semantic search, but this script also performs a second step to obtain cloud playback URLs for the selected clip. That expands capability from search-only into direct access to stored surveillance footage, which increases sensitivity and can violate least-privilege and user expectations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This Python code sends user-provided search content, device SN, user ID, and signed authentication headers to a remote JF Tech service, and later performs additional remote calls for token and playback retrieval. Although the script prints progress messages, it does not clearly disclose to the user that these inputs and identifiers will be transmitted to external services or mention the privacy implications in the docstring/help text.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script prints a direct playback URL and even provides copy-paste instructions for VLC, browser access, and curl download. This turns a semantic search helper into a content access and export tool for surveillance media, materially increasing the risk of unauthorized viewing or redistribution if the script is used in a broader agent context.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script’s stated purpose expands from semantic search into obtaining direct cloud-video playback/download URLs for matched surveillance footage. That materially increases data-access capability: anyone able to run the skill with valid credentials can pivot from search metadata to retrieving watchable footage, which raises privacy and unauthorized-surveillance risk beyond a search-only function.

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 · scripts/ai_search_playback.py (reported line 41)May include surrounding context.

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

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

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

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

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

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 · scripts/get_playback_url.py (reported line 75)May include surrounding context.

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

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 · scripts/get_playback_url.py (reported line 190)May include surrounding context.

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

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 · scripts/search_video.py (reported line 65)May include surrounding context.

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

API 端点:
1. 获取设备 Token: POST https://api.jftechws.com/gwp/v3/rtc/device/token
2. 云存回放:POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}

用法:

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

This functionality retrieves direct playback/download URLs for surveillance footage from the cloud service. In the context of a skill marketed as smart semantic search, returning raw access URLs increases the sensitivity of the output and can enable broader sharing, replay, or unauthorized viewing if the URL is exposed in logs, terminals, or downstream tools.

Content

Scanner excerpt · scripts/get_playback_url.py (reported line 126)May include surrounding context.

python
根据录像开始时间(st 对应 startTime)和录像结束时间(et 对应 stopTime)
    获取对应云存报警视频播放链接
    
    API: POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoUrl/{deviceToken}
    
    官方文档:
    https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=2e08468f46564602d01ae8a244661672

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code reads sensitive environment variables including JF_APPSECRET and then uses them, along with device serial number and user ID, in outbound HTTPS requests to external jftechws.com endpoints. Although the script documents how to set the variables, it does not clearly warn users that running it will send credential-derived authentication data and device metadata to a third-party service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill sends user-provided search text, device serial number, user identifier, and authentication headers to a remote third-party API, but there is no explicit notice, consent, or minimization around this transmission. In a video-search context this is functionally necessary, but it still creates a privacy and data-handling risk because sensitive search terms and device metadata leave the local environment silently.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This is a manifest file, so vague-trigger checks apply. The description explains what the skill does and gives example search phrases like "带帽子的人", "车", and "狗", but it does not define clear trigger phrases, invocation boundaries, or exclusion conditions, which could cause overly broad matching in registries or agent routing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The script's user-facing docstring, argument descriptions, help text, and console output are written entirely in Chinese, which imposes a single language on users without opt-in or alternative locale support. Under the stated policy, language-specific behavior should either offer user choice or clearly document why the locale restriction is necessary.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

For a skill described as semantic search over alarm videos, handling app secrets, UUIDs, and device serial numbers is not reflected in the stated purpose. While these may support backend API access, the manifest does not indicate that the skill manages credentials or device-token derivation as part of its scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script's natural-language interface, help text, and output strings are all written in Chinese, which imposes a specific language on users without offering a locale or language selection. This can violate language-choice policy when no explicit opt-in or documented regional constraint is provided.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The manifest describes a semantic video-search skill, but the code also depends on reading multiple sensitive values from process environment variables, including app credentials and device identifiers. While these values support backend authentication, credential harvesting from environment state is not disclosed in the manifest’s stated purpose and is an additional capability beyond the search action itself.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

Natural-language policy checks apply to all file types. The primary user-facing description is Chinese-only, and the file does not indicate that the skill is limited to Chinese-speaking users or that language selection is optional, which may conflict with language/locale choice expectations.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.