Back to skill

Security audit

小河狸发票助手

Security checks across malware telemetry and agentic risk

Overview

This skill is a coherent local invoice-analysis helper, but it handles sensitive business tax data and users should keep its endpoint local.

Install only if you intend to let the agent read invoice ledger data, tax IDs, amounts, raw invoice JSON, and attachment metadata from Little Beaver Invoice Assistant. Keep the base URL on 127.0.0.1 or localhost unless you deliberately operate a trusted remote endpoint, and only ask it to open attachments when you expect a local PDF/OFD/XML viewer to launch.

SkillSpector

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

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Content
def build_query(args: argparse.Namespace, fields: list[str]) -> str:
    pairs: list[tuple[str, str]] = []
    for field in fields:
        value = getattr(args, field.replace("-", "_"), None)
        if value is None or value == "":
            continue
        if isinstance(value, list):
Confidence
50% confidence
Finding
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The manifest description emphasizes connecting to the local app, querying ledgers/details, statistics, rankings, trends, tax summaries, and querying archived electronic invoice attachments. In addition to those read-oriented operations, the code exposes an `open-attachment` command that performs a POST to `/api/skill/attachments/{id}/open`, causing an external side effect by opening a file or invoking the host application.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The manifest says the skill processes data through the application's localhost Skill API on the local machine. However, `normalize_base_url` accepts both `http://` and `https://` and `discover_base_url` prioritizes a user- or environment-supplied `--base-url`/`INVOICE_ASSISTANT_BASE_URL`, which can point to non-local hosts; only auto-discovered ports are constrained to `127.0.0.1`, and the metadata check validates app name rather than locality.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The instruction '默认使用简体中文回答' forces a specific language choice as the default behavior. This is a natural-language policy concern because the file does not offer the user a language choice or make the locale constraint explicitly opt-in.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
这是一个 markdown 文件,适用缺少用户警示检查。L23 描述的 `/api/skill/invoices` 返回内容包含企业税号、发票号码及原始 JSON 等敏感业务数据,但文档仅说明字段内容,没有提醒调用方注意敏感信息处理、访问控制或最小化展示原则。

Missing User Warnings

Low
Confidence
84% confidence
Finding
L37-L39 说明 `POST /api/skill/attachments/{id}/open` 会调用系统默认程序打开指定附件。虽然文档提到不会上传文件内容,但没有提醒该操作会在本机启动外部程序、可能打断当前工作流,且应仅在用户预期下执行。

Scope Creep

Low
Category
Excessive Agency
Content
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Confidence
70% confidence
Finding
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Unbounded Resource Access

Medium
Category
Excessive Agency
Content
continue
        seen.add(candidate)
        try:
            meta = http_get_json(f"{candidate}/api/metadata", timeout=0.6)
            health = http_get_json(f"{candidate}/api/skill/health", timeout=0.6)
        except (OSError, URLError, HTTPError, TimeoutError, json.JSONDecodeError):
            continue
Confidence
75% confidence
Finding
Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Unbounded Resource Access

Medium
Category
Excessive Agency
Content
seen.add(candidate)
        try:
            meta = http_get_json(f"{candidate}/api/metadata", timeout=0.6)
            health = http_get_json(f"{candidate}/api/skill/health", timeout=0.6)
        except (OSError, URLError, HTTPError, TimeoutError, json.JSONDecodeError):
            continue
        if meta.get("success") and meta.get("app_name") == APP_NAME and health.get("success"):
Confidence
75% confidence
Finding
Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.