Back to skill

Security audit

jftech-open-pro-video-record

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims for JF camera recordings, but its scripts can send sensitive camera and account authentication data to an arbitrary endpoint despite claiming only official API access.

Install only if you understand that this skill can access sensitive camera recording metadata and playback URLs. Before use, keep JF_ENDPOINT unset or set only to an official JF host, and do not run it in an environment where someone else can control environment variables. Treat printed playback URLs like temporary secrets.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/local_playback_url.py:79
Finding

Unrestricted API endpoint exposes device credentials and authentication material in local playback requests

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/cloud_playback_url.py:57
Finding

Unrestricted API endpoint can disclose cloud playback tokens and signed authentication material

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/cloud_video_list.py:78
Finding

Unrestricted API endpoint can receive cloud recording inventory and authentication material

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/local_video_list.py:59
Finding

Unrestricted API endpoint can receive local recording queries and signed authentication material

Content
View full analysis
Remediation
View remediation
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 (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

代码主功能与声明中的一部分相符,即获取云存录像回放/下载地址。但声明明显覆盖了更广的能力范围,包括本地录像回放、录像列表查询、录像下载、历史视频查看;该代码片段并未实现这些能力中的多数。它只调用两个云端接口:获取设备 token,以及获取云存视频 URL,没有本地卡录像处理逻辑、录像列表枚举逻辑,也没有实际下载或查看实现。因此描述对该代码片段而言存在能力夸大和范围不符,应判定为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

该代码片段的核心功能与声明中的“本地录像回放地址获取、录像下载”部分是一致的,但声明描述了更完整的录像回放技能,包含云存储录像、本地录像、录像列表查询等多项能力。实际代码只覆盖其中一个子集:通过设备 token 获取本地录像回放或下载地址,且依赖已知 fileName 和时间范围,并没有查询录像列表,也没有处理云存储录像相关接口。因此描述相对代码而言存在能力范围上的夸大/不准确,属于描述与实际行为不完全匹配。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The top-level description is entirely in Chinese and the document consistently presents the skill as Chinese-language only, with no opt-in or alternative language option for users. Under the policy, forcing a specific language without user choice is a natural-language policy violation unless the locale restriction is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest sets "language": "python", while the human-facing description and variable descriptions are entirely in Chinese. This creates a natural-language/locale mismatch and effectively imposes a specific language context without offering user opt-in or documenting a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code reads credentials and identifiers from environment variables and sends them as HTTP headers/body to an external endpoint. While the script logs progress, it does not explicitly disclose to the user that app credentials, UUID, and device serial information will be transmitted over the network, which is a safety-relevant behavior for a code file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code file contains natural-language strings entirely in Chinese in the module docstring and CLI help/output, which effectively imposes a specific language on users. The policy allows locale constraints only when users can opt in or when the constraint is clearly documented and justified, neither of which is present here.

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/cloud_video_list.py (reported line 13)May include surrounding context.

python
https://docs.jftech.com/docs?menusId=54582398fd8d4248962354e92ac2e47a&siderId=66142b2ca13c418d84085772a627d650

API 端点:
POST https://api.jftechws.com/gwp/v3/rtc/device/getVideoList/{deviceToken}

用法:
    export JF_UUID="your-uuid"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code reads sensitive values including JF_APPSECRET and JF_PASSWORD from environment variables, then uses them to authenticate remote API calls. Although the script prints operational status, it does not provide a user-facing warning, confirmation, or explanatory comment that credentials and playback-access data will be sent to an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code sends the device serial number in the request body and includes authentication-related headers derived from environment-provided credentials in an HTTPS POST request. Although the script prints progress messages, it does not clearly disclose to the user that device metadata and auth material are being transmitted to a remote API service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The function reads JF_APPSECRET and other credential-like environment variables, which are then used to authenticate remote API calls. There is no explicit disclosure in the CLI description, comments, or runtime messaging that the script depends on sensitive credentials and will use them to authenticate against an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest exposes capabilities for listing, downloading, and playing back cloud/local recordings, which are inherently privacy-sensitive, yet it does not clearly warn that the skill accesses potentially sensitive video footage and may require device credentials. In this context, unclear disclosure increases the risk of unintended use, overbroad invocation, or operators enabling a skill without appreciating that it can retrieve surveillance recordings.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

Natural-language strings in the docstring, argument descriptions, and console output are consistently Chinese-only, and the file does not offer any locale selection or indicate that the skill is intentionally limited to Chinese-speaking users. Under the stated policy, forcing a specific language without user opt-in can be a violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

Natural-language strings in the module docstring, CLI help, status output, and errors are written only in Chinese. Under the stated policy, forcing one language without opt-in or justification is a locale-policy issue.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

This manifest describes the skill's capabilities in general terms but provides no specific invocation phrases, scope boundaries, or exclusion conditions. For a manifest file, that can make activation criteria ambiguous and increase the chance of unintended invocation if downstream systems rely on the description for routing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Natural-language metadata, including the main description, is presented in a single language with no indication that users can choose another locale. This may violate language-choice policy where skills should not force a specific language absent documented justification or opt-in.

Content

No source excerpt is available for this finding.