Back to skill

Security audit

中文医学文献免费下载

Security checks across malware telemetry and agentic risk

Overview

The main literature-search tool is coherent, but the package also includes an under-disclosed tracker that can send reports through a hardcoded SSH host to Feishu.

Install only if you are comfortable with the bundled tracker script. Do not use --notify unless you understand that it copies the report to a hardcoded private SSH host and posts it to Feishu using remote credentials; prefer removing or disabling that script/path, or requiring a user-configured destination with host-key verification.

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 (17)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
"""
    try:
        # 1) 传 payload 到 .82
        scp = subprocess.run(
            ["scp", "-o", "StrictHostKeyChecking=no", "-o", "ConnectTimeout=8",
             text_path, "ubsea@192.168.3.82:/tmp/yiigle_tracker_report.txt"],
            capture_output=True, timeout=30)
Confidence
97% confidence
Finding
This subprocess call invokes SCP to copy a generated report to a hardcoded remote host, creating an external data transmission path from the local environment. Although arguments are passed as a list rather than through a shell, the behavior is still risky because it exports potentially sensitive query/report contents to external infrastructure and disables SSH host key verification, making man-in-the-middle interception easier.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
sys.exit(0 if ok else 1)
PYEOF
'''
        ssh = subprocess.run(
            ["ssh", "-o", "StrictHostKeyChecking=no", "-o", "ConnectTimeout=8",
             "ubsea@192.168.3.82", "bash -s"],
            input=send_sh.encode(), capture_output=True, timeout=60)
Confidence
98% confidence
Finding
This subprocess call opens an SSH session to a hardcoded remote server and executes a transmitted shell script, which exceeds the expected scope of a local literature-tracking tool. Remote command execution plus disabled host key checking creates a powerful exfiltration and abuse channel if the remote endpoint is compromised or traffic is intercepted.

Lp3

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding
The skill documentation advertises substantial capabilities including network access, filesystem reads/writes, environment-variable use, and shell-style execution, yet no explicit permission declaration is present. This weakens sandboxing and informed consent because operators may enable a skill whose effective privileges are broader than the manifest communicates, increasing the chance of unexpected outbound access or local file modification.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
This is a meaningful transparency and trust-boundary failure: the declared behavior centers on OA retrieval, but the analyzed description indicates additional undeclared behaviors including a second data source, periodic tracking, subprocess usage, and especially SSH/SCP-based remote notification to a private host with stored credentials. Undisclosed remote command execution and credentialed exfiltration paths materially expand the attack surface and could enable data leakage or unauthorized network activity under the guise of a literature tool.

Description-Behavior Mismatch

Medium
Confidence
84% confidence
Finding
The skill metadata markets the connector as Weipu OA-focused, but the implementation silently queries and processes Yiigle as a second external source. This discrepancy matters because it changes the network/data-exposure boundary, user expectations, and compliance review scope; users may unknowingly send queries and metadata to an unadvertised third party.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The code contains a hardcoded workflow that copies report content to an internal server and then pushes it into Feishu, which is unrelated to the manifest's core OA search/download/citation-verification function. This creates a built-in exfiltration path for user-derived data and environment-derived content without clear user approval or transparent configuration.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The script executes external system commands and a remote shell script as part of its notification path, broadening the trust boundary well beyond literature search and download. Even if intended for convenience, this design introduces unnecessary command execution and remote dependency risks that can be abused for data leakage or lateral movement.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The tracker script extends the advertised skill behavior by adding scheduled tracking, stateful monitoring, and external push reporting. This mismatch is security-relevant because users may invoke a literature tool without expecting persistent monitoring or outbound notifications, increasing surprise and data-governance risk.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The README explicitly states that Feishu delivery reuses credentials from local storage (`~/.hermes/.env`) without tying that access to the manifested purpose of literature retrieval. Accessing local secrets for an unrelated outbound integration increases the chance of credential misuse, unintended exfiltration, and privilege overreach if the skill is invoked in environments where those secrets are present.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
The README explicitly states that Feishu delivery reuses credentials from local storage (`~/.hermes/.env`) without tying that access to the manifested purpose of literature retrieval. Accessing local secrets for an unrelated outbound integration increases the chance of credential misuse, unintended exfiltration, and privilege overreach if the skill is invoked in environments where those secrets are present.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The verifier silently expands its trust boundary from the declared VIP OA source to a second source, Yiigle, without clear user disclosure or an explicit opt-in. That can mislead downstream users about provenance, create policy/compliance issues, and alter verification outcomes in ways callers do not expect, especially when source-specific semantics matter.

Intent-Code Divergence

Medium
Confidence
88% confidence
Finding
The documented meaning of 'invalid' says a citation is invalid when VIP cannot find it, but the implementation only marks it invalid after both VIP and Yiigle fail. This discrepancy can cause consumers to overtrust results, misunderstand what was actually verified, and make incorrect audit or citation decisions based on inconsistent semantics.

Vague Triggers

Medium
Confidence
72% confidence
Finding
Overly broad trigger phrases can cause the skill to auto-activate for ordinary user requests, leading to unexpected network access, file downloads, or citation-processing workflows without clear user intent. In a skill with downloading, caching, and multi-source retrieval behavior, over-triggering increases the risk of unanticipated external requests and local artifact creation.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
SSL certificate verification can be disabled via CN_MED_OA_VERIFY_SSL, but the code provides no prominent warning, gating, or audit signal when transport security is downgraded. In a networked downloader that fetches metadata and PDFs from external services, this enables man-in-the-middle tampering, response spoofing, and potentially malicious file delivery if the environment variable is set.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The code allows TLS certificate verification to be disabled via the CN_MED_OA_VERIFY_SSL environment variable, causing HTTPS requests to proceed without authenticating the remote server. In a networked downloader that fetches metadata and PDFs from external sites, this enables man-in-the-middle tampering, content substitution, and response forgery, potentially poisoning downloaded files and citation data.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The README says `--notify` pushes results to a Feishu channel using local credentials, but it does not prominently warn that enabling this sends tracking output to an external service. This creates a transparency and consent problem: users may unknowingly transmit bibliographic results, links, or operational metadata off-host using existing secrets.

External Transmission

Medium
Category
Data Exfiltration
Content
set -e
export PATH="$HOME/.local/bin:/usr/bin:/bin:$PATH"
set -a; source ~/.hermes/.env; set +a
TOKEN=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
  -H "Content-Type: application/json" \
  -d "{\"app_id\":\"$FEISHU_APP_ID\",\"app_secret\":\"$FEISHU_APP_SECRET\"}" \
  | grep -o '"tenant_access_token":"[^"]*"' | cut -d'"' -f4)
Confidence
96% confidence
Finding
The embedded shell script requests a Feishu tenant access token using credentials sourced from a remote host's environment and then sends report contents to the Feishu API. This is an external transmission channel for locally generated content and introduces credential-handling and disclosure risks outside the core function of the tool.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.insecure_tls_verification

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
cn_med_oa.py:40

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/cn_med_oa.py:40