Back to skill

Security audit

王琦中医体质学术助手

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its academic assistant purpose, but it needs review because optional PDF/LLM processing can send document text and an API key to an unexplained plaintext endpoint.

Install only if you are comfortable reviewing the scripts first. Before using PDF extraction with LLM support, set an explicit trusted HTTPS or loopback BASE_URL, use a limited API key, and do not process identifiable patient or confidential documents. Avoid the curl-to-bash installer path unless you independently verify the installer.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
TOOLS.md:265
Finding

Unverified Remote Installer Is Piped Directly into Bash

Content
View full analysis
Remediation
View remediation
/install.sh echo " skillhub-install.sh" | sha256sum --check - less skillhub-install.sh bash skillhub-install.sh --no-skills ``` ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/extract_knowledge_cards.py:883
Finding

PDF Content and API Credentials Can Be Sent to a Hard-Coded Plaintext Endpoint

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:2
Finding

Python Dependencies Are Not Pinned to Reviewed Versions or Integrity Hashes

Content
View full analysis
=1.23.0 pdfplumber>=0.10.0 # Vector database chromadb>=0.4.0 # LLM calls openai>=1.0.0 # Environment variables python-dotenv>=1.0.0 # Chinese-language processing (optional) jieba>=0.42.0 # Milvus (optional, if Milvus is used) # pymilvus>=2.3.0 # Weaviate (optional, if Weaviate is used) # weaviate-client>=3.25.0 ``` The installation documentation invokes: ```bash pip install -r requirements.txt ``` ### Technical Analysis Every active dependency uses only a lower-bound constraint. This permits the package resolver to select future versions that were not part of the reviewed project. Transitive dependencies are also unconstrained, and no lockfile or cryptographic package hashes are present in the reviewed dependency file. A lower-bound requirement is not proof that any currently available dependency is malicious. However, it creates a supply-chain exposure because installation behavior can change over time without any modification to this repository. A compromised maintainer account, malicious future release, or compromised transitive package could be selected automatically. Python packages can execute code during installation, import, or normal use. The broad constraints therefore make builds non-reproducible and allow newly published code to run with the user's privileges. ### Attack Path 1. A direct or transitive dependency publisher account is compromised, or a malicious future version is released. 2. The malicious release still satisfies the project's broad `>=` version constraint. 3. A user follows the documented `pip install -r requirements.txt` command. 4. The resolver selects the newly available malicious or compromised version. 5. Package installation, import-time behavior, or later application exec ...[truncated 809 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (141)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A skill described as end-user academic assistance but actually focused on testing, schema validation, and extraction-pipeline QA creates a misleading trust model. While not inherently malicious, this discrepancy can hide non-obvious access to local data, pipeline internals, and maintenance functions that should undergo stricter review than a passive content assistant.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
97% confidence
Finding

The documentation recommends curl ... | bash, which executes remotely fetched script content directly without inspection, signature verification, or checksum validation. If the remote server, CDN, DNS, TLS termination, or distribution channel is compromised, users can execute arbitrary code on their machine immediately.

Content

Scanner excerpt · TOOLS.md (reported line 265)May include surrounding context.

bash
# 1. 安装 CLI
curl -fsSL https://skillhub.cn/install/install.sh | bash -s -- --no-skills

# 2. 登录
skillhub login --key "$SKILLHUB_KEY" --host https://api.skillhub.cn

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · TOOLS.md (reported line 351)May include surrounding context.

md
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/ask.py (reported line 27)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/health_check.py (reported line 125)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/health_check.py (reported line 135)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/runtime_paths.py (reported line 7)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/runtime_paths.py (reported line 50)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/smoke_test.py (reported line 131)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/upload_to_openai.py (reported line 110)May include surrounding context.

python
This keeps all CLI scripts aligned on:
- project-relative default paths
- WANGQI_ENV_FILE override
- workspace-root .env fallback during local development
"""

import os

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/ask.py (reported line 96)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/build_local_index.py (reported line 122)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/retrieve.py (reported line 87)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/runtime_paths.py (reported line 40)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/runtime_paths.py (reported line 45)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/runtime_paths.py (reported line 50)May include surrounding context.

python
if explicit_path.exists():
            return explicit_path.resolve(), "WANGQI_ENV_FILE", None

    workspace_env = WORKSPACE_DIR / ".env"
    if workspace_env.exists():
        warning = None
        if explicit_path is not None:

Ssd 3

Medium
Category
Not specified by scanner
Confidence
68% confidence
Finding

The guide shows a complete .env example containing API credential fields populated with key-like values (API_KEY=sk-lm-xxx, EMBEDDING_API_KEY=sk-lm-xxx). While presented as setup help, this natural-language documentation encourages storing and sharing sensitive authentication material directly in visible text, which can lead downstream users or models to reveal or reproduce secrets in responses or logs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README explicitly proposes future ingestion of consultation records, which are likely to contain highly sensitive health information, but it only mentions '脱敏处理' briefly and does not provide a clear privacy, consent, retention, access-control, or compliance warning. In a medical/health-related skill, this omission can lead operators to collect and process personal medical data insecurely, increasing the risk of privacy breaches and regulatory noncompliance.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill describes operational capabilities such as reading files, writing files, network-backed RAG, ChromaDB access, and knowledge-base maintenance, but does not declare an explicit tool or permission scope. That creates a governance gap: reviewers and runtime policy engines cannot easily constrain the skill to the minimum required capabilities, increasing the chance of unintended file or network access.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_resource_identifier

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
scripts/extract_knowledge_cards.py:884