Back to skill

Security audit

Teen Phone / Game Screen Addiction Detection | 青少年沉迷手机/游戏行为识别

Security checks across malware telemetry and agentic risk

Overview

This skill is for teen screen-use monitoring, but it handles sensitive video and report data through cloud APIs while silently creating or reusing local identities and tokens.

Review this carefully before installing. Only use it if you are comfortable sending minors' camera footage or video URLs to the configured service, storing a local identity database with tokens, and querying cloud history reports. Confirm consent, retention, endpoint configuration, and token storage controls first, especially because the bundled config currently points to dev/private HTTP endpoints.

Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (25)

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
69% confidence
Finding
This query builder applies filter keys from a caller-supplied dictionary directly via getattr(self.__model__, key) without validating the field name. While SQLAlchemy prevents classic SQL injection here, untrusted callers can enumerate or query on unintended model fields, potentially exposing sensitive records or enabling authorization bypass if higher layers rely on restricted filtering.

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
67% confidence
Finding
As in list(), count() accepts arbitrary filter keys and resolves them dynamically against model attributes. If exposed to untrusted input, this can leak metadata about sensitive records through count responses and support unauthorized discovery of users or token-bearing entries.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares no permissions while its documented workflow requires shell execution, local file handling, environment use, and network access. This mismatch weakens policy enforcement and informed review, allowing a reviewer or runtime to underestimate what the skill can actually do.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The manifest frames the skill as posture/time analysis, but the body also adds cloud history-report querying and report-link retrieval. This scope expansion can expose historical user data and makes the skill more privacy-sensitive than the declared purpose suggests, especially because it concerns minors.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The skill says adolescent raw videos must not be stored long-term, yet the workflow requires uploaded attachments to be automatically saved locally. For minors' surveillance footage, even temporary local storage increases the risk of retention drift, leakage, unauthorized access, and policy noncompliance.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The skill accepts arbitrary http/https URLs as analysis input even though the described use case is fixed-camera adolescent monitoring. This broadens the trust boundary to attacker-controlled remote resources, enabling misuse for analyzing unintended content and potentially causing the backend to fetch untrusted URLs, which can create privacy, abuse, or server-side request risks depending on the downstream API behavior.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The implementation exposes broader capabilities than the declared screen-addiction/posture-analysis purpose: it accepts arbitrary remote video URLs and can operate as a generic analysis client. This creates a scope/privacy mismatch that can enable collection or processing of unintended video content, especially sensitive footage from homes or schools, without clear purpose limitation.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The `--list` path retrieves analysis history for an `open_id`, which introduces access to user-specific historical data unrelated to the core detection task. In a context involving minors and surveillance footage, history enumeration can expose sensitive behavioral records and creates an authorization/privacy risk if identifiers are guessed, reused, or resolved incorrectly.

Description-Behavior Mismatch

High
Confidence
90% confidence
Finding
This file exposes broad generic network capabilities including CRUD-style helpers and arbitrary HTTP methods that are not constrained to the declared posture/screen-addiction analysis purpose. In a skill that processes sensitive monitoring data about adolescents in homes or schools, such overly broad outbound access increases the risk of unauthorized data exfiltration, hidden secondary functionality, or abuse of the skill as a proxy to interact with unrelated remote services.

Context-Inappropriate Capability

High
Confidence
91% confidence
Finding
The add, edit, and delete helpers permit arbitrary remote resource modification via caller-supplied URLs, which is far broader than necessary for a passive detection/analysis skill. If reachable by other components, this enables misuse to alter external systems, send sensitive behavioral data to unapproved destinations, or perform unintended actions under the skill's execution context.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The generic http_post/http_put/http_get/http_delete methods provide unrestricted general-purpose outbound HTTP access beyond what is needed for the stated screen-addiction detection task. In the context of camera-based monitoring of minors, this broad access materially raises privacy and supply-chain risk because collected observations or identifiers could be sent to arbitrary external systems without purpose limitation.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The file defines persistent user-account storage, including a reusable default user selection flow, even though the skill is described as adolescent posture/screen-time analysis from fixed cameras. This purpose mismatch increases the chance of unnecessary data collection, hidden identity linkage, and broader attack surface than users would reasonably expect.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
The User model stores authentication-related tokens alongside personal profile data such as real name, email, birthday, sex, and age, despite the skill's stated purpose being local behavioral analysis. In a system monitoring adolescents, this creates disproportionate privacy risk: compromise of the local SQLite file would expose both sensitive minors' data and reusable credentials/tokens.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The utility module performs remote login/registration, token acquisition, and persistent account handling that are unrelated to the declared local camera-based posture/screen-time analysis purpose. In this context, hidden account provisioning and outbound service coupling materially increase privacy and supply-chain risk because user/device identity may be transmitted off-device without a purpose-aligned justification.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
The code resolves an identity by reusing values from global state, a workspace file, or a local database, and will auto-create a default user if none exists. For a skill advertised as posture/screen-addiction detection, silently binding analysis activity to a persistent identity is unnecessary and dangerous because it enables tracking and backend association without clear user awareness or need.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The default trigger is broad enough to activate on ordinary video-analysis requests involving homes, study rooms, or schools without clear, specific consent for minor-monitoring. Because this skill processes sensitive behavioral surveillance data about adolescents, accidental activation materially raises privacy and safety risk.

