Back to skill

Security audit

TCM Constitution Identification & Analysis Tool | 中医体质识别分析工具

Security checks across malware telemetry and agentic risk

Overview

The skill does the advertised cloud TCM face or video analysis, but it also silently creates or reuses a persistent account identity and stores tokens for cloud history access.

Review this skill carefully before installing. It should only be used if you are comfortable sending face images or videos to the configured cloud service and allowing the skill to create or reuse a persistent user identity, store access tokens locally, and fetch account-linked analysis history.

SkillSpector

By NVIDIA
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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (33)

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Content
if filters:
                for key, value in filters.items():
                    query = query.filter(getattr(self.__model__, key) == value)

            if offset:
                query = query.offset(offset)
Confidence
78% confidence
Finding
The list() method accepts caller-supplied filter keys and passes them into getattr(self.__model__, key) without validation. While SQLAlchemy still parameterizes values and prevents classic SQL injection, an untrusted caller can probe model internals, trigger exceptions for invalid attributes, and query on sensitive columns that should not be externally filterable, enabling unauthorized data discovery or denial-of-service through repeated failures.

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Content
if filters:
                for key, value in filters.items():
                    query = query.filter(getattr(self.__model__, key) == value)

            return query.scalar()
        finally:
Confidence
78% confidence
Finding
The count() method repeats the same unvalidated dynamic attribute lookup pattern as list(), allowing untrusted filter keys to influence which model attributes are accessed. This can expose schema details, permit counting on sensitive fields, and cause avoidable exceptions that may be abused for application instability or information disclosure.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill advertises no explicit permissions while instructing use of local file handling, shell execution, network access, and local persistence behaviors. This creates a transparency and consent gap: an agent or user may invoke capabilities with privacy and security implications that were not formally declared or constrained.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The documented purpose focuses on constitution recognition from face images, but the workflow also includes account/identity handling, local persistence, cloud history retrieval, and report listing. This mismatch can hide materially different data flows involving biometric data, historical records, and user linkage, increasing the risk of unauthorized collection, retention, or disclosure.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The skill is described as a constitution-analysis tool, but the CLI also exposes retrieval of prior analysis records via `--list` and an internal `open_id` flow. That creates a scope mismatch and increases the chance of unauthorized access to sensitive health-related history if identity binding or authorization checks are weak elsewhere.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The code resolves and uses an internal user identity even though the tool presents itself as a local/media analysis utility. Mixing hidden identity resolution with health analysis can expose or cross-link sensitive user data, especially because `show_analyze_list` uses `ConstantEnum.CURRENT__OPEN_ID` to retrieve records.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The skill accepts either arbitrary local file paths or arbitrary remote URLs and forwards their contents to the analysis backend, while the declared purpose is narrow TCM constitution analysis based on facial/physical signs. This scope mismatch increases the risk of unintended data exfiltration, misuse as a generic file-upload relay, and user confusion about what data is being sent off-box.

Context-Inappropriate Capability

Low
Confidence
82% confidence
Finding
The skill exposes report-history retrieval and constructs export-image URLs for prior analyses, capabilities that go beyond one-shot constitution assessment. If access control is weak elsewhere, this can enable unnecessary exposure of historical health-analysis artifacts and metadata through a broader interface than users would expect from the manifest.

Description-Behavior Mismatch

High
Confidence
94% confidence
Finding
The implementation materially conflicts with the declared skill purpose: instead of TCM constitution recognition from facial/physical signs, it exposes a generic video analysis and history-listing workflow. This kind of capability mismatch is dangerous because it can conceal unrelated data processing and remote service access under misleading metadata, causing users to provide sensitive media or identifiers under false expectations.

Intent-Code Divergence

Medium
Confidence
89% confidence
Finding
The user-facing help text, argument descriptions, and docstrings present this as a generic video analysis tool, directly contradicting the marketplace description of a TCM constitution recognition skill. Misrepresentation increases the risk of deceptive data collection and prevents meaningful informed consent, especially when users may submit facial or health-related media believing it serves a specific medical-style purpose.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
This file exposes a generic API wrapper with arbitrary GET/POST/PUT/DELETE and CRUD-style helpers that are far broader than the stated TCM constitution analysis purpose. In an agent skill context, this materially expands the skill’s capability surface, enabling unintended backend access, data manipulation, or pivoting to unrelated services if other components can influence the URLs or payloads.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
Looking up user accounts by username is unrelated to facial/physical-sign-based TCM analysis and introduces unnecessary identity-resolution capability. In a skill environment, this can facilitate user enumeration, privacy violations, or linkage of health-related interactions to account identities without a clear functional need.

