Back to skill

Security audit

深知公文写作

Security checks across malware telemetry and agentic risk

Overview

This writing and search skill is not clearly malicious, but it needs Review because it can collect phone/SMS verification data, create or retrieve an external service credential, and persist that key in ~/.zshrc with under-disclosed user-facing wording.

Review before installing if you are uncomfortable giving an agent your phone number and SMS code for a third-party service, or with a search API key being stored persistently in ~/.zshrc. For sensitive government, enterprise, or internal documents, confirm what text will be sent to dknowc services and prefer explicit consent or non-persistent credential storage.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (14)

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The README presents the skill as a document-writing/search assistant, but it also instructs the agent to perform external account registration and persist an API key into the user's shell profile. That expands the skill's effective privilege and data-handling scope beyond drafting, increasing the risk of unauthorized credential storage, unexpected side effects, and user confusion about what actions will occur locally.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill includes a phone-based MaaS registration flow that is not strictly necessary for core local drafting functionality and causes the agent to collect personal data and interact with an external service. This broadens the attack and privacy surface: a user may disclose phone number and SMS code without a clear understanding that a separate account is being created or accessed.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
Persisting an API key by modifying ~/.zshrc stores a secret in a broadly readable and long-lived location that may be exposed through backups, terminal history workflows, support bundles, or later shell inspection. It also creates persistent system state changes from a writing skill, which may surprise users and outlive the task that required the credential.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The router explicitly instructs the agent to query a personal material and preference repository (`local_memory`) and apply the results to writing tasks, but the declared skill scope emphasizes writing, search, and Word delivery rather than access to a user-profiled repository. This creates a data-minimization and authorization risk: the agent may retrieve and reuse personal content or preferences without a clear, per-task user request, potentially exposing sensitive information or causing cross-task data leakage.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The script persists a newly issued API key into ~/.zshrc, creating a lasting credential outside the stated document-writing scope and modifying the user's environment without an explicit opt-in. This increases the blast radius of compromise because any later shell session or local process that can read the environment may gain access to the key.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
This skill includes account registration and API-key provisioning logic that is not necessary for a writing assistant and materially expands its privilege and data-handling surface. It collects phone numbers, verification codes, passwords, and issues API keys, so compromise or misuse could create accounts, mint credentials, and bind users to external services without clear separation from the writing function.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
Reading and rewriting ~/.zshrc is unnecessary for document drafting and gives the skill filesystem-side effects unrelated to its advertised purpose. Unneeded local file access increases the risk of configuration corruption, secret exposure, and user surprise, especially because shell profiles often contain other sensitive settings.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The README instructs the agent to persist an API key into the user's shell profile but does not prominently warn that this is a persistent local credential change. Without clear disclosure and consent, users may unknowingly allow a secret to be stored in startup files that affect future sessions and potentially other tools.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The registration flow asks for a phone number and SMS verification code for a third-party service without an explicit privacy disclosure about transmission, account creation/retrieval, and retention implications. This can lead to uninformed sharing of personal data and authentication factors with an external platform under the guise of a drafting workflow.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly instructs the agent to collect a user's phone number and one-time verification code, which are sensitive authentication-related data, but frames this as a lightweight operational step rather than presenting it as security-sensitive handling. Because the agent is also told to reassure users and streamline collection, users may disclose credentials without understanding retention, trust boundaries, or phishing risk, making social-engineering abuse easier if the skill or surrounding system is compromised.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The skill makes strong safety assurances such as 'documents and materials will not be uploaded' while only later mentioning that an access key is stored locally, which can create a misleading picture of the actual security model. Even if technically true about documents, incomplete disclosure about credential creation and storage may cause users to underestimate account or device risk and consent without fully informed understanding.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The script transmits the user's writing request to an external API, but there is no in-code notice, consent gate, or data-classification check before sending potentially sensitive internal material. In a government/enterprise document-writing context, prompts may contain confidential plans, personnel details, or policy drafts, making undisclosed third-party transmission a real privacy and compliance risk.

Missing User Warnings

High
Confidence
98% confidence
Finding
The code writes a live API key into ~/.zshrc by default unless --no-zshrc is supplied, with no confirmation prompt, no interactive warning, and no separate consent gate. Silent persistence of credentials is dangerous because it creates long-lived secret exposure and alters the user's execution environment in a way they may not detect.

External Transmission

Medium
Category
Data Exfiltration
Content
def call_outline_api(query: str, api_key: str, timeout: int) -> tuple[int, dict | str, float]:
    start = time.time()
    response = requests.post(
        OUTLINE_API_URL,
        headers={
            "api-key": api_key,
Confidence
82% confidence
Finding
requests.post( OUTLINE_API_URL, headers={ "api-key": api_key, "Content-Type": "application/json", }, json=

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/source_note_html.py:26