Vague Triggers

Medium
Confidence
87% confidence
Finding
The keyword trigger list overlaps with common phrases about children's eye health or device use, so the skill may launch when users are asking general questions rather than requesting surveillance analysis. In a minor-monitoring context, that can cause unintended collection or processing of sensitive data.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The code silently resolves an internal user identity via OpenIdUtil.resolve_current_open_id using a hidden parameter and current-context behavior, without clear consent or visible warning. In a surveillance-oriented skill processing home/school camera footage of adolescents, implicit identity binding can lead to privacy violations, misattribution of records, and unauthorized access to another user's analysis history if execution context is shared or ambiguous.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill reads local video files into memory and uploads them, or forwards a user-supplied remote video URL for analysis, without any visible consent, warning, or disclosure in this code path. Given the skill processes surveillance-style footage of adolescents in homes or schools, silent transfer of sensitive video materially increases privacy and compliance risk.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The script forwards user-supplied local paths or remote URLs to an external analysis component via `skill.get_output_analysis(...)` without clearly disclosing where data is sent or the privacy implications. Given the skill's stated use in homes, study rooms, or schools and its focus on adolescents, undisclosed transmission of video metadata or content materially increases privacy and compliance risk.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The request wrapper can log request URLs, params, data, response text, and enables HTTPConnection/urllib3 debug output when debug mode is on. In a skill processing potentially sensitive adolescent behavior data, such logging can expose tokens, identifiers, and behavioral metadata to local logs or consoles without an evident user-facing disclosure.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The code reads an internal identity value from data/smyx-api-key.txt and uses it as an open-id source without any local notice in this file. While low complexity, it is still privacy-relevant because a hidden workspace file can silently determine which identity is used for subsequent backend operations.

External Transmission

Medium
Category
Data Exfiltration
Content
"source": ConstantEnum.DEFAULT__SKILL_HUB_NAME
            }
            try:
                _response = requests.post(_url, json=_data)
                if _response.status_code == 200:
                    _response_json = _response.json()
                    if _response_json and _response_json.get("success"):
Confidence
95% confidence
Finding
This code sends a JSON payload containing openId/mobile/source to a remote phoneLogin endpoint, constituting external transmission of identity-linked data. In the stated skill context of local posture/screen-use detection for adolescents, unexpected outbound identity transmission is more concerning because it is not obviously necessary to deliver the advertised function.

Hidden Instructions

High
Category
Prompt Injection
Content
| 📁 格式支持 | 输入要求:支持 mp4/avi/mov 视频,最大 10MB;**关键**:侧面/斜侧上半身视角,可观察头部俯仰角与手臂姿态 |
| 🔎 使用提醒 | **必须**正确区分写作业 / 看书 / 网课(前方有书本/课本、头部朝下但角度多在 30-45° 之间)与"低头看屏幕",避免将正常学习行为误报为沉迷 |
| 🔎 使用提醒 | 短时低头取物、写字时短暂低头等情形不应计入连续低头段;建议连续 ≥ 5 分钟才计为 1 段 |
| 🧑‍⚖️ 结果性质 | 红线约束:**禁止**输出"游戏成瘾症"等精神医学诊断或量表评分;**禁止**长期存储青少年原始视频;**禁止**未经监护人同意将数据提供给学校或第三方;**禁止**使用强惩罚性语言 |
| 🔎 使用提醒 | 涉及未成年人,必须取得**监护人 + 青少年本人**双重知情同意;建议提前与孩子沟通用途与边界,避免成为家庭冲突导火索 |
| 🔎 使用提醒 | 友好提醒文案统一使用**温和、尊重、可执行**的措辞(如"眼睛该休息啦~ 起来走 3 分钟"),**避免**指责性表达 |
| 🚫 脚本限制 | 禁止临时生成脚本,只能用技能本身的脚本 |
Confidence
80% confidence
Finding
The hidden-instructions indicator suggests non-obvious control text or invisible characters embedded in a safety-critical section. Hidden instructions in a skill can mislead downstream agents, bypass reviewer expectations, or create discrepancies between what humans see and what an automated system follows.

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
---
name: "smyx-teen-screen-addiction-detection-analysis"
description: "Using fixed cameras at home, study rooms or schools, the system analyzes adolescents' posture while using phones or gaming devices: head pitch angle (downward > 45°) and hand-holding-device posture (hand grasp + bent arm). It counts daily cumulative screen-looking time. | 通过家庭、自习室或学校固定摄像头,分析青少年使用手机或游戏设备的姿势,检测头部低垂角度(俯仰角大于45°)以及手持设备的姿态(手部抓握且手臂弯曲),统计每日累计低头看屏幕的时长。当连续低头时长超过设定阈值(如单次超过30分钟,或日累计超过2小时)时,输出'沉迷手机/游戏'提醒,建议家长干预并引导健康用眼习惯。"
version: "1.0.12"
license: "MIT-0"
---
Confidence
84% confidence
Finding
The YARA hit for metadata/tool poisoning is credible here because the manifest contains mixed descriptive and instructional content plus indicators of hidden text. Poisoned metadata can manipulate tool selection, conceal true behavior, or cause an agent to treat a broader, more invasive function set as trusted—especially risky in a surveillance skill handling minors' data.

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