T09 · Insecure Skill Coding Practices
- Location
scripts/jf_client.py:107- Finding
Configurable API Endpoint Allows Disclosure of Images and Authentication Metadata
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real JFTech image-analysis helper, but it handles credentials and media too broadly and can install an unpinned remote skill.
Install only if you trust the publisher and will use it in an authorized JFTech environment. Avoid custom endpoints, protect or rotate any appSecret used with it, do not commit config.json, and review/pin the jf-open-pro-capture dependency before allowing automatic installation or camera capture.
scripts/jf_client.py:107Configurable API Endpoint Allows Disclosure of Images and Authentication Metadata
scripts/jf_client.py:76Application Secret Is Stored in Plaintext and Accepted as a Command-Line Argument
SKILL.md:137Unpinned Remote Skill Is Downloaded and Immediately Trusted
The code is related to the declared domain—calling Jiefeng open-platform AI algorithms on images—but it represents a lower-level API client rather than the described interactive assistant. Its core functions are credential configuration, signature generation, connectivity testing, algorithm-app opening, and direct invocation of a provided app UUID with an image path or URL. The declared description emphasizes scenario-driven user interaction, selection/recommendation from a predefined 52-algorithm catalog, support for camera snapshot acquisition via another skill, and structured reporting. Those behaviors are absent from this code chunk. Therefore the description materially overstates and mischaracterizes the implemented behavior.
The skill instructs the agent to perform network access and write local files/configuration, but it does not declare any explicit tool scope or permission boundaries. That makes the effective capability surface broader than the manifest communicates, increasing the chance of unintended credential handling, API calls, or filesystem modification without clear user/admin review.
The listed triggers include generic phrases such as "AI检测", "算法调用", "图片分析", and "检测服务等", which are broad enough to match many ordinary requests outside this specific JFTech platform skill. The description does not provide exclusion conditions or negative examples to narrow when the skill should activate versus when a general image-analysis skill would be more appropriate.
The skill includes instructions to automatically install another skill by cloning/downloading remote content and copying it into the local skills directory. This creates a supply-chain and arbitrary code/trust expansion risk: a conversational flow about image analysis should not silently extend local capabilities by fetching and installing additional artifacts from the network.
This JSON manifest presents user-facing names, categories, scene labels, and descriptions predominantly in Chinese across the file, with no indication that language selection is optional or that the skill is intentionally limited to a Chinese-speaking region. Under the stated policy, a fixed language or locale without user opt-in or clear justification is a natural-language policy concern.
This manifest exposes numerous surveillance-oriented capabilities targeting workers, customers, and visitors, including employee behavior monitoring, age/gender analysis, theft detection, and perimeter monitoring, but provides no user-facing privacy, consent, or lawful-use warning. In this skill context, the danger is elevated because the catalog makes it easy to operationalize privacy-sensitive monitoring across images, video streams, and camera captures without any built-in friction, disclosure, or policy gating.
The document instructs callers to send image URLs or base64-encoded images together with a device serial number to a remote third-party API, but it does not warn about the privacy, confidentiality, and compliance implications of transmitting user media and identifiers off-platform. In this skill’s context, users may analyze camera captures, local photos, or surveillance imagery, so missing disclosure and consent guidance increases the risk of accidental exposure of sensitive visual data, metadata, and device identifiers.
The script persists app credentials, including the secret, to a local config.json file in plaintext without any warning or protection. This creates an avoidable credential exposure risk if the workstation is shared, backed up insecurely, checked into source control, or read by other local processes.
The client allows a user-supplied endpoint to override the expected JF platform API host, and the same request includes authentication headers plus potentially sensitive image/device data. In the context of a platform-specific assistant, this broadens behavior from calling the intended service to exfiltrating credentials and payloads to arbitrary servers, which is a real security boundary violation.
The call command sends either a base64-encoded local image or a remote image URL together with the provided SN value to an external API endpoint. Although network transmission is core to the client's purpose, the code does not provide an explicit user-facing disclosure at the point of transmission that local file contents and identifier data are being uploaded.
The manifest description and the operational guidance are written as if the interaction and outputs are expected in Chinese, and no user language choice or opt-in is offered. Because the skill is positioned as a general assistant rather than a clearly region-limited compliance tool, this can conflict with language/locale choice expectations.
The document presents all operational guidance, warnings, and API usage instructions only in Chinese. Under the language/locale policy, forcing a specific language without user opt-in or justification is a natural-language policy concern.
Natural-language strings in the module docstring and command descriptions are presented only in Chinese, with no indication that the user can choose another language. The policy requires flagging language-forcing behavior when a specific language is imposed without opt-in or justification.