Context-Inappropriate Capability

Medium
Confidence
83% confidence
Finding
Generating download URLs for arbitrary object keys is not justified by the declared constitution-recognition function and adds file-access capability outside the expected scope of the skill. If misused, it could expose stored artifacts or sensitive files through signed URLs, especially when combined with broader API access elsewhere in the codebase.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
This skill ships a shared DAO and persistent user model containing token and open_token fields, which are unrelated to TCM constitution recognition. In the context of a health-analysis skill, collecting and persisting authentication-like identifiers expands the data-handling surface unnecessarily and increases privacy and cross-skill data exposure risk if reused by other components in the shared workspace database.

Description-Behavior Mismatch

Medium
Confidence
84% confidence
Finding
The module creates and migrates a general-purpose SQLite database in a shared workspace data directory, behavior that goes beyond the manifest’s stated facial/constitution analysis purpose. In this skill context, broad persistent storage and schema management increase the chance of covert state retention, cross-component data mixing, and privacy issues, especially because the code intentionally redirects all database paths into a shared location.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill exposes a generic `ai_chat(prompt, session_id, timeout)` capability that is not constrained to TCM constitution recognition. In an agent-skill environment, this broad interface can be repurposed for arbitrary prompt handling or later wired to external agent execution, expanding the attack surface beyond the declared medical-analysis purpose and violating least-privilege design.

Intent-Code Divergence

Medium
Confidence
85% confidence
Finding
The docstring claims subprocess-based `openclaw` invocation, but the implementation does not do that and instead uses a dummy result object. This mismatch is dangerous because reviewers and downstream code may assume a trusted execution path or expected behavior that is not actually present, which can hide future unsafe changes or mask broken security assumptions.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
This utility file goes far beyond TCM constitution analysis and implements identity resolution, local user persistence, token handling, workspace inspection, and remote account provisioning. That hidden account-management behavior creates a broad unauthorized data-handling surface and can cause users of a health-analysis skill to unknowingly create or reuse platform identities and transmit authentication context.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The code silently performs a remote `/sys/phoneLogin` request with `register=1`, meaning it can log in or auto-register an account tied to a generated or reused identifier without clear user awareness. In the context of a TCM health-analysis skill, this is especially suspicious because remote identity creation is unrelated to the advertised functionality and could bind user activity to unexpected accounts or backend systems.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The code inspects `OPENCLAW_WORKSPACE`, parses filesystem paths, and locates agent-specific workspace/data/skills directories. While not directly exploit code, it expands environmental awareness and enables the skill to read/write context-specific local state unrelated to TCM analysis, increasing privacy and persistence risk.

Vague Triggers

Medium
Confidence
88% confidence
Finding
Broad keyword-based triggers for history report access can cause unintended invocation of a cloud query without sufficiently clear user intent. Because the queried data concerns health-related analysis history, accidental triggering can expose sensitive historical records or cause unwanted remote data processing.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The automatic invocation rule for TCM analysis is ambiguous and keyword-driven, so ordinary conversation mentioning related concepts may trigger processing of uploaded media. In this context, the media is facial imagery and possibly video, making inadvertent biometric/health inference more sensitive than a normal misfire.

Missing User Warnings

High
Confidence
95% confidence
Finding
The skill processes facial photos/videos and performs cloud-based history queries, yet the description omits a clear privacy warning about biometric-like image processing, remote transmission, retention, and linkage to historical reports. Users may therefore provide sensitive data without informed consent or understanding of downstream storage and access risks.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The `--open-id` parameter is intentionally hidden from help output yet influences which user's analysis list is accessed. Hidden, security-relevant parameters reduce transparency and auditability, and can enable misuse or accidental access to another user's sensitive medical-style analysis history.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The code reads full local file contents into memory and transmits them to an external analysis service without any visible warning, consent step, or disclosure in this file. Because the skill processes potentially sensitive biometric and health-related media, silent upload materially raises privacy and compliance risk.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.install_untrusted_source

Install source points to URL shortener or raw IP.

Warn
Code
suspicious.install_untrusted_source
Location
skills/smyx_common/scripts/config-dev.yaml:2