Back to skill

Security audit

insentek-api-skill

Security checks across malware telemetry and agentic risk

Overview

This is a coherent Insentek IoT data query and export skill, with credential and network risks that are mostly disclosed and purpose-aligned.

Install only if you trust Insentek and need this device-data integration. Configure credentials with `npx @insentek/openapi-skill login`, do not paste appid or secret into chat, leave `INSENTEK_API_BASE` unset unless you control the endpoint, and choose export/report output paths carefully.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Tainted flow: 'req' from os.environ.get (line 38, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
for k, v in headers.items():
            req.add_header(k, v)
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            return json.loads(resp.read().decode("utf-8"))
    except urllib.error.HTTPError as e:
        body = e.read().decode("utf-8")
Confidence
90% confidence
Finding
with urllib.request.urlopen(req, timeout=30) as resp:

Tainted flow: 'req' from os.environ.get (line 78, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
req.data = json.dumps(data).encode("utf-8")

    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            return json.loads(resp.read().decode("utf-8"))
    except urllib.error.HTTPError as e:
        # 认证失败,尝试刷新 token 后重试一次
Confidence
92% confidence
Finding
with urllib.request.urlopen(req, timeout=30) as resp:

Tainted flow: 'req' from os.environ.get (line 78, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
# 7. API 可达性(不带认证,只检查服务是否在线)
    try:
        req = urllib.request.Request(f"{api_base}/v3/token", method="GET")
        with urllib.request.urlopen(req, timeout=10) as resp:
            # 400 是正常的(缺少参数),说明服务在线
            results["api_reachable"] = {
                "ok": True,
Confidence
85% confidence
Finding
with urllib.request.urlopen(req, timeout=10) as resp:

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The documented API surface includes `/v3/device/{sn}/attr` and `/v3/device/{sn}/transport`, which are state-changing operations that exceed the skill's stated scope of natural-language querying and analysis. In an agent setting, exposing undocumented write/forward actions can enable unintended device reconfiguration or exfiltration of sensor data to third parties if the skill maps user prompts to these endpoints.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
This code provides arbitrary local file write capability to a caller-controlled path, with only a small denylist of protected directories. In an agent context, that can be abused to overwrite user files, drop HTML/JS content in sensitive locations, or write to startup/web-accessible directories, especially because symlinks and many dangerous paths are not comprehensively blocked.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The README explicitly instructs users to paste `appid` and `secret` into a chat message. In agent platforms, chat content may be logged, retained, exposed to plugins/tools, or included in transcripts, so encouraging credential submission through conversational context creates a real secret-handling risk. This is more dangerous here because the skill is specifically designed to operate inside third-party agent runtimes where prompt history and tool traces may persist outside the user's direct control.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The example explicitly states that the script will automatically read a locally stored token and then perform API requests, but it does not show any user-facing notice, confirmation, or transparency about credential use and outbound network access. In an agent skill context, this can normalize silent credential consumption and remote data access, which increases the risk of surprising users and causing unauthorized or unintended disclosure of device/account data.

Missing User Warnings

High
Confidence
98% confidence
Finding
The command prints the App ID, secret, and token directly to stdout, which exposes sensitive credentials to anyone with terminal access and to shell history capture, terminal logging, CI logs, screen sharing, or support transcripts. In this skill context, those values can grant API access to IoT device data, so disclosure could enable unauthorized data access and ongoing account compromise until the credentials are rotated.

Missing User Warnings

High
Confidence
99% confidence
Finding
The login command prints the App ID, App Secret, and access token directly to the console after authentication. Console output is commonly captured in terminal scrollback, shell history tooling, CI logs, remote session transcripts, and screen recordings, so exposing long-lived secrets here materially increases the chance of credential theft and account compromise.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The token example sends `appid` and `secret` in the URL query string, which is commonly logged by clients, proxies, gateways, browser history, and server access logs. That increases the risk of credential leakage and unauthorized token minting if those logs are exposed.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The device-attribute endpoint allows changing device name and reporting cycle, but the documentation does not clearly emphasize that this is a write operation with operational consequences. In agent-driven integrations, that omission makes prompt-induced or accidental configuration changes more likely because the action may be mistaken for a read/query endpoint.

Missing User Warnings

High
Confidence
95% confidence
Finding
The data forwarding endpoint sends device data to an external national platform, yet the documentation does not clearly warn about the external transmission, data-governance implications, or consent requirements. In the context of an IoT data-query skill, this is especially risky because a user may expect analysis only, not third-party disclosure of telemetry.

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec, suspicious.potential_exfiltration

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
packages/insentek-skill-cli/lib/python.js:9

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
packages/insentek-skill-cli/lib/utils.js:34

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
packages/insentek-skill-cli/test/cli-json.test.js:11

Sensitive-looking file read is paired with a network send.

Warn
Code
suspicious.potential_exfiltration
Location
packages/insentek-skill-cli/lib/core/credentials.js